17年,大一暑假首次参加齐鲁软件设计大赛(现名山东省大学生软件设计大赛),在大三师姐的怂恿下,号召了当时身边的“天赋少年”们踏上了一条价值300人民币的不归路。。。。

1. 人员物色(一个优秀的指挥者胜过三个优秀的程序员)

大赛小组人数区间3~5人,工作简单分配的话就是编码,美工和文档。小队五人也是按照这个规则进行的划分。但是问题很快就暴露出来了,作为小队队长的我,无论是项目设计经验还是工作安分配验都严重匮乏(我对项目的理解程度,只是在兴趣使然的情况下拜读了FrederickP.Brooks.Jr.《人月神话》),以至于在后续的工作中,我自己完全沦为了一名devops(开发,运维,测试于一体的职位),这直接导致了我整个暑假都在战战兢兢码代码的过程中度过。

介于我汗与泪的教训,在这里引入第一个公理:
一个优秀的指挥者胜过三个优秀的程序员(可以推广为程序员应该学会用架构的思维看待每一个项目)(抱紧对的大腿等于成功一半) 。
指挥者只有对项目划分、前端设计、后台搭建、框架使用有了足够系统的学习,且对算法的理解达到一定深度,对一个项目的每一部分有一个大致的、关键的了解,才能在很短时间内将每项子任务精确到个人,于是即便他不参加到项目进程当中,工作也会有条不紊的开展起来。

2. 工具选择(“实际”-“最优”≡“浪费”)

在敲定作品主题是手机游戏之后,小组开始了漫长而又坎坷的摸索历程。
在最终的总结中我写到:

“我们挑选了两款当今使用较多的游戏设计特别是2D游戏设计领域的软件——cocos2D-x与unity3D。
由于许多人们耳熟能详的游戏都出自cocos之手,我们欣然优先选择了cocos。但后期的学习中,我们渐渐发现,cocos的设计较为死板,且可利用资源较少,同时由于网上搜寻到的资料是推荐在mac上运行的,这并不符合我们项目小组的设备现状。
于是我们转而选择了现今游戏开发走在前列的unity。Unity作为3D游戏设计的扛把子,在2D与3D游戏领域都有着受欢迎的代表作品,尽管unity涉足2D时间较晚,但是由于其3D投影2D的思路,使得它在2D游戏领域发展极快。
可视化界面,优秀的资源调配,游戏过程实时校验,以及项目最后的android导出,堪称一条龙服务。”

要在有限的时间内要创造出最高的价值,就意味着我们不应当浪费时间在许多无意义的工作中:
虽然对于问题的摸索是难能可贵的经历,但在严格规定deadline的竞赛中,摸索的代价却是最为珍贵的时间和人力,这是任何一个队伍都承受不起的。
所以,认清浪费的本质,尽可能避免错误的深入与摸索,急流勇退并非明哲保身,而是为了以退为进。

3. 决赛准备(万里挑一的灵魂亦需好看的皮囊包装)

软件设计大赛的得分点其实主要还是在创新。相较于程序大牛,我们的代码无论是整体性能还是结构美观都相差太多。能够打动评审的,是别出心裁的思路以及天马行空的想象。
这也意味着演示文档变成了很重要的一项工作,只有在演示过程中(无论视频还是PPT)都力争先声夺人,力求给评审留下好的第一印象。
这并不意味着只需要功利的只关注界面设计,好的用户体验也包括响应时间,作品的易学性,正确性等等,我们需要的,只是一个能激起他人探索欲望的契机罢了。

万里挑一的灵魂亦需好看的皮囊包装

好的作品永远需要需要足够优秀的外在来撩动用户的好奇,促使他们对真正有趣的内在进行探索。

4. 总结

