一担挑游戏模拟人机对弈C语言.docx
- 文档编号:5399211
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:11
- 大小:210KB
一担挑游戏模拟人机对弈C语言.docx
《一担挑游戏模拟人机对弈C语言.docx》由会员分享,可在线阅读,更多相关《一担挑游戏模拟人机对弈C语言.docx(11页珍藏版)》请在冰豆网上搜索。
一担挑游戏模拟人机对弈C语言
模拟人机对弈--------“一担挑游戏”
简单设计计算机模拟棋盘对弈。
其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。
游戏规则如下:
(1)计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:
发现空单元后,置为“O”,未发现时,报告平局后退出。
(2)轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。
(3)谁先三点一线了,则报告谁胜出。
(4)计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。
一、需求分析
该程序模拟人机对弈,具有极大的趣味性。
全程序主要模块包括“设计棋盘格式模块”“玩家移动棋子模块”,“计算机移动棋子模块”以及“判断胜负模块”。
“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。
三、总体设计
四、详细设计
1,主函数流程图
2,各功能模块设计
(1)棋盘设计模块流程图
该模块首先设置一个3X3的循环,将棋盘的每一个单元定义为空。
在程序运行的第一步,主程序调用该模块功能,对棋盘进行初始化。
(2)玩家移动棋子模块
该模块首先选择放置棋子的位置(i,j),之后行变量i减一,列变量j减一。
如果该位置为空,则将该单元内容定义为“X”;如果该位置不为空,则返回错误信息并重新运行该模块函数,让人重新选择放置棋子的位置。
(3)计算机移动棋子模块
该模块首先设置3X3的循环,从(1,1)开始,依次判断每一个单元是否为空。
为空时,则将该位置定义为“O”;若不为空,则继续运行。
当移动至(3,3),即行变量i与列变量j乘积为9时,若该单元依然不为空,则判定该局比赛结果为平局
(4)判断胜负模块
”
该模块首先设置3X3的循环,依次判断每行,每列以及左斜列,右斜列的内容是否相同。
不相同时,返回至主函数;若相同,则将变量result定义为相同的内容。
最后,根据结果显示谁赢。
五、
(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("Youwon!
\n");
else
printf("Youlost!
\n");
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.\n");
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\n");
exit(0);
}
else
qipan[i][j]='0';
}
voiddisp(void)
{
intt;
for(t=0;t<3;t++)
{
printf("%c|%c|%c",qipan[t][0],qipan[t][1],qipan[t][2]);
if(t!
=2)
printf("\n-|-|-\n");
}
printf("\n");
}
charcheck(void)
{
inti;
for(i=0;i<3;i++)
if(qipan[i][0]==qipan[i][1]&&qipan[i][0]==qipan[i][2])
returnqipan[i][0];
for(i=0;i<3;i++)
if(qipan[0][i]==qipan[1][i]&&qipan[0][i]==qipan[2][i])
returnqipan[0][i];
for(i=0;i<3;i++)
if(qipan[0][0]==qipan[1][1]&&qipan[0][0]==qipan[2][2])
returnqipan[0][0];
for(i=0;i<3;i++)
if(qipan[0][2]==qipan[1][1]&&qipan[1][1]==qipan[2][0])
returnqipan[0][2];
return'';
}
(2)程序运行截图
初始化棋盘,显示棋盘格式
人选择棋子位置,但是必须在3X3的范围内。
否则,显示错误并且重新选择。
人机继续对奕,直到判断三点一线,输出比赛结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一担挑 游戏 模拟 人机 对弈 语言