一担挑游戏——c语言

上传人:第*** 文档编号:99056899 上传时间:2019-09-17 格式:DOC 页数:15 大小:105.50KB
返回 下载 相关 举报
一担挑游戏——c语言_第1页
第1页 / 共15页
一担挑游戏——c语言_第2页
第2页 / 共15页
一担挑游戏——c语言_第3页
第3页 / 共15页
一担挑游戏——c语言_第4页
第4页 / 共15页
一担挑游戏——c语言_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《一担挑游戏——c语言》由会员分享,可在线阅读,更多相关《一担挑游戏——c语言(15页珍藏版)》请在金锄头文库上搜索。

1、模拟人机对弈-“一担挑游戏”【要求】 简单设计计算机模拟棋盘对弈。其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。游戏规则如下:(1) 计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:发现空单元后,置为“O”,未发现时,报告平局后退出。(2) 轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。(3) 谁先三点一线了,则报告谁胜出。(4) 计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。【提示】 棋盘位置用二维数组表示,初始状态每一位置均应为“ ”(空)。其分隔线(即棋盘线)可用或| |来分隔。【分析】 该程序模拟人机对弈,具有极大的趣味性

2、。 全程序主要模块包括“人移动棋子模块”,“计算机移动棋子模块”以及“判断胜负模块”。“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。1.总体流程图一担挑游戏初始化棋盘显示棋盘人移动棋子计算机移动棋子判断胜负 2.initialization (void) 初始化棋盘模块将棋盘的每一格定义为空开 始由位置(1,1)起,至位置(3,3)初始化棋盘模块流程图该模块首先设置一个3X3的循环,将棋盘的每一个单元定义为空。在程序运行的第一步,主程序调用该模块

3、功能,对棋盘进行初始化。3.display (void) 显示棋盘模块棋盘每格之间显示 “ | ”开 始已显示至第三行吗?换行,显示“ -|-|- ”换 行显示棋盘模块流程图该模块与“初始化棋盘模块”类似,首先设置一个3X3的循环。不同之处在于显示同一行的一个单元后,棋盘每格之间显示“ | ”;换行之后显示“ -|-|- ”。在程序运行“判断胜负模块”功能之后,调用该模块功能。4.play_move () 人移动棋子模块开 始选择放置棋子的位置(i,j)行变量i减一,列变量j减一该位置为空吗?错误,重新选择该位置定义为X人移动棋子模块流程图该模块首先选择放置棋子的位置(i,j),之后行变量i减

4、一,列变量j减一。如果该位置为空,则将该单元内容定义为“X”;如果该位置不为空,则返回错误信息并重新运行该模块函数,让人重新选择放置棋子的位置。puter move () 计算机移动棋子功能流程图由位置(1,1)起判断开 始该位置为空吗?该局比赛结果为平局行变量i与列变量j分别加一该位置定义为O退 出i与j乘积为9吗?计算机移动棋子模块流程图该模块首先设置3X3的循环,从(1,1)开始,依次判断每一个单元是否为空。为空时,则将该位置定义为“O”;若不为空,则继续运行。当移动至(3,3),即行变量i与列变量j乘积为9时,若该单元依然不为空,则判定该局比赛结果为平局。6.char judge (v

5、oid) 判断胜负模块开 始某列棋子相同吗?某行棋子相同吗?返回左斜列棋子返回右斜列棋子返回该列棋子返回该行棋子右斜列棋子相同吗?左斜列棋子相同吗?返 回判断胜负模块流程图该模块首先设置3X3的循环,依次判断每行,每列以及左斜列,右斜列的内容是否相同。不相同时,返回至主函数;若相同,则将变量result定义为相同的内容。最后,根据result显示“player win!”或者“computer win! ”【一担挑程序】#include stdio.h #include stdlib.h void initialization();/*初始化棋盘*/ void player_move();/*

6、人移动棋子*/ void computer_move();/*计算机移动棋子*/ void display();/*显示棋盘*/ char judge();/*判断胜负*/ int main(void) char result;/*变量result定义为判断胜负的结果*/ result= ;/*变量result初值为空*/ initialization();/*初始化棋盘*/printf(You will play against computer.n);printf(Good luck and God blesses you.n); do display();/*显示棋盘*/ player_