一个项目小组成果的优劣直接取决于小组的代码水准,默契程度,分工合理与否,以及设计创意提出。但是最重要的部分还是取决于是否团结,人终归还是一个团队的基础。
必须承认,参与这样的程序设计是对个人能力的一种考验,也是对自己的编程思想以及理论实践能力的拷问。
拢总算来,收获良多。

另附:
加权创建五子棋AI代码:

class AI
{// 15*15共有572种五子连珠的可能性const int MaxFiveChainCount = 572;//玩家的可能性bool[,,] _ptable = new bool[Board.CrossCount, Board.CrossCount, MaxFiveChainCount];//电脑的可能性bool[, ,] _ctable = new bool[Board.CrossCount, Board.CrossCount, MaxFiveChainCount];//记录2位玩家所有可能的连珠数,-1则为永远无法5连珠int[,] _win = new int[2, MaxFiveChainCount];//记录每格的分值int[,] _cgrades = new int[Board.CrossCount, Board.CrossCount];int[,] _pgrades = new int[Board.CrossCount, Board.CrossCount];//记录棋盘int[,] _board = new int[Board.CrossCount, Board.CrossCount];int _cgrade, _pgrade;int _icount, _m, _n;int _mat, _nat, _mde, _nde;public AI( ){for ( int i = 0;i<Board.CrossCount;i++){for ( int j = 0;j<Board.CrossCount;j++){_pgrades[i, j] = 0;_cgrades[i, j] = 0;_board[i, j] = 0;}}//遍历所有的五连子可能情况的权值  //横  for ( int i = 0;i<Board.CrossCount;i++){for ( int j = 0;j<Board.CrossCount - 4 ;j++){for( int k = 0;k < BoardModel.WinChessCount;k++){_ptable[j + k, i, _icount] = true;_ctable[j + k, i, _icount] = true;}_icount++;}}//横  for (int i = 0; i < Board.CrossCount; i++){for (int j = 0; j < Board.CrossCount - 4; j++){for (int k = 0; k < BoardModel.WinChessCount; k++){_ptable[i, j + k,  _icount] = true;_ctable[i, j + k,  _icount] = true;}_icount++;}}// 右斜for (int i = 0; i < Board.CrossCount - 4; i++){for (int j = 0; j < Board.CrossCount - 4; j++){for (int k = 0; k < BoardModel.WinChessCount; k++){_ptable[j+k, i + k, _icount] = true;_ctable[j + k, i + k, _icount] = true;}_icount++;}}// 左斜for (int i = 0; i < Board.CrossCount - 4; i++){for (int j = Board.CrossCount - 1; j >= 4; j--){for (int k = 0; k < BoardModel.WinChessCount; k++){_ptable[j - k, i + k, _icount] = true;_ctable[j - k, i + k, _icount] = true;}_icount++;}}for (int i = 0; i < 2; i++){for (int j = 0; j < MaxFiveChainCount; j++){_win[i, j] = 0;}}_icount = 0;    }void CalcScore( ){_cgrade = 0;_pgrade = 0;_board[_m, _n] = 1;//电脑下子位置     for (int i = 0; i < MaxFiveChainCount; i++){if (_ctable[_m, _n, i] && _win[0, i] != -1){_win[0, i]++;//给白子的所有五连子可能的加载当前连子数  }if (_ptable[_m, _n, i]){_ptable[_m, _n, i] = false;_win[1, i] = -1;}}}void CalcCore( ){//遍历棋盘上的所有坐标  for (int i = 0; i < Board.CrossCount; i++){for (int j = 0; j < Board.CrossCount; j++){//该坐标的黑子奖励积分清零  _pgrades[i, j] = 0;//在还没下棋子的地方遍历  if (_board[i, j] == 0){//遍历该棋盘可落子点上的黑子所有权值的连子情况,并给该落子点加上相应奖励分  for (int k = 0; k < MaxFiveChainCount; k++){if (_ptable[i, j, k]){switch (_win[1, k]){case 1://一连子  _pgrades[i, j] += 5;break;case 2://两连子  _pgrades[i, j] += 50;break;case 3://三连子  _pgrades[i, j] += 180;break;case 4://四连子  _pgrades[i, j] += 400;break;}}}_cgrades[i, j] = 0;//该坐标的白子的奖励积分清零  if (_board[i, j] == 0)//在还没下棋子的地方遍历  {//遍历该棋盘可落子点上的白子所有权值的连子情况,并给该落子点加上相应奖励分  for (int k = 0; k < MaxFiveChainCount; k++){if (_ctable[i, j, k]){switch (_win[0, k]){case 1://一连子  _cgrades[i, j] += 5;break;case 2: //两连子  _cgrades[i, j] += 52;break;case 3://三连子  _cgrades[i, j] += 130;break;case 4: //四连子  _cgrades[i, j] += 10000;break;}}}}}}}}// AI计算输出, 需要玩家走过的点public void ComputerDo(int playerX, int playerY, out int finalX, out int finalY ){setPlayerPiece(playerX, playerY);CalcCore();for (int i = 0; i < Board.CrossCount; i++){for (int j = 0; j < Board.CrossCount; j++){//找出棋盘上可落子点的黑子白子的各自最大权值,找出各自的最佳落子点 if (_board[i, j] == 0){if (_cgrades[i, j] >= _cgrade){_cgrade = _cgrades[i, j];_mat = i;_nat = j;}if (_pgrades[i, j] >= _pgrade){_pgrade = _pgrades[i, j];_mde = i;_nde = j;}}}}//如果白子的最佳落子点的权值比黑子的最佳落子点权值大,则电脑的最佳落子点为白子的最佳落子点,否则相反  if (_cgrade >= _pgrade){_m = _mat;_n = _nat;}else{_m = _mde;_n = _nde;}CalcScore();finalX = _m;finalY = _n;}void setPlayerPiece( int playerX, int playerY ){int m = playerX;int n = playerY;if ( _board[m, n ] == 0 ){_board[m, n] = 2;for( int i = 0;i<MaxFiveChainCount;i++){if ( _ptable[m, n, i ] && _win[1, i] != -1 ){_win[1, i]++;}if (_ctable[m,n,i]){_ctable[m, n, i] = false;_win[0, i] = -1;}}}}}

首次参加齐鲁软件设计大赛经验(及总结出的划水要点)相关推荐

