- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
人机对战五子棋游戏—项目文档
思维分析:
分为显示部分和棋子的选址之处
选子分为:机器选址和人工先址,如果是机器选址话,这是大算法(算法越先进,越智能)。
显示:初始,下棋时
整个程序:初始+循环下棋(算法+显示)
功能分析:
显示画面功能
有输入时的反应
没输入时怎么操作
结束功能
任务分析:在一个20×20的棋盘里,进行循环轮流交替下棋,如果五子连珠,则该方胜,退出游戏。
初步设计(系统分析):
显示:初始化+画面
进行循环游戏
人输入时:
移动的方向
显示移动后的结果
移动后是否五子连珠,如果是,则人胜出,游戏结束
机器输入时:
选择移动的目标位置
显示移动的路径
移动后是否五子连珠,如果是,则机器胜出,游戏结束
返回到循环开始位置
结束游戏
具体设计(系统设计):
显示:初始化+画面
初始化图形驱动
绘制棋盘
底部颜色
棋盘20×20个方格
进行游戏
设置初始的棋手,棋子的位置
设置当前棋手
棋子的初始位置
初始棋手的显示(提示)
进行循环游戏:每替换选手一次,就做一次循环
人输入时:
等待人的输入(键盘的输入), 提示人应按输入
如有输入,则处理输入方向
如果是出格或已有棋子,则报警,不输入
如果条件允许,则刷新显示,记录该棋子
判断是否五子连珠,如果是,则人胜利, 结束游戏
2.2.2 机器输入输入时:
2.2.2.1 提示机器输入
2.2.2.2选择输入的地方(智能算法,需要当前棋子情况)
2.2.2.3 移动显示效果(垂直或水平移动)
2.2.2.4 判定是否五子连珠,如果是,则机器胜利,结束游戏
2.3.2 是ESC的话,则退出
2.3.3 是其他的话,则不反映
结束游戏
显示game over
YOU WIN!
SORRY!
结束显示,返回
详细设计:
显示:初始化+画面
初始化图形驱动: initgraph(); //初始化图形系统 int iDriver,iMode;
detectgraph(iDriver,iMode);
initgraph(iDriver,iMode,);
绘制游戏界面
1.2.1 20X20的方格
for(i=0;iMAXLIE;i++) //画白格子
for(ii=0;iiMAXHANG;ii++)
{
xtemp=xlong*(i+1);ytemp=ylong*(ii+1);
setcolor(normalcolor);
rectangle (xtemp,ytemp,xtemp+xstart,ytemp+ystart);
}
1.2.2 下面的文字显示
outtextxy(xLong,yLong*(MAXHANG+2)+3,Its player1s turns);
outtextxy(xLong,yLong*(MAXHANG+3),Player1 win, press any key to quit);
1.2.3 画棋子及边框
fillellipse(xtemp+xr+1,ytemp+yr+1,xr,yr);
rectangle ()
进行游戏
设置初始的棋手, 棋子的位置
设置当前棋手
playernow=player1;
棋子的初始位置
不设置初始棋子位置,可设置提示框在chess[0][0];
rectangle ()
初始棋手的显示(提示)
进行死循环游戏:棋子移动一次,就做一次循环
//或者:每替换选手一次,就做一次循环
while(1)
由人输入时:
2.2.1.1 接收方向键
if(playernow==player1) c=getch();
2.2.1.2 暂存棋子的位置
case RIGHT: if(xMAXLIE-1) x++;
else x=0;
case LEFT: if(x0) x--;
else x=MAXLIE-1;
case UP: if(y0) y--;
else y=MAXHANG-1;
case DOWN:
文档评论(0)