7、move();/*人移动棋子*/ result=judge();/*调用判断胜负函数,并将结果赋予变量result*/ if(result!= )/*当变量result不为空时*/ break;/*跳出*/ computer_move();/*计算机移动棋子*/ result=judge();/*调用判断胜负函数,并将结果赋予变量result*/ while(result= );/*当变量result为空时,继续循环*/ if(result=X)/*当变量result为X时*/ printf(player win!n);/*人获胜*/ else/*否则*/ printf(computer wi

8、n! n);/*计算机获胜*/ display();/*显示棋盘*/ getchar(); return 0; char chessboard33;/*将棋盘定义为3x3模式*/ void initialization(void)/*初始化棋盘*/ int i,j;/*变量i定义为行,变量j定义为列*/ for(i=0;i3;i+)/*设定3x3的嵌套循环*/ for(j=0;j3;j+) chessboardij= ;/*将棋盘的每一格定义为空*/ void player_move(void)/*人移动棋子*/ int i,j;/*变量i定义为行,变量j定义为列*/ printf(Pleas

9、e select the unit:);/*选择放置棋子的位置*/ scanf(%d%*c%d,&i,&j);/*输入放置棋子的位置*/ i-;j-;/*行变量i减一,列变量j减一*/ if(chessboardij!= )/*当该位置不为空时*/ printf(Error,reselect.n);/*错误,重新选择*/ player_move();/*人移动棋子*/ else chessboardij=X;/*否则,该位置定义为X*/ void computer_move(void)/*计算机移动棋子*/ int i,j;/*变量i定义为行,变量j定义为列*/ for(i=0;i3;i+)/

10、*设定3x3的嵌套循环*/ for(j=0;j3;j+) if(chessboardij= )/*当该位置为空时*/ break;/*跳出*/ if(chessboardij= )/*当该位置不为空时*/ break;/*跳出*/ if(i*j=9)/*当变量i与变量j乘积为9时*/ printf(This game is draw.n);/*平局*/ exit(0);/*退出*/ else chessboardij=O;/*否则,该位置定义为O*/ void display(void)/*显示棋盘*/ int t;/*变量t*/ for(t=0;t3;t+)/*设定循环*/ printf(%

11、c|%c|%c,chessboardt0,chessboardt1, chessboardt2);/*棋盘各单元之间显示|*/ if(t!=2)printf(n-|-|-n); printf(n); char judge(void)/*判断胜负*/ int i;/*变量i*/for(i=0;i3;i+)/*设定循环*/if(chessboardi0=chessboardi1&chessboardi0 =chessboardi2)/*当某行所有单元相同时*/return chessboardi0;/*返回该行内容*/ for(i=0;i3;i+)/*设定循环*/ if(chessboard0i=

12、chessboard1i&chessboard0i =chessboard2i)/*当某列所有单元相同时*/return chessboard0i;/*返回该列内容*/for(i=0;i3;i+)/*设定循环*/if(chessboard00=chessboard11&chessboard00 =chessboard22)/*当右斜列所有单元相同时*/return chessboard00;/*返回右斜列内容*/for(i=0;i3;i+)/*设定循环*/if(chessboard02=chessboard11&chessboard11= chessboard20)/*当左斜列所有单元相同时*

13、/ return chessboard02;/*返回左斜列内容*/return ; 【程序运行截屏】【第二章 “十佳运动员有奖评选系统”模块图】十佳运动员有奖评选系统统 计核 对退 出读入文件信息计算十佳运动员计算十个获奖者浏览选票查找选票返回主菜单1.主函数流程显示一系列功能选项输入,判断是否是1-3根据的值调用2.统计模块流程从文件读入候选运动员记录显示候选运动员记录从文件读入选票记录3.加载模块流程定义指针及循环计数器文件打开成功否输出错误信息读到文件末尾了吗?调用读入一个学生信息,并存入结构体中关闭文件,返回值4.计算十佳参选者模块流程计算选票命中率依据命中率对选票记录排序显示10个获奖参选者信息输出10个获奖者信息到文件5.计算十佳运动员模块流程开 始选票核对完了吗?10个候选号码?20个候选人?函数结束处理下一张选票候选人得票数加一候选号=候选人?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号