数据结构课程设计报告(同名8564).doc

数据结构课程设计报告(同名8564).doc

ID:56249050

大小:282.00 KB

页数:11页

时间:2020-03-24

数据结构课程设计报告(同名8564).doc_第1页
数据结构课程设计报告(同名8564).doc_第2页
数据结构课程设计报告(同名8564).doc_第3页
数据结构课程设计报告(同名8564).doc_第4页
数据结构课程设计报告(同名8564).doc_第5页
资源描述:

《数据结构课程设计报告(同名8564).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、扬州大学信息工程学院《数据结构》---课程设计报告题目:“井字棋”小游戏班级:学号:姓名:指导教师:一、课程题目“井字棋”小游戏二、需求分析计算机和人对弈问题。计算机之所以能和人对弈是因为有人将对弈的策略事先已存入计算机。由于对弈的过程是在一定规则下随机进行的,所以,为使计算机能灵活对弈就必须对对弈过程中所有可能发生的情况以及相应的对策都考虑周全,并且,一个“好”的棋手在对弈时不仅要看棋盘当时的状态,还能预测棋局发展趋势,甚至最后结局。因此,在对弈问题中,计算机操作的对象是对弈过程中可能出现的棋盘状态——称为格局。例如图1所示为井子棋的一个格局,而格局之间

2、的关系是由比赛规则决定的。通常,这个关系不是线性的,因为从一个棋盘格局可以派生出几个格局,例如从图1所示的格局可以派生出5个格局,如图2所示,而从每一个新格局又可派生出4个可能出现的格局。因此,若将从对弈开始到结束的过程中所有可能出现的格局都画在一张图上,则可得到一颗倒长的“树”。树根是对弈开始之前的棋盘格局,而所有的“叶子”就是可能出现的结局,对弈的过程就是从树根沿树杈到某个叶子的过程。“树”可以是某些非数值计算问题的数学模型,是一种数据结构。图1棋盘格局示例图2对弈树的局部三、概要设计该课题的数据类型比较简单,只需要一个Nodes类型记录棋子所在位置和

3、当前状态即可。其中包括基本操作的函数有:初始化棋盘函数、判断当前位置是否为空函数、放置棋子函数、判断棋盘是否为满函数、判断输赢函数、棋局状态函数、选择最佳落子位置函数和打印棋盘函数。intIsWin(intside),其功能是依次从行、列、对角线判断是否有三个棋子连成一线。intPostionValue(),可以返回四种状态,分别为电脑赢、玩家赢、平局和游戏正在进行。NodesBestMovement(intside)是该问题的关键模块,其功能为得到当前格局下最佳落子位置,具体实现将在详细设计中阐述。intmain(),主函数,游戏系统界面设计,其功能是引

4、导玩家进入游戏,选择游戏模式(玩家先手或电脑先手),并显示游戏界面。四、详细设计(1)数据类型Nodes定义如下:typedefstruct{introw;//行intcolumn;//列intcond;//游戏状态}Nodes;(2)NodesBestMovement(intside)作为实现该课题的关键模块,其算法设计借鉴了“四皇后”问题的解决思路(即回溯法)。很多问题用回溯和试探求解时,描述求解的状态不是一颗满的多叉树。当试探过程中出现的状态和问题所求解产生矛盾时,不再继续试探下去,这时出现的叶子结点不是问题的解的终结状态。这类问题的求解过程可看成是

5、在约束条件下进行先序(根)遍历,并在遍历过程中剪去那些不满足条件的分支。如图3所示,这是一个四叉树,树上每个结点表示一个局部布局或一个完整布局。根结点表示棋盘的初始状态:棋盘上无任何棋子。图3四皇后问题的棋盘状态树依据以上分析,可以很容易得出一个结论。求得当前格局下最佳落子位置的过程,即为在约束条件下遍历一颗状态树的过程。遍历中访问结点的操作为,判断棋局是否仍在继续,若是,则转而求对手的最佳落子位置;否则就返回当前输赢状态。若返回结果为输,将棋子移至下一个位置;为平局,先将该位置暂存;为赢,将该位置作为最佳位置返回。该模块的伪码算法如下:NodesBest

6、Movement(intside){//从棋盘第一格开始依次尝试最佳位置。if(游戏已经结束)返回游戏结果;elsefor(i=0;i#inclu

7、de#defineMAX_SIZE3#defineFALSE0#defineTRUE1#defineEMPTY0#defineHUMAN1#defineCOMPUTER2#defineHUMAN_WIN0#defineDRAW1#defineCOMPUTER_WIN2#definePLAYING3typedefstruct{introw;intcolumn;intcond;}Nodes;intBoard[MAX_SIZE][MAX_SIZE];voidInitBoard(){introw,column;for(row=0;row

8、_SIZE;row++)for(column=0;column

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。