一担挑游戏C语言.docx

上传人:b****4 文档编号:11729759 上传时间:2023-03-31 格式:DOCX 页数:15 大小:282.73KB
下载 相关 举报
一担挑游戏C语言.docx_第1页
第1页 / 共15页
一担挑游戏C语言.docx_第2页
第2页 / 共15页
一担挑游戏C语言.docx_第3页
第3页 / 共15页
一担挑游戏C语言.docx_第4页
第4页 / 共15页
一担挑游戏C语言.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

一担挑游戏C语言.docx

《一担挑游戏C语言.docx》由会员分享,可在线阅读,更多相关《一担挑游戏C语言.docx(15页珍藏版)》请在冰豆网上搜索。

一担挑游戏C语言.docx

一担挑游戏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.排序模块流程

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1