  1. 09年齐鲁软件设计大赛题目

                  2009年软件设计大赛命题  第一部分 参赛题目                  一.手机游戏 随着手机的广泛普及和手机技术含量的不断升级,随着3G时代的到来,种种迹象都 ...

  2. 2014年齐鲁软件大赛智能手机应用一等奖——防盗星

    猫猫分享,必须精品 这是本猫14年参加齐鲁软件大赛的android作品,欢迎大家交流学习 素材代码地址:http://download.csdn.net/detail/u013357243/85589 ...

  3. 第九届“中国软件杯”大学生软件设计大赛总决赛落幕

    11月3-5日,第九届"中国软件杯"大学生软件设计大赛(以下简称大赛)总决赛在江苏常州圆满举办.经过九年积累,大赛已经吸引包括全部985.211高校在内的千余所院校.数万支团队.二 ...

  4. 实力吸引报名! 第八届“中国软件杯”大学生软件设计大赛课工场出题受热捧...

    近日,第八届"中国软件杯"大学生软件设计大赛(简称:大赛) 作品提交阶段结束,共吸引全国大学生(含高职生)提交作品5000余件,彰显了大赛非同寻常的魅力. 值得一提的是,作为本次大 ...

  5. 课工场“中国软件杯”大学生软件设计大赛表彰大会在京成功举办

    8月21日上午,第八届"中国软件杯"大学生软件设计大赛课工场指导老师与课工场代表队表彰大会在北京成功举办.课工场创始人兼总经理肖睿.课工场校企合作总监潘玉贞.课工场航天桥五道口中关 ...

