欢迎来到天天文库
浏览记录
ID:38732532
大小:3.37 MB
页数:13页
时间:2019-06-18
《一担挑游戏---模拟人机对弈——C语言》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、模拟人机对弈--------“一担挑游戏”简单设计计算机模拟棋盘对弈。其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。游戏规则如下:(1)计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:发现空单元后,置为“O”,未发现时,报告平局后退出。(2)轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。(3)谁先三点一线了,则报告谁胜出。(4)计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。一、需求分析该程序模拟人机对弈,具有极大的趣味性。全程序主要模块包括“设计棋盘格式模块”“玩家移动棋子模块”,“计算机移动棋子模
2、块”以及“判断胜负模块”。“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。三、总体设计一担挑游戏设计棋盘格式模块玩家移动棋子模块计算机移动棋子模块判断胜负模块输出比赛结果四、详细设计1,主函数流程图三点一线?计算机下棋玩家下棋制作棋盘输出比赛结果2,各功能模块设计(1)棋盘设计模块流程图将棋盘的每一格定义为空开始由位置(1,1)起,至位置(3,3)棋盘每格之间显示“
3、”开始已显示至第三行吗?换行,显示“-
4、-
5、-”换
6、行该模块首先设置一个3X3的循环,将棋盘的每一个单元定义为空。在程序运行的第一步,主程序调用该模块功能,对棋盘进行初始化。(1)玩家移动棋子模块开始选择放置棋子的位置(i,j)行变量i减一,列变量j减一该位置为空吗?错误,重新选择该位置定义为X该模块首先选择放置棋子的位置(i,j),之后行变量i减一,列变量j减一。如果该位置为空,则将该单元内容定义为“X”;如果该位置不为空,则返回错误信息并重新运行该模块函数,让人重新选择放置棋子的位置。(1)计算机移动棋子模块由位置(1,1)起判断开始该位置为空吗?该局比赛结果为平局行变量i与列变量j分别加一该位置定义为O退出
7、i与j乘积为9吗?该模块首先设置3X3的循环,从(1,1)开始,依次判断每一个单元是否为空。为空时,则将该位置定义为“O”;若不为空,则继续运行。当移动至(3,3),即行变量i与列变量j乘积为9时,若该单元依然不为空,则判定该局比赛结果为平局(4)判断胜负模块”开始某列棋子相同吗?某行棋子相同吗?返回左斜列棋子返回右斜列棋子返回该列棋子返回该行棋子右斜列棋子相同吗?左斜列棋子相同吗?返回该模块首先设置3X3的循环,依次判断每行,每列以及左斜列,右斜列的内容是否相同。不相同时,返回至主函数;若相同,则将变量result定义为相同的内容。最后,根据结果显示谁赢。五、
8、(1)程序代码#include"stdio.h"#include"stdlib.h"voidinit_qipan();voidplayer_move();voidcomputer_move();voiddisp();charcheck();intmain(void){chardone;done='';init_qipan();do{disp();player_move();done=check();if(done!='')break;computer_move();done=check();}while(done=='');if(done=='X')printf
9、("Youwon!");elseprintf("Youlost!");disp();getchar();return0;}charqipan[3][3];voidinit_qipan(void){inti,j;for(i=0;i<3;i++)for(j=0;j<3;j++)qipan[i][j]='';}voidplayer_move(void){intx,y;printf("It'syourturn:");scanf("%d%*c%d",&x,&y);x--;y--;if(qipan[x][y]!=''){printf("Error,tryagain.
10、");player_move();}elseqipan[x][y]='X';}voidcomputer_move(void){inti,j;for(i=0;i<3;i++){for(j=0;j<3;j++)if(qipan[i][j]=='')break;if(qipan[i][j]=='')break;}if(i*j==9){printf("pingju");exit(0);}elseqipan[i][j]='0';}voiddisp(void){intt;for(t=0;t<3;t++){printf("%c
11、%c
12、%c",qipan[t][0],q
13、ipan[t][1],q
此文档下载收益归作者所有