计算机科学与技术学院课程设计成绩单课程名称:指导教师:姓名性别男学号班级综合成绩成绩等级程序运行情况(占总成绩20%)□能正确运行□基本能正确运行□能运行但结果不完善(20分)(15分)(10分)程序功能的完善程度(占总成绩10%)□完善□基本完善□不完善(10分)(8分)(5分)程序结构的合理性(占总成绩10%)□合理□基本合理□不太合理(10分)(8分)(5分)对问题的答辩情况(占总成绩40%)□概念正确有创新□能正确回答所有问题□基本能正确回答(40分)(35分)(30分)□部分问题回答概念不清晰(20分)学生的工作态度与独立工作能力(占总成绩10%)□工作态度认真能独立完成任务□工作态度认真但独立性较差(10分)(8分)□工作态度基本认真但缺乏独立性(5分)设计报告的规范性(占总成绩10%)□符合规范□基本符合规范□规范性较差(10分)(8分)(5分)优秀:90分~100分良好:80分~89分中等:70~79分及格:60~69分不及格0分~59分武汉科技大学计算机科学与技术学院制表嵌入式五子棋系统(人机系统)一:设计内容与要求编写五子棋游戏,实现人机博弈二:设计要点主要包括棋局的绘制、保存、和AI三大块三:设计方案的选择以下言论均指在32位windows平台(日期为2011.12.14)。【1】内存】若采用静态存储,则需要15*15*sizeof(UINT)=900B这里采用下标做为位置的坐标,节省了2*900B】若采用动态存储,大部分情况只需要3*sizeof(UINT)*25----3*sizeof(UINT)*100(一般下25---100个棋子便可分出胜负)即300B----1200B,棋局前期能节省部分内存。但当判断胜负及执行AI时,由于动态存储不具有有序性,所以需采取全部遍历或先排序再判断,由于每次下棋都需要遍历或排序,那么将导致CPU增大很多。【选择结果】由上可知,动态存储CPU利用率大,前期才节约了600B内存,后期还多耗内存。所以这里采用静态存储的方法。【2】界面】若采用BMP图,则棋盘背景一般为200KB,棋子一般为1KB,若全屏,则需要4KB,三个棋子就12KB这样程序的大小会多200多KB而且当在超大屏上需要更大的BMP图,否则会失真】若采用手绘则程序大小会少200多KB,并且棋盘调到多大都不会失真。缺点是有锯齿(采用GDI+即可基本消除,这里为简单起见只采用GDI)【选择结果】由上可知,因手机本来就内存小,加上手机的分辨率低,感觉不出锯齿,而PC的锯齿也不明显,所以采用手绘。【3】AI】现成算法:博弈树及alpha-beta剪枝算法是各种游戏最流行的AI算法,其算法简明,智力较高。但CPU占用率随搜索深度的增加而指数性增加,且速度也慢】自编算法:为了锻炼思维,自己也应该想一想。花几小时或者几天就OK,再多花就是浪费时间了,算法还是让专业的科学家去研究吧~自己想了两个算法,第一个是占CPU和内存最低的,只需要40次循环就能得出结论,不需要遍历棋盘。第二个是智力较高的,采用评分机制,需要遍历2次棋盘,CPU占用也很低【选择结果】根据实验结果,给出了四个等级的AI。自己想的那两个做为弱智AI和中级AIalpha-beta剪枝深度为1和2的分别做为初级AI和高级AI四:设计方案的架构参考了网上众多的代码,但问题多多,主要表现在:1】多数为互相抄袭,无新意,且不验证其正确性2】仅仅实现了主要功能,很多细节和Bug都没改正3】基本无移植性可言4】代码可读性差、不强壮性,排版混乱,有数组越界溢出等等5】大部分逻辑不严谨,个别的不简洁,几百行能解决的却写了2万行6】画面闪烁问题故只能以商业的QQ游戏为参照物,因没有源码,只能从功能上学习。参照的功能有:1、标记当前所下的棋子2、只允许悔一步棋改进的功能有:1、可以拖动窗口边界改变窗口大小,棋盘和棋子等等会自动改变,不管显示器有多大,都不会失真(QQ游戏只允许有两个大小,且不能全屏)】本项目主要有棋局绘制、棋局功能、机器AI三个类,主要源码文件如下图解决了以上所列问题,及提高了以下特性1、移植性:尽力保证逻辑与界面分离,提高移植性,目前已可完全移植。2、逻辑清晰,代码排版整齐明了3、强壮性和功能完整性都得到了一定验证,无内存泄露五:运行效果此界面为中级AI,白色为机器方六:设计的收获与体会此类简单游戏的设计最花时间的就是要保证功能完整,让玩家玩得尽可能舒服。主体架构方面都没有大问题,而在加入人机对战、机器对战及悔棋功能时,一些细微问题需要好好研究,不停测试。AI等智力问题也要适中。太弱智了玩得没激情,太聪明了玩得没信心。经过测试,发现再高级的AI也有输的时候,测试的博弈树的深度为2,再深反应会很慢,也就是说能预测两步的AI也会输。刚开始找到博弈树算法时,以为不管深度为多少都很聪明,后来发现只要找到窍门,那么深度为2的也很容易被打败。而深度为3的反应需要10秒,后面的深度呈指数型增长,不符合实际需求。游戏经过多次测试,反应良好。PS】因马上就要交课程设计报告,公司也很忙,以下功能等后续版本实现:1、据资料显示,博弈树算法还有很大的优化空间2、机器对战,需要用到多线程3、联网对战,因为传输的数据量小,且要求实时、有序、可靠,因此采用TCP协议4、嵌入式,所在公司用的是Wince系统,改天有时间移植上去5、多语言界面,如果老外也喜欢五子棋的话七:参考文献【见同文件夹目录】1、五子棋开局指南2、维基百科:Alpha-Beta剪枝算法