  6. 蓝桥杯青少年创意编程python初级考察内容_首次参加蓝桥杯青少年编程大赛成绩显著...

    原标题:首次参加蓝桥杯青少年编程大赛成绩显著 首次参加蓝桥杯 编程创意大赛scratch组成绩显著 2018年12月22日,我校18名学生在人民大学参加第十届蓝桥杯青少年编程大赛. 这是中山实验学校第 ...

  7. 关于第二界“中科杯”全国软件设计大赛

    “中科杯”全国软件设计大赛是中国科学院软件研究所于2009年发起,中国软件行业协会和中国科学院软件研究所共同主办的一项面向中国大陆和港澳台地区在校青年学生的公益性质的全国性软件设计大赛.旨在“大力发展 ...

  8. 首届“中科杯”全国软件设计大赛拉开帷幕

    4月29日,中国科学院软件研究所隆重召开新闻发布会,中国软件行业协会理事长陈冲.中科院软件所副所长黄涛共同宣布了两家单位联合主办的首届"中科杯"全国软件设计大赛正式开赛.此次大赛面 ...

  9. “中国软件杯”大学生软件设计大赛百度赛项东部赛区正式启动

    当前,生成式AI热潮推动,人工智能正驶入发展快车道,复合型AI人才需求攀升,产教融合持续深化.3月25日,在泉城济南,百度飞桨协同山东大学.济南大学.青岛理工大学,共同举办飞桨院长高峰论坛暨" ...

  10. 疫情数据可视化-湖北省疫情可视化软件设计大赛作品

    湖北省疫情监测中心(疫情数据可视化)目录 前言 一.数据可视化 二.疫情可视化 湖北省疫情监测中心 ① 主要框架 ② 数据爬取 ③ 疫情可视化模块(疫情监测模块) ④ 便民信息可视化模块(检测信息模块 ...

最新文章

  1. 如何查看用index.php,为什么整个网站使用一个index.php页面?
  2. Rhel7/Centos7 修改运行级别
  3. Android系统JNI的实现方式
  4. ANSYS——自定义的梁截面中心(法线节点)的偏置,详细全面
  5. 05 | 前馈网络与反向传播:模型的自我学习(下)
  6. html网页制作每周食谱,新增食谱.html
  7. 比拼 Kafka, 大数据分析新秀Pulsar到底好在哪
  8. gcc g++ 参数
  9. 牛客网刷题(Hw题库)
  10. ANSYS CFD网格划分笔记3
  11. 华为手机怎样关闭鸿蒙系统,华为手机怎么升级鸿蒙系统-华为手机升级成鸿蒙系统教程汇总...
  12. Java利用HttpPost工具类提交数据
  13. OpenCV单目平面测距
  14. 100部5星国外经典电影
  15. 小白成长记(三、SqlSugar的sum用法)
  16. 三星电子在中国正式召开三星Galaxy Note20系列新品体验发布会~~~~
  17. 互点流量,互刷排名,刷下拉刷联想-胖虎图图-互动点击系统
  18. 【教程】花100块钱DIY一台民航客机雷达
  19. Android不明原因崩溃,不断重启解决办法记录
  20. android如何设置图标,Android APP如何设置显示图标

热门文章

  1. java read dxf xdata_DXF格式文件数据提取
  2. [KALI系列第四章]进行ARP断网攻击,包含安装方法
  3. 大学四年的学习规划目标
  4. SpringBoot Mybatis Starter 解析
  5. 湖南师范大学2018年大学生程序设计竞赛新生赛 F 小名的回答
  6. 湖北联通短信鉴权响应错误码
  7. Paradoxes of particularity: Caribbean literary imaginaries【翻译】
  8. 世界五大黑客:代码创造他们,他们改变世界!...
  9. python爬虫 爬取百合网的女人们和男人们
  10. CSS外边距重叠和高度坍塌完美解决