欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    6数据结构课程设计报告.pdf

    • 资源ID:65736881       资源大小:474.71KB        全文页数:31页
    • 资源格式: PDF        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    6数据结构课程设计报告.pdf

    1淮 阴 工 学 院数据结构数据结构课程设计报告课程设计报告选题名称选题名称:五子棋人机对战系(院)系(院):计算机工程学院专专业业:计算机科学与技术班班级级:姓姓名名:学学号号:指导教师指导教师:周海岩单劲松学年学期学年学期:2012 2013 学年 第1学期2012年12月20日2设计任务书设计任务书课题课题名称名称设计设计目的目的1掌握关键数据结构,如线性表、树、图建立过程及操作算法;2掌握常用算法的实现方法及作用;3理解利用数据结构及算法解决实际问题的思想;4学会资料收集与整理方法,学会撰写实习报告;5学会对所学知识进行总结,加深对课堂知识的理解与掌握。实验实验环境环境1Windows 2000 以上操作系统;2C+,C#或 Java 编程工具。任务任务要求要求1利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;2在第 15 周末之前完成预设计,请指导教师审查通过后进行下一步工作;3按所设计方案进行软设计;4完成系统设计,写出报告初稿方可申请参加答辩;5结束后,及时提交实习报告(含纸质稿、电子稿)。工作进度计划工作进度计划序号序号起止日期起止日期工工作作内内容容12012.11.122012.11.25查阅资料,提出设计方案。22012.11.262012.12.8根据提出设计方案逐项完成。32012.12.242012.12.30在机房实现软件系统、系统调试。42013.1.32013.1.6根据教师反馈意见,修改、完善、上交实习报告。指导教师:指导教师:2012年年 11月月10日日3摘要:人工智能是一门正在迅速发展的新兴的,综合性很强的边缘科学。它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能作为重点列入本车的高科技发展计划当中,投入巨大的人力和物力。计算机人机对弈也是其中之一。作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的初影,也有助于我们人脑的开发。五子棋是我国发明的,研究它可以让更多的外国人了解,有助于我国优秀文化的推广。关键词:人工智能;计算人机对弈;五子棋;算法4目目录录1.概概 述述.51.1 背景分析 51.2 国内外现状52.需求分析需求分析.52.1 业务需求 52.2 性能需求52.3 系统平台需求63.总体设计总体设计.63.1 系统流程图63.2 系统分析 64.系统实现系统实现.104.1 界面的实现104.2 智能算法实现 115.系统测试分析系统测试分析.265.1 系统测试26总总结结.27致致谢谢.28参考文献参考文献.2951.1.概概 述述当电脑进入我们的生活中,许多与相关学科都欣欣的向上发展。典型的有电子商务、电子邮件等。当然也有人智能了。人们在惊叹机器人高效的工作时,也会想起自己聪明的一面。人工智能也这方面也就深受我们喜爱。1.11.1 背景分析背景分析五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为“Ren-ju”,英文称之为“Gobang”或“FIR”(Five in a Row 的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。1.21.2 国内外现状国内外现状国内外研究五子棋的算法不少。有递归法、二叉树等。当然我所讨论的是一般的算了法。无论何种算法,其大体遵循两条原则:1.使规则更加自然流畅,更容易被人接受。2.使棋的内容更加丰富多彩。而对于五子棋来说,所面临的困境归根结底是来自于其最本质的特点,也是目前一切规则的共同之处:连五终局。2.2.需求分析需求分析2.12.1 业务需求业务需求2.1.12.1.1 使用范围要求使用范围要求该系统适于游戏爱好者。2.1.22.1.2 功能要求功能要求(1)玩家能与电脑下子(2)适于新手来玩2.22.2 性能需求性能需求系统不大,但满足玩家基本要求,电脑有一定智能,能给于新手帮助。62.32.3 系统平台需求系统平台需求2.3.1.2.3.1.系统开发平台系统开发平台操作系统:Windows xp 系列开发工具:Visual C+6.03.3.总体设计总体设计进入系统之后。玩家按 F1 开始游戏,首先是玩家下子,接着电脑下子。一直循环。在电脑或是玩家下了一个子后,电脑计算一下,是否电脑获胜或玩家获胜或是和棋。若有一种情况出现,则暂停游戏显示出相应的结果。若玩家还想玩,继续按 F1,若要退出则按 F12。在游戏开始后,玩家可按 F11 进行智能提示。3.13.1 系统流程图系统流程图程序流程图如图 3-1 所示。首先看到的界面是我们熟悉的棋盘。可看到下面有一行文字。当用户按 F1 时,则游戏开始,这时用户先下子。电脑此时先根据算法计算下,是否和棋,是否电脑获胜,是否玩家获胜,若有一种情况发生,则进入暂停阶段,此时下子则无效,电脑显示相应的结果,否则电脑就根据自己的得分算法,计算出最佳位置。电脑下子了后,则电脑继续判断是否和棋,是否电脑获胜,是否玩家获胜,若有一种情况发生,同样进入到暂停阶段,显示相应的结果。若用户按了 F12,则整个系统退出结束。若在开始后,又按了 F11,则显示提示功能。这对于新手来说是很好的功能。3.23.2 系统分析系统分析在看别人下棋时,我们常说一句“当局者迷,旁观者清”,但这句话对于 AI所控制的计算机来说是不正确的。A:求得所有获胜的组合首先,在一场五子棋的游戏中,计算机必须要知道有哪些获胜的组合,因此必须求得获胜的组合的总数,而求出总数后便可建立一个数组。我要做的是 19X19 的棋盘,获胜总数有点多。下面一一来讨论。(以表格作为棋盘,1 表示为某一方的子,其中以(i,j)表示第 i 行第 j 列的格子,)73.2.13.2.1 计算水平方向的获胜组合数计算水平方向的获胜组合数123 1516171819可以看到对于第一行中(1,1),(1,2),(1,3),(1,4),(1,5)这五个格可以是一个获胜组合,而(1,2),(1,3),(1,4),(1,5),(1,6)这五个格子也可以组成玩家下子进入界退 出 游开始游和棋电脑获胜玩家获胜电脑下子和棋电脑获胜玩家获胜暂停并显示结和棋电 脑 获玩 家 获和棋电 脑 获玩 家 获当 前 界退出YNYNYNYNYNNYYNNY3-18一个获胜组合。这样一直到最后一种为(1,15),(1,16),(1,17),(1,18),(1,19)这五个格子组成一个获胜组合。即第一行有 15 种获胜的组合。总的有19 行。可得,对于行中,我们有 19X15=285 种获胜组合。3.2.23.2.2 计算垂直方向的获胜组合数计算垂直方向的获胜组合数同理对于垂直的获胜组合中第一种为第一列的 1,2,3,4,5 可组成一个获胜组合。总的获胜组合也是 19X15=285 种。3.2.33.2.3 计算正斜方向的获胜组合数计算正斜方向的获胜组合数123451516171819、在第一行中,则可知(1,1),(2,2),(3,3),(4,4),(5,5)为一获胜组合,而(1,3),(2,4),(3,5),(4,6),(5,7)也是一种获胜组合。第一行中的最后一种为(1,15),(2,16),(3,17),(4,18),(5,19)。总的获胜组合有 15种,而最后一行 i 只能到 15。这样我们可以计算得到正斜有 15X15=225 种。3.2.43.2.4 计算反斜方向的获胜组合数计算反斜方向的获胜组合数依据上一种正斜,同理可推知反斜也有 15X15=225 种。由前面的讨论中,我们可计算出 19X19 表格中五子棋的获胜种数。一共有285+285+225+225=1020 种获胜方式。B:建立一些相应的变量对此我建立了一个数组,如下:BOOL cmp19191020;/电脑的每一颗棋子是否在各个获胜组合中BOOL ply19191020;/电脑的每一颗棋子是否在各个获胜组合中int wcount21020;/电脑与玩家在各个组合中的棋子个数(三个变量的简写来源 cmp:computer ply:player wcount:win count)如上述讨论可知,对于电脑,若为正斜中的第一种情况,并假定为 1020 种获胜组合中的第 570 种获胜组合。则其数组元素值设定如下:cmp00570=true;cmp01570=flase;9cmp02570=false;cmp10570=false;cmp11570=true;cmp12570=false;cmp22570=true;cmp33570=true;cmp44570=true;ply数组元素的初始化与 cmp是相同的,但若程序执行时,若玩家的棋占了(0,0)的位置,那么电脑在 cmp00570元素就会置为 false,因为计算机就不可能再下到(0,0)上,第 570 种方法中对电脑来说是不可能的情况了。对于若是电脑占了(0,0)的位置,则玩家中此获胜组合中也置为不可能。wcount21020用来记录玩家或计算机在各自的获胜组合中棋子的个数。其中 wcount0来计算电脑的个数,wcount1用来计算玩家的个数。C:分数的设定组在游戏中,为了让电脑找到最佳的走法,必须计算出电脑下到棋盘中任一格的分数,其中最高分即是电脑下的位置。如下表所示1 12 23 34 45 56 67 78 89 910100 00 00 05 50 00 00 05 50 00 05 50 00 010100 0010100 00 00 00 010100 015150 015150 00 00 00 00 00 01515202020200 00 00 00 00 00 00 00 0C CP P0 00 00 00 00 00 00 01515202020200 00 00 00 00 00 010100 015150 015150 00 00 00 05 50 00 010100 00 010100 00 00 0100 00 00 05 50 00 00 05 50 00 00 00 00 00 00 00 00 00 00 00 0如上表所示,为什么会出现在 C 左边为 0 而下面却为 20 分呢。我们看下上面的表格就可知,C 的左边有三个格,则必须再加上左右边的一个格了,而右边的一个格子被电脑占了,此获胜组合中置为不可能,得分为 0。以上是按每一种获胜组合为 5 分的来计算的。在每一次运行中,电脑都按些种算法,则电脑可以找到最佳的位置。D:攻击与防守经上述讨论可知,电脑一直在找自己一方的最佳位置。若玩家在某个时刻获胜了,电脑也在寻找自己的位置。4.4.系统实现系统实现系统经过分析并加以设计,就可以着手进行实现了,本系统主要分为界面实现和算法实现。4 4.1.1 界面的实现界面的实现本系统首先印入眼帘的是五子棋的界面。本系统的启动界面窗口如图 4-1所示。图 4-1利用 MFC 建立一个 MFC 工程。在 mainFrame 的析构函数中,插入下一句代码:Create(NULL,五子棋11,WS_OVERLAPPEDWINDOW&WS_SIZEBOX&WS_MAXIMIZEBOX,CRect(0,0,700,700),NULL,NULL,0,NULL);则此窗口生成的标题为“五子棋”,当加入了 WS_SIZEBOX 与WS_MAXIMIZEBOX 后,此窗口就不能最大化显示且不能调整边框大小,即一创建的框架为不可改变的大小,另一个为 CRect(0,0,700,700)。此框架的大小为700X700。窗口创建后就是导入图片。为此首先导入图片到工程中,命名为 IDB_BJ。初始值为 0,加载背景之后就置为 1。则可知,背景只显示一次。其代码如下:CBitmap bj;/存放背景图CDC membj;/内存变量背景membj.CreateCompatibleDC(&dc);/创建相容的内存变量bj.LoadBitmap(IDB_BJ);/加载背景图membj.SelectObject(&bj);/选择背景图/初始时只需显示一次背景就可if(0=flagbj)/若是左键单击了之后才可重新绘图,目的是白子只重新绘制一次if(1=flaglb)dc.BitBlt(0,0,700,700,&membj,0,0,SRCCOPY);/置为 1 表示不再显示背景flagbj=1;4.24.2 智能算法实现智能算法实现为了计算得分,在讨论之前要声明几个变量和几个函数。int borad1919;/五子棋盘的状态。0 表示无棋,1 表示为电脑的棋子,2 表示为玩家的棋子(borad)BOOL cmp19191020;/电脑的获胜组合情况(computer)BOOL ply19191020;/玩家的获胜组合情况(player)int wcount21020;/双方的组合情况中子的个数,wcount01020为12电脑,wcount11020为玩家(win count)int pscore1919;/电脑的得分(player score)int cscore1919;/玩家的得分(computer score)BOOL bcmp;/是否轮到电脑下棋(bool computer)BOOL bply;/是否轮到玩家下棋(bool computer)BOOL start;/游戏是否开始(start)BOOL pwin;/电脑是否获胜(player win)BOOL cwin;/玩家是否获胜(computer win)BOOL tie;/是否和棋(tie)BOOL tishi;/是否有智能提示(tishi)void initGame();/初始化棋盘(initalite game)void countScore();/计分函数(count score)void cmpTurn();/电脑下子算法(computer turn)BOOL plyGame();/是否玩家获胜(player game win)BOOL cmpGame();/是否电脑获胜(computer game win)BOOL tieGame();/是否为和棋(tie game)int topScore();/查找最高分;返回最高分数(top score)/寻找电脑的随机位置并保存在 mc,nc 中(search count)void searchCount(int top,int countTep,int*mc,int*nc);int countTop(int top);/返回最高分的个数(count top score)首先要进行初始化。先对棋盘及分数进行初始化。/0 表示无棋子,1 表示为电脑的棋子,2 表示为玩家的棋子for(i=0;i19;i+)for(j=0;j19;j+)pscoreij=0;/玩家各得分为 0cscoreij=0;/电脑各得分为 0boradij=0;/各空格置为无子13/各获胜组合中的棋子数为 0for(k=0;k1020;k+)wcount0k=0;/电脑获胜组合数的个数wcount1k=0;/玩家获胜组合数的个数然后要对获胜组合进行初始化。/初始时各种获胜组合中的值都为 falsefor(i=0;i19;i+)for(j=0;j19;j+)for(k=0;k1020;k+)cmpijk=false;plyijk=false;/行的组合情况,count 的初始值为 0for(i=0;i19;i+)for(j=0;j15;j+)for(k=0;k5;k+)cmpij+kcount=true;plyij+kcount=true;count+;/列的组合情况for(i=0;i15;i+)for(j=0;j19;j+)for(k=0;k5;k+)14cmpi+kjcount=true;plyi+kjcount=true;count+;/正斜的组合情况for(i=0;i15;i+)for(j=0;j15;j+)for(k=0;k5;k+)cmpi+kj+kcount=true;plyi+kj+kcount=true;count+;/反斜的组合情况for(i=0;i=4;j-)for(k=0;k=38&point.y&point.x=602&point.y=602)mp=(int)floor(point.x-36)/30);np=(int)floor(point.y-36)/30);/空格才可下子if(0=boradmpnp)/置为玩家的子boradmpnp=2;for(k=0;k=38&point.y&point.x=602&point.y=602。/玩家下完之后就重新贴子for(i=0;i19;i+)for(j=0;j19;j+)/电脑为红子if(1=boradij)dc.BitBlt(i*30+36,j*30+36,24,24,&memcs,0,0,SRCCOPY);/玩家为绿子if(2=boradij)dc.BitBlt(i*30+36,j*30+36,24,24,&memps,0,0,SRCCOPY);这时电脑就进入了计算阶段。这也是此系统的核心代码。此函数放置在OnTimer()中。如下所示:/是否和棋tie=tieGame();if(tie&start)start=false;/游戏结束bcmp=false;/电脑不可下子bply=false;/玩家不档下子MessageBox(朋友,水平不错,竟能与电脑和棋哦n(按 F1 开始,F12 退出!);flagbj=0;/重新显示背景图片/是否电脑获胜cwin=cmpGame();if(cwin&start)start=false;/游戏结束bcmp=false;/电脑不可下子17bply=false;/玩家不档下子MessageBox(朋友,失败乃成功之母,请再接再励!n(按 F1 开始,F12退出!);flagbj=0;/重新显示背景图片/是否玩家获胜pwin=plyGame();if(pwin&start)start=false;/游戏结束bcmp=false;/电脑不可下子bply=false;/玩家不档下子MessageBox(朋友,真牛!一下就赢了,要不收我作徒弟吧n(按F1 开始,F12 退出!);flagbj=0;/重新显示背景图片先判断是否是和棋,若是则暂停程序。当然在此,判断和棋,我是调用了和棋的函数 tieGame()。其内容如下:BOOL mainFrame:tieGame()/若有空格则不为和棋for(i=0;i19;i+)for(j=0;j19;j+)if(0=boradij)return false;/若有一方胜也不为和棋for(k=0;k1020;k+)if(5=wcount0k|5=wcount1k)return false;18/否则为和棋return true;要讨论 19X19 格了中的每一个格子。即 borad!=0,并且在获胜组合中没有一方获胜,则此时电脑即为和棋,返回 true,否则都为 false。若不为和棋,则判断是否是电脑获胜,其也调用判断电脑获胜的函数 cmpGame()/是否玩家获胜BOOL mainFrame:plyGame()for(k=0;k1020;k+)if(5=wcount1k)/有五子棋相连则获胜return true;return false;只要看下 wcount1中是否有一种情况中的个数为 5,若有此时就返回 true,否则返回 flase。若电脑不获胜,则继续判断是否玩家获胜,此时同样调用函数 cmpGame()来处理。如下所示:BOOL mainFrame:cmpGame()for(k=0;k1020;k+)if(5=wcount0k)/有五子棋相连则获胜return true;return false;19若在电脑的获胜组合中有一个组合的个数为 5,则电脑获胜,这时就弹出对话框,显示电脑获胜,游戏时放暂停状态。否则继续执行。首先统计下当前分数,看下当前的得分情况。如下:void mainFrame:countScore()for(i=0;i19;i+)for(j=0;j19;j+)/初始值为 0pscoreij=0;cscoreij=0;/若为空则计算分数if(0=boradij)/各种情况一一讨论for(k=0;k1020;k+)/若是玩家if(plyijk)switch(wcount1k)case 0:/零个子情况pscoreij+=1;break;case 1:/一个子情况pscoreij+=5;break;case 2:/二个子情况pscoreij+=10;break;case 3:/三个子情况pscoreij+=30;break;case 4:/四个子情况pscoreij+=120;20break;/若是电脑if(cmpijk)switch(wcount0k)case 0:cscoreij+=1;break;case 1:cscoreij+=2;break;case 2:cscoreij+=8;break;case 3:cscoreij+=32;break;case 4:cscoreij+=128;break;对于 19X19 的格子,一一讨论。若格子为空,则进行统计,因为只有空格21才可下子。统计完分之后,若是轮到电脑下子,游戏未结束,则电脑下子。/是否轮到电脑下子if(bcmp&start)cmpTurn();在此也调用了函数来处理电脑下子的算法。对于 cmpTurn()的代码如下:void mainFrame:cmpTurn()/以下用于找到最高分/最高分为 0,tc 为电脑的最高分,tp 为玩家的最高分tc=tp=0;/标记位,0 为没找到位置,1 为有电脑下子的位置int flag=0;for(i=0;i19;i+)for(j=0;j=tp)mp=i;np=j;tp=pscoreij;flag=1;if(cscoreij=tc)mc=i;nc=j;tc=cscoreij;flag=1;22/以下是电脑下了的位置if(1=flag)/若有电脑下子的位置才可下子/玩家分数高,则下在玩家的最高分位置,否则下在电脑的最高分位置if(tctp)mc=mp;nc=np;/置为电脑的子boradmcnc=1;/将 1020 种情况一一讨论for(k=0;k1020;k+)/电脑可以获胜且在此位置有获胜组合,则此组合个数加 1if(-1!=wcount0k&cmpmcnck)wcount0k+;/电脑可获胜,则置玩家不可能获胜if(plymcnck)plymcnck=false;wcount1k=-1;/电脑下完后是玩家下子bcmp=false;bply=true;此函数先对于玩家与电脑的分数 pscore,cscroe进行统计,分别找出电脑和玩家的最高分,若找到了,则置 flag 为 1,表示电脑有可下的子。/显示黑子,意为电脑下的最后一个子,起提示作用if(bply&start)23dc.BitBlt(mc*30+45,nc*30+45,6,6,&membs,0,0,SRCCOPY);电脑下子之后,也要进行判断,看下双方是和棋、电脑获胜还是玩家获胜。到此才算 OnTimer()的结束。这是个隐藏的功能。要实现这样的功能也不难if(tishi&bply)/先统计分数countScore();/以下用于找到当前的最佳位置int top;/临时存放最高分,分最高的为最佳位置top=topScore();for(i=0;i19;i+)for(j=0;j19;j+)if(top=pscoreij)/若为玩家最高分则贴子mp=i;np=j;/贴提示子dc.BitBlt(mp*30+44,np*30+41,9,9,&memrs,0,0,SRCCOPY);if(top=cscoreij)/若为电脑最高分则贴子mp=i;np=j;/贴提示子dc.BitBlt(mp*30+44,np*30+41,9,9,&memrs,0,0,SRCCOPY);24flagbj=0;/重新绘制背景对于此函数,首先还是统计当前的分数,根据当前分数来寻找当前的最佳位置。在此我又调用了一个 topScroe(),用于统计分数中的最高分。如下所示:int mainFrame:topScore()int top=0;/临时最高分for(i=0;i19;i+)for(j=0;j=top)top=pscoreij;if(cscoreij=top)top=cscoreij;/返回最高分数return top;统计之后,再逐一进行讨论,若是最高分,则此即为当前的最佳位置。当然若是这样的算法,也就是一般人的算法,电脑的随机算法如下:void mainFrame:cmpTurn()int topc=topScore();/得出最高分,临时存入到 topc 中/找到最高分的个数,临时存入到 countc 中int countc=countTopScore(topc);25int ranc=randomCount(countc);/返回 0-countc-1 中的一个随机数,用于增加难度/找到最高分的随机位置,并保存到 mc,nc 中searchCount(topc,ranc,&mc,&nc);在此,我所用的想法是,首先寻到最高分,调用 topScore()函数,找到最高分的个数,调用 countTopScore(int topCount)函数,并存入到 countc 中,然后调用 randomCount(countc)返回一个 0 到 countc-1 之间的随机数。int mainFrame:randomCount(int ran)int tempc=0;tempc=(int)(1+ran*rand()/(RAND_MAX+1);return tempc;接着调用searchCount(),找到最高分top中的随机位置countTep中的坐标并存入到 mc,nc 中。void mainFrame:searchCount(int top,int countTep,int*mc,int*nc)int tempc=0;/临时的个数for(i=0;i19;i+)for(j=0;j19;j+)if(pscoreij=top)tempc+;/个数加 1if(tempc=countTep)*mc=i;/电脑的 X 坐标*nc=j;/电脑的 Y 坐标return;if(cscoreij=top)tempc+;26if(tempc=countTep)*mc=i;/电脑的 X 坐标*nc=j;/电脑的 Y 坐标return;到此整个系统也就完成了。5.5.系统测试分析系统测试分析5.15.1 系统测试系统测试5.1.15.1.1 系统测试概述系统测试概述通常在编写出每个模块之后就对它做必要测试。一般说来,测试不是由编写程序本人进行,软件一般有两种方法:黑盒测试和白盒测试。黑盒测试把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。5.1.25.1.2 系统测试系统测试刚进入系统时,单击左键,此时系统无反应,表示游戏还未开始。若按下F1 则弹出的对话框,玩家可以单击,但要是单击在五子棋的表格外,则不起作用。若在区域内,可以下子。若单击时下有子,则不予响应。若某一方有五子连棋时,此时会出现相应的对话框。若按下 F11 时,此时会弹出智能提示对话框,并在当前最佳位置贴上白子。若按下 F12 时,此时系统弹出一个退出对话框,单击之后系统便退出。根据测试结果分析,测试数据与理论数据一致,能达到预期效果,该系统运行正常。27总结通过独立完成五子棋对弈系统的后,发现自己在进行软件开发方面提高不少,同时积极利用所学到的新技术用于自己的设计开发过程。另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。如:没有讨论五子棋禁手的问题。另一个就是电脑按即定的算法去与玩家下子。这种算法有点“固定”。不太会变,玩家若是仔细观察,可以掌握其规律。还有就是界面不是很华丽。有待改进。在 Windows 操作系统下,用 VC实现了这个人机对战的五子棋程序。和国内许多只是采用规则或者只是采用简单递归而没有剪枝的那些程序相比,在智力上和时间有效性上都要好于这些程序。同时所讨论的方法和设计过程为用户设计其他的游戏(如象棋和围棋等)提供了一个参考。人机博弈是一门复杂而又有意思的类别,而五子棋是一个相对来说规则和变化简单的棋种,通过设计一个简单的五子棋 AI,学生将进一步加深理解数据结构和计算方法的关系,了解 AI 中基本的利用树图寻求最佳权值的计算方法。同时自己和自己的计算机程序对弈对学生来说也是一个很有意思的课题。在这么多有趣的原因的吸引下,怀着一颗强烈的好奇心,在选择毕业设计课题的时候我选择了游戏设计(五子棋游戏设计)。拿到题目以后脑海中首先浮现出的是那一张方方正正上面满是小格的棋盘。经过一番构思,我开始动手收集相关的资料,经过一周的“搜刮”我积累了各种相关的资料,有关于博弈算法的,数据结构的等等。从一个问题入手我找到的各位专家的简介说法各不相同,经过整理总结再加上我的一点点小的想法,我开始正式动手设计程序。我找来对五子棋颇有研究的同学和他对下,在游戏中向他取经,在了解这些专业走法,阵势的同时自己的棋艺也得到了很大的提高,真是受益非浅。了解了一些专业的走法以后我的电脑等级水平提升的空间陡然加大。尽管本系统存在着很多不足,但其实现了最重要的功能就是有人工智能。这也让我对计算机中的人工智能领域有一定的了解。另一个就是在做系统的过程中,我学到了 Visual C+的一些基本结构,尤其对于 MFC 有一定的了解。还有就是对于 C+有更深一步的认识。28致谢在课程设计即将完成之际,本人在此对淮阴工学院、计算机工程系提供的实践机会,实验室人员提供的实验环境,指导教师的辛勤指导,同组同学的帮助,参考文献的原作者,所有关心我的及帮助我的老师和同学们致以最真诚的感谢。在本次课程设计中,我从指导老师-周老师、单老师,身上学到了很多东西。他认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到很大的提高,这对于我以后的工作和学习都有一种巨大的帮助,在此感谢他耐心的辅导。在撰写课程设计阶段,周老师几次审阅我们的论文,提出了许多宝贵意见,没有他的指导,我们就不能较好的完成课题设计的任务。另外,我还要感谢在这几年来对我有所教导的老师,他们孜孜不倦的教诲不但让我学到了很多知识,而且让我掌握了学习的方法,更教会了我做人处事的道理,在此表示感谢。同时,在系统开发过程中还有同组的同学也给了我不少帮助,这里一并重新郑重表示感谢。29参考文献1 康晓明,汪涛.标准 C+实用教程.电子工业出版社,20092 李强,贾云霞.Visual C+项目开发实践.中国铁道出版社,20033 钱新贤,杨猛,程兆炜,张少东.Visual C+编程疑难详解.北京:人民邮电出版社,20004 彭建国,那威.初级职业连珠五子棋:廿四种开局.北京:中国妇女出版社,19955 普悠玛数科技.Visual C+游戏设计入门.机械工业出版社,20026 张海藩,牟永敏.面向对象程序设计实用教程.北京:清华大学出版社,20027 章照原.五子棋制胜妙谱.上海文化出版社,19908 席庆,张春林.Visual C+6.0 实用编程技术.中国水利水电出版社,19999 彭建国.五子棋必读.红旗出版社,199710 陈维兴,林小茶.C+面向对象程序设计.中国铁道出版社,200430课程设计成绩表课程设计成绩表班级:学号:姓名:课题名称:五子棋人机对战此系统是为了实现人与机器就五子棋进行对战,五子棋要实现五个同色的棋子能够在横竖斜的方向上五个连成一条线,先成者为胜。系统包括:电脑的获胜组合情况,玩家的获胜组合情况,双方的组合情况中子的个数,电脑的得分,玩家的得分,是否轮到电脑下棋,是否轮到玩家下棋,游戏是否开始,电脑是否获胜,玩家是否获胜,是否和棋,是否有智能提示,初始化棋盘,计分函数,电脑下子算法,是否玩家获胜,是否电脑获胜,是否为和棋。系统采用积分式的方法,最后能够实现五子棋的人机对战,甚至电脑可以给予人一定的提示,以使人赢的可能性更大。成成绩绩教师签字教师签字日期:日期:2013-1-831报告装订顺序报告装订顺序1封面2任务书3摘要4目录5正文6总结7致谢8参考文献9指导教师评语

    注意事项

    本文(6数据结构课程设计报告.pdf)为本站会员(热心****k)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开