当前位置: 首页 > news >正文

彩票网站开发 晓风满满正能量网站

彩票网站开发 晓风,满满正能量网站,江门地区网站建设公司,上海正规做网站公司电话目录 一、环境配置 二、功能模块 1.打印菜单 2.初始化并打印棋盘 3、行棋 3.1玩家行棋 3.2电脑行棋 4、判断是否和棋 5.判赢 三、代码实现 1、test.c文件 2、game.c文件 3、game.h文件 一、环境配置 本游戏用到三个文件#xff0c;分别是两个源文件test.c game.c 和…目录 一、环境配置 二、功能模块 1.打印菜单 2.初始化并打印棋盘 3、行棋  3.1玩家行棋 3.2电脑行棋 4、判断是否和棋  5.判赢 三、代码实现 1、test.c文件 2、game.c文件 3、game.h文件 一、环境配置 本游戏用到三个文件分别是两个源文件test.c  game.c 和一个头文件game.h。         主函数main()在test.c文件中游戏实现所需要的函数在test.c中被引用而函数的实现主要是在game.c文件中完成。game.h文件中包含了程序所需的所有头文件并且包括对实现游戏功能的所有函数的声明。         之所以使用3个文件是因为三子棋的实现需要多个模块的相互串联多个文件各司其职这样可以更好的处理各个模块间的逻辑这样也增加了代码的可读性而且还利于调试。 二、功能模块 1.打印菜单 void menu() {printf(********************************\n);printf(***** 1.play *****\n);printf(***** 0.exit *****\n);printf(********************************\n); } 运行结果  玩家选择1/0决定是否进入游戏。 2.初始化并打印棋盘 InitBoard(char board[ROW][COL], int row, int col) {int i 0;int j 0;for (i 0; i row; i){for (int j 0; j col; j){board[i][j] ;}} } /* 通过创建一个char类型的二维数组对其进行初始化 */ char board[ ][ ] { 0 };        void DisplayBoard(char board[ROW][COL], int row, int col) {int i 0;int j;for (i 0; i row; i){j 0; for ( j; j col; j) //打印 | | {printf( %c , board[i][j]);if (j col - 1){printf(|);}}printf(\n);j 0;for ( j; j col; j)//打印---|---|---{if (i row - 1){printf(---);if (j col - 1){printf(|);}}}printf(\n);} } 运行结果 其中上述棋盘的大小可以根据用户需求自行调整。  棋盘大小调整方式在game.h文件中对宏的定义进行更改即可完成棋盘大小的修改。 #define ROW 3 #define COL 3 3、行棋  3.1玩家行棋 void PlayerMove(char board[ROW][COL], int row, int col) {int x 0;int y 0;printf(玩家走:\n);while (1){printf(请输入下棋的坐标:);scanf(%d %d, x, y);//判断坐标的合法性if (x 1 x row y 1 y col){//下棋//首先判断坐标是否被占用if (board[x - 1][y - 1] ){board[x - 1][y - 1] *;//玩家使用*下棋break;}else{printf(坐标被占用请重新输入\n);}}else{printf(坐标非法请重新输入);}} } 3.2电脑行棋 void ComputerMove(char board[ROW][COL], int row, int col) {printf(电脑走:);while (1){//生成随机坐标int x rand() % row;int y rand() % col;//下棋//判断坐标是否被占用if (board[x][y] ){printf(%d %d\n, x 1, y 1);//输出电脑下棋的坐标board[x][y] #;//电脑使用#下棋break;}} } 电脑和玩家每走一步棋都会打印出新的棋盘以便于玩家观察空子的位置。 4、判断是否和棋  int IfFull(char board[ROW][COL], int row, int col) {int i 0;int j 0;for (i 0; i row; i){for (j 0; j col; j){if (board[i][j] ){return 0;//棋盘没满}}}return 1;//棋盘满了 }在game.c文件中通过IfFull函数实现对棋盘上空位的判断防止一个位置多次下棋。         如果棋盘所有格子都下完之前还没有分出胜负 则代表和棋以上代码为判断棋盘上面是否有空格子。 5.判赢 char IfWin(char board[ROW][COL], int row, int col) {//判断行for (int i 0; i row; i){for (int j 2; j col; j){if (board[i][j - 2] board[i][j - 1] board[i][j - 1] board[i][j] board[i][j] ! ){return board[i][j];}}}//判断列for (int j 0; j col; j){for (int i 2; i row; i){if (board[i - 2][j] board[i - 1][j] board[i - 1][j] board[i][j] board[i][j] ! ){return board[i][j];}}}//判断右交叉for (int i 2; i row; i){for (int j 2; j col; j){if (board[i - 2][j - 2] board[i - 1][j - 1] board[i - 1][j - 1] board[i][j] board[i][j] ! ){return board[i][j];}}}//判断左交叉for (int i 1; i row - 1; i){for (int j 1; j col - 1; j){if (board[i - 1][j 1] board[i][j] board[i][j] board[i 1][j - 1] board[i][j] ! ){return board[i][j];}}}//判断平局int full IfFull(board, row, col);if (full 1){return Q;}//游戏继续return C; } 每下一步棋都会对棋盘的每行、每列、左交叉、右交叉做出判断看是否有三个一样的旗子相连如果有代表下棋者获胜否则继续下棋直至下满棋盘。         return board[ i ][ j ] ;的奥妙之处就在于无论是玩家获胜还是电脑获胜都会返回与其相同的棋子不需要再重新进行判断取胜的棋子是哪一方如果返回*证明玩家获胜game()函数得到*判定玩家获胜输出“玩家获胜”如果返回#证明电脑获胜game()函数得到#判定电脑获胜输出“电脑获胜”         如果通过IfFull()函数判断棋盘已经下满就会给test.c文件中的game()函数中返回Q’game()函数得到Q便知道二者微分胜负输出和局。         否则return ’C,game()函数得到‘C’游戏继续。 三、代码实现 1、test.c文件 #includegame.h char ret 0;//ret用来存放比赛结果 void menu() {printf(********************************\n);printf(***** 1.play *****\n);printf(***** 0.exit *****\n);printf(********************************\n); }void game() {//存储数据 - 二维数组char board[ROW][COL];//初始化棋盘 - 初始化空格InitBoard(board,ROW,COL);//打印棋盘 - 本质是打印数组的内容DisplayBoard(board, ROW, COL);//玩家 电脑 走旗while (1){//玩家下棋PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL); //打印玩家的每一步走棋//判断玩家是否赢得游戏ret IfWin(board, ROW, COL);//玩家赢了* 电脑赢了# 平局Q 游戏继续Cif (ret ! C)break;//电脑下棋ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL); //打印电脑的每一步走棋//判断电脑是否赢得游戏ret IfWin(board, ROW, COL);if (ret ! C)break;}if (ret *){printf(%c玩家获胜\n, ret);}else if (ret #){printf(%c电脑获胜\n, ret);}else {printf(%c 平局\n, ret);}DisplayBoard(board, ROW, COL); }int main() {int input 0;srand((unsigned int)time(NULL));//配合rand()函数生成随机值因为只需要调用一次所以放到main()函数中do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:printf(三子棋游戏\n);game();break;case 0:printf(退出游戏\n);break;default:printf(选择错误请重新选择\n);break;}} while (input);return 0; } 2、game.c文件 #includegame.h//初始化棋盘的函数 InitBoard(char board[ROW][COL], int row, int col) {int i 0;int j 0;for (i 0; i row; i){for (int j 0; j col; j){board[i][j] ;}} }//打印棋盘的函数 void DisplayBoard(char board[ROW][COL], int row, int col) {int i 0;int j;for (i 0; i row; i){j 0; for ( j; j col; j) //打印 | | {printf( %c , board[i][j]);if (j col - 1){printf(|);}}printf(\n);j 0;for ( j; j col; j)//打印---|---|---{if (i row - 1){printf(---);if (j col - 1){printf(|);}}}printf(\n);} }//玩家下棋的函数 void PlayerMove(char board[ROW][COL], int row, int col) {int x 0;int y 0;printf(玩家走:\n);while (1){printf(请输入下棋的坐标:);scanf(%d %d, x, y);//判断坐标的合法性if (x 1 x row y 1 y col){//下棋//首先判断坐标是否被占用if (board[x - 1][y - 1] ){board[x - 1][y - 1] *;//玩家使用*下棋break;}else{printf(坐标被占用请重新输入\n);}}else{printf(坐标非法请重新输入);}} }//电脑下棋的函数 void ComputerMove(char board[ROW][COL], int row, int col) {printf(电脑走:);while (1){//生成随机坐标int x rand() % row;int y rand() % col;//下棋//判断坐标是否被占用if (board[x][y] ){printf(%d %d\n, x 1, y 1);//输出电脑下棋的坐标board[x][y] #;//电脑使用#下棋break;}} }//判断棋盘是否已经满了的函数 int IfFull(char board[ROW][COL], int row, int col) {int i 0;int j 0;for (i 0; i row; i){for (j 0; j col; j){if (board[i][j] ){return 0;//棋盘没满}}}return 1;//棋盘满了 }//判断游戏结果的函数 char IfWin(char board[ROW][COL], int row, int col) {//判断行for (int i 0; i row; i){for (int j 2; j col; j){if (board[i][j - 2] board[i][j - 1] board[i][j - 1] board[i][j] board[i][j] ! ){return board[i][j];}}}//判断列for (int j 0; j col; j){for (int i 2; i row; i){if (board[i - 2][j] board[i - 1][j] board[i - 1][j] board[i][j] board[i][j] ! ){return board[i][j];}}}//判断右交叉for (int i 2; i row; i){for (int j 2; j col; j){if (board[i - 2][j - 2] board[i - 1][j - 1] board[i - 1][j - 1] board[i][j] board[i][j] ! ){return board[i][j];}}}//判断左交叉for (int i 1; i row - 1; i){for (int j 1; j col - 1; j){if (board[i - 1][j 1] board[i][j] board[i][j] board[i 1][j - 1] board[i][j] ! ){return board[i][j];}}}//判断平局int full IfFull(board, row, col);if (full 1){return Q;}//游戏继续return C; }3、game.h文件 //头文件的包含 #includestdio.h #includestdlib.h #includetime.h//符号的定义 #define ROW 3 #define COL 3//函数的声明//初始化棋盘函数 InitBoard(char board[ROW][COL], int row, int col); //打印棋盘的函数 void DisplayBoard(char board[ROW][COL], int row, int col); //玩家下棋 void PlayerMove(char board[ROW][COL], int row, int col); //电脑下棋 void ComputerMove(char board[ROW][COL], int row, int col); //判断游戏结果 玩家赢了* 电脑赢了# 平局Q 游戏继续C char IfWin(char board[ROW][COL], int row, int col); //判断棋盘是否已经下满 int IfFull(char board[ROW][COL], int row, int col); 感谢你的阅读希望对你有所帮助~ 欢迎批评指正共同进步
http://www.dnsts.com.cn/news/205071.html

