一担挑游戏C语言.docx
《一担挑游戏C语言.docx》由会员分享,可在线阅读,更多相关《一担挑游戏C语言.docx(15页珍藏版)》请在冰豆网上搜索。
![一担挑游戏C语言.docx](https://file1.bdocx.com/fileroot1/2023-3/31/609a6bf6-4df9-4ce5-981a-04bfc559d289/609a6bf6-4df9-4ce5-981a-04bfc559d2891.gif)
一担挑游戏C语言
模拟人机对弈---“一担挑游戏”
【要求】
简单设计计算机模拟棋盘对弈。
其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。
游戏规则如下:
(1)计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:
发现空单元后,置为“O”,未发现时,报告平局后退出。
(2)轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。
(3)谁先三点一线了,则报告谁胜出。
(4)计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。
【提示】
棋盘位置用二维数组表示,初始状态每一位置均应为“”(空)。
其分隔线(即棋盘线)可用——或||来分隔。
【分析】
该程序模拟人机对弈,具有极大的趣味性。
全程序主要模块包括“人移动棋子模块”,“计算机移动棋子模块”以及“判断胜负模块”。
“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。
1.总体流程图
2.initialization(void)初始化棋盘模块
初始化棋盘模块流程图
该模块首先设置一个3X3的循环,将棋盘的每一个单元定义为空。
在程序运行的第一步,主程序调用该模块功能,对棋盘进行初始化。
3.display(void)显示棋盘模块
显示棋盘模块流程图
该模块与“初始化棋盘模块”类似,首先设置一个3X3的循环。
不同之处在于显示同一行的一个单元后,棋盘每格之间显示“|”;换行之后显示“-|-|-”。
在程序运行“判断胜负模块”功能之后,调用该模块功能。
4.play_move()人移动棋子模块
人移动棋子模块流程图
该模块首先选择放置棋子的位置(i,j),之后行变量i减一,列变量j减一。
如果该位置为空,则将该单元内容定义为“X”;如果该位置不为空,则返回错误信息并重新运行该模块函数,让人重新选择放置棋子的位置。
putermove()计算机移动棋子功能流程图
计算机移动棋子模块流程图
该模块首先设置3X3的循环,从(1,1)开始,依次判断每一个单元是否为空。
为空时,则将该位置定义为“O”;若不为空,则继续运行。
当移动至(3,3),即行变量i与列变量j乘积为9时,若该单元依然不为空,则判定该局比赛结果为平局。
6.charjudge(void)判断胜负模块
判断胜负模块流程图
该模块首先设置3X3的循环,依次判断每行,每列以及左斜列,右斜列的内容是否相同。
不相同时,返回至主函数;若相同,则将变量result定义为相同的内容。
最后,根据result显示“playerwin!
”或者“computerwin!
”
【一担挑程序】
#include"stdio.h"
#include"stdlib.h"
voidinitialization();/*初始化棋盘*/
voidplayer_move();/*人移动棋子*/
voidcomputer_move();/*计算机移动棋子*/
voiddisplay();/*显示棋盘*/
charjudge();/*判断胜负*/
intmain(void)
{
charresult;/*变量result定义为判断胜负的结果*/
result='';/*变量result初值为空*/
initialization();/*初始化棋盘*/
printf("Youwillplayagainstcomputer.\n");
printf("GoodluckandGodblessesyou.\n");
do
{
display();/*显示棋盘*/
player_move();/*人移动棋子*/
result=judge();/*调用判断胜负函数,并将结果赋予变量result*/
if(result!
='')/*当变量result不为空时*/
break;/*跳出*/
computer_move();/*计算机移动棋子*/
result=judge();/*调用判断胜负函数,并将结果赋予变量result*/
}
while(result=='');/*当变量result为空时,继续循环*/
if(result=='X')/*当变量result为X时*/
printf("playerwin!
\n");/*人获胜*/
else/*否则*/
printf("computerwin!
\n");/*计算机获胜*/
display();/*显示棋盘*/
getchar();
return0;
}
charchessboard[3][3];/*将棋盘定义为3x3模式*/
voidinitialization(void)/*初始化棋盘*/
{
inti,j;/*变量i定义为行,变量j定义为列*/
for(i=0;i<3;i++)/*设定3x3的嵌套循环*/
for(j=0;j<3;j++)
chessboard[i][j]='';/*将棋盘的每一格定义为空*/
}
voidplayer_move(void)/*人移动棋子*/
{
inti,j;/*变量i定义为行,变量j定义为列*/
printf("Pleaseselecttheunit:
");/*选择放置棋子的位置*/
scanf("%d%*c%d",&i,&j);/*输入放置棋子的位置*/
i--;j--;/*行变量i减一,列变量j减一*/
if(chessboard[i][j]!
='')/*当该位置不为空时*/
{
printf("Error,reselect.\n");/*错误,重新选择*/
player_move();/*人移动棋子*/
}
elsechessboard[i][j]='X';/*否则,该位置定义为X*/
}
voidcomputer_move(void)/*计算机移动棋子*/
{
inti,j;/*变量i定义为行,变量j定义为列*/
for(i=0;i<3;i++)/*设定3x3的嵌套循环*/
{
for(j=0;j<3;j++)
if(chessboard[i][j]=='')/*当该位置为空时*/
break;/*跳出*/
if(chessboard[i][j]=='')/*当该位置不为空时*/
break;/*跳出*/
}
if(i*j==9)/*当变量i与变量j乘积为9时*/
{
printf("Thisgameisdraw.\n");/*平局*/
exit(0);/*退出*/
}
else
chessboard[i][j]='O';/*否则,该位置定义为O*/
}
voiddisplay(void)/*显示棋盘*/
{
intt;/*变量t*/
for(t=0;t<3;t++)/*设定循环*/
{
printf("%c|%c|%c",chessboard[t][0],chessboard[t][1],chessboard[t][2]);/*棋盘各单元之间显示|*/
if(t!
=2)
printf("\n-|-|-\n");
}
printf("\n");
}
charjudge(void)/*判断胜负*/
{
inti;/*变量i*/
for(i=0;i<3;i++)/*设定循环*/
if(chessboard[i][0]==chessboard[i][1]&&chessboard[i][0]==chessboard[i][2])/*当某行所有单元相同时*/
returnchessboard[i][0];/*返回该行内容*/
for(i=0;i<3;i++)/*设定循环*/
if(chessboard[0][i]==chessboard[1][i]&&chessboard[0][i]==chessboard[2][i])/*当某列所有单元相同时*/
returnchessboard[0][i];/*返回该列内容*/
for(i=0;i<3;i++)/*设定循环*/
if(chessboard[0][0]==chessboard[1][1]&&chessboard[0][0]==chessboard[2][2])/*当右斜列所有单元相同时*/
returnchessboard[0][0];/*返回右斜列内容*/
for(i=0;i<3;i++)/*设定循环*/
if(chessboard[0][2]==chessboard[1][1]&&chessboard[1][1]==chessboard[2][0])/*当左斜列所有单元相同时*/
returnchessboard[0][2];/*返回左斜列内容*/
return'';
}
【程序运行截屏】
【第二章“十佳运动员有奖评选系统”模块图】
1.主函数流程
2.统计模块流程
3.加载模块流程
4.计算十佳参选者模块流程
5.计算十佳运动员模块流程
6.计算选票的命中率流程
【第三章“学生成绩管理系统”模块图】
1.主函数流程
2.追加模块流程
3.插入模块流程
4.修改模块流程
5.删除模块流程
6.显示模块流程
7.查找模块流程
8.排序模块流程