相关文章:

  • 玉溪建设网站辽宁城乡住房建设厅网站打不开
  • 河南省建设注册中心网站php高级网站开发
  • 本溪市做网站公司抖音代运营销售话术
  • 广西专业建网站建立 网站服务器
  • 不一样维度的网站网站建设php有哪些
  • 天津实用网站建设平台前端代码
  • 如何用普通电脑做网站服务器网站建设中网站需求分析报告作用
  • 怎么让网站绑定域名福州网站搭建
  • 做网站需要编程么宁波公司做企业网站
  • 如何建设简单网站义乌市微畅网络科技有限公司
  • 佛山新网站建设如何怎样管理网站
  • 上海营销型网站报价通化网站建设公司
  • 做网站设计要适配到手机端么孝感网站设计
  • 个人网站建站系统高大上的广告公司名字
  • 杰迅山西网站建设销售平台app
  • 怎么注册网站太原网站搜索优化
  • 河间建设网站新颖的网络营销方式
  • 婚庆公司网站建设总结报告crm系统营销
  • 做网站公司的出路wordpress滑动门短代码
  • 网站开发公司是干嘛的昆明网站开发多少钱
  • 智能锁东莞网站建设个人网站域名名称大全
  • html网站模板建站wordpress增加评论验证码
  • 网站被攻击的方法2017优惠券网站怎么做
  • 网站群系统破解版网站设计作品案例
  • 网站建设一般多少wordpress如何实现301跳转
  • 防伪码做网站的还能没导入吗热门关键词查询
  • 做微网站多少钱企业管理咨询属于哪个行业
  • 通州网站建设站开发评价建网站怎么备案
  • 专业网站设计哪家好网站建设微信公众号文章
  • 网站因为备案关闭了 怎么办关于招聘的网站开发图