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

沈阳微信网站制作价格理发培训专业学校

沈阳微信网站制作价格,理发培训专业学校,网站推广是做什,网站登录账号密码保存目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版#xff1a; game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了#xff0c;大家小时候都玩过哈。 我们要通过程序实现这个小游戏…目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版  game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了大家小时候都玩过哈。 我们要通过程序实现这个小游戏大体上的构思得有 游戏流程运行游戏打印棋盘下棋判断输赢 由此我们声明如下函数、棋盘数组和回合数 (用于双人下棋时下不同棋子的判断)。 将这些都放在我创建的头文件game.h中方便其他文件使用  #include stdio.h #include Windows.hint map[19][19];//棋盘 int flag;//回合数//初始化棋盘 void init();//游戏菜单 void menuView();//打印棋盘 void gameView_ShowMap();//玩家下棋 int playerMove(int x, int y);//判断输赢 int isWin(int x, int y);//判断输赢 void winView(); 1、主程序 先进行游戏下棋后进行判断输赢比较符合do—while的特点。  int main() {int input 0;do{menuView();printf(请选择);scanf(%d, input);switch (input) {case 1:gameView();break;case 0:printf(退出游戏\n);break;default:printf(输入错误请重新选择.\n);break;}} while (input);return 0; }首先打印菜单提示玩家进行选择开始游戏。通过输入变量input的值判断是否进行游戏值为1则调用gameView函数进行游戏0则结束游戏。gameView函数对各种功能函数进行整合。 在此之前先将各种功能函数进行实现最后将它们放入gameView整合。  2、初始化 void init() {for (int i 0; i 19; i) {for (int j 0; j 19; j) {map[i][j] 0;}}flag 0; } 将棋盘每个格子初始化为0。回合数初始化为0。 3、游戏菜单 void menuView() {printf(*************************\n);printf(***** 1. play ******\n);printf(***** 0. exit ******\n);printf(*************************\n); }4、打印棋盘 这里我选择设计了棋盘格和横纵坐标我们可以根据需要自行设计。  void gameView_ShowMap() {int i, j;printf( );for (i 0; i 19; i) {//打印横坐标printf(%3d ,i);}printf(\n );for (i 0; i 19; i) {printf(---);}printf(\n);for (i 0; i 19; i) {printf(%2d |, i);//每行输出前都先打印纵坐标for (j 0; j 19; j) {printf( %d , map[i][j]);//打印棋子if (j 18)printf(|);}printf(|\n);if(i18)printf( |);if(i18)printf( );for (j 0; j 19; j) {printf(---);if (j 18)printf();}printf(\n);} }效果如下  6、玩家下棋 int playerMove(int x, int y) {if (x 0 x 19 y 0 y 19) {if (map[x][y] 0) {if (flag % 2 0)map[x][y] 1;//下黑子elsemap[x][y] 2;//下白子//落子成功return 1;}else {//该位置已有棋子return 0;}}else {//坐标不合法return -1;} } 首先判断下棋位置是否在棋盘0到18的横纵坐标内如果不在函数返回值-1如果在棋盘内则进行下棋。棋盘每个格子初始值为0判断当前格子的值为0才可以下棋否则返回值为0。回合数flag初始值为0当flag为偶数下黑子1奇数下白子2成功下棋返回值为1。 7、判断输赢 int isWin(int x, int y) {int i, j;for (i 0; i 19; i) {for (j 0; j 19; j) {if (map[i][j] 0) {continue;}//横着连成五子if (j 15)if (map[i][j] map[i][j 1] map[i][j] map[i][j 2] map[i][j] map[i][j 3] map[i][j] map[i][j 4])return map[i][j];//竖着连成五子if (i 15)if (map[i][j] map[i 1][j] map[i][j] map[i 2][j] map[i][j] map[i 3][j] map[i][j] map[i 4][j])return map[i][j];//左斜着连成五子- \ if (i 15 j 15)if (map[i][j] map[i 1][j 1] map[i][j] map[i 2][j 2] map[i][j] map[i 3][j 3] map[i][j] map[i 4][j 4])return map[i][j];//右斜着连成五子- / if (i 15 j 4)if (map[i][j] map[i 1][j - 1] map[i][j] map[i 2][j - 2] map[i][j] map[i 3][j - 3] map[i][j] map[i 4][j - 4])return map[i][j];}}return 0; } i 15 用于确保在检查垂直和左斜方向的连续五子时起始位置 (i, j) 之后至少还有4个位置。因为五子连成一线需要五个连续的位置所以确保从当前位置开始往下检查的时候不会超出数组的边界。 j 15 用于确保在检查水平和左斜方向的连续五子时起始位置 (i, j) 之后至少还有4个位置。同样这是为了确保从当前位置开始往右检查的时候不会超出数组的边界。 j 4 用于确保在检查右斜方向的连续五子时起始位置 (i, j) 之前至少还有4个位置。这是为了确保从当前位置开始往左检查的时候不会超出数组的边界。 8、功能整合 void gameView() {init();int x 0, y 0;int ret 0;//辅助判断坐标是否合法while (1) {gameView_ShowMap();printf(请输入要下棋的坐标);scanf(%d %d, x, y);if (playerMove(x, y) 0) {printf(\n!!!该坐标已被占用!!!\n);Sleep(2000);continue;}else if (playerMove(x, y) -1) {printf(\n!!!请输入合法坐标!!!\n);Sleep(2000);continue;}else {flag;//切换回合}if (isWin(x, y) 0) {continue;}else if (isWin(x, y) 1) {printf(黑子获胜\n);break;}else if (isWin(x, y) 2) {printf(白子获胜\n);break;}}} 这里的Sleep函数需要头文件#include Windows.h使用该函数暂停两秒防止continue后下次循环打印的棋盘将提示信息挡住。下棋坐标不合法打印提示信息后进入下次循环重新输入。成功下棋则flag自增切换回合。每次下棋后都要判断输赢有人赢了则停止循环否则继续下棋。其实应该从下棋次数第五次开始判断输赢更合理读者可以自行添加判断 人机下棋 想要实现人机下棋可以看看我这篇文章《三子棋》 里面实现了人机下棋读者可以自行模仿改进实现其功能的重要函数可以在这篇文章中学习 randsrand函数 。  完整版  game.h #include stdio.h #include Windows.h int map[19][19];//棋盘 int flag;//回合数//初始化 void init();//游戏菜单 void menuView();//打印棋盘 void gameView_ShowMap();//玩家下棋 int playerMove(int x, int y);//判断输赢 int isWin(int x, int y); game.c #define _CRT_SECURE_NO_WARNINGS 1 #include game.hvoid init() {for (int i 0; i 19; i) {for (int j 0; j 19; j) {map[i][j] 0;}}flag 1; }int isWin(int x, int y) {int i, j;for (i 0; i 19; i) {for (j 0; j 19; j) {if (map[i][j] 0) {continue;}//横着连成五子if (j 15)if (map[i][j] map[i][j 1] map[i][j] map[i][j 2] map[i][j] map[i][j 3] map[i][j] map[i][j 4])return map[i][j];//竖着连成五子if (i 15)if (map[i][j] map[i 1][j] map[i][j] map[i 2][j] map[i][j] map[i 3][j] map[i][j] map[i 4][j])return map[i][j];//左斜着连成五子- \ if (i 15 j 15)if (map[i][j] map[i 1][j 1] map[i][j] map[i 2][j 2] map[i][j] map[i 3][j 3] map[i][j] map[i 4][j 4])return map[i][j];//右斜着连成五子- / if (i 15 j 4)if (map[i][j] map[i 1][j - 1] map[i][j] map[i 2][j - 2] map[i][j] map[i 3][j - 3] map[i][j] map[i 4][j - 4])return map[i][j];}}return 0; }int playerMove(int x, int y) {if (x 0 x 19 y 0 y 19) {if (map[x][y] 0) {if (flag % 2 0)map[x][y] 1;//下黑子elsemap[x][y] 2;//下白子//落子成功return 1;}else {//该位置已有棋子return 0;}}else {//坐标不合法return -1;} }void menuView() {printf(*************************\n);printf(***** 1. play ******\n);printf(***** 0. exit ******\n);printf(*************************\n); }void gameView_ShowMap() {int i, j;printf( );for (i 0; i 19; i) {//打印横坐标printf(%3d ,i);}printf(\n );for (i 0; i 19; i) {printf(---);}printf(\n);for (i 0; i 19; i) {printf(%2d |, i);//每行输出前先都打印纵坐标for (j 0; j 19; j) {printf( %d , map[i][j]);if (j 18)printf(|);}printf(|\n);if(i18)printf( |);if(i18)printf( );for (j 0; j 19; j) {printf(---);if (j 18)printf();}printf(\n);} } text.c #define _CRT_SECURE_NO_WARNINGS 1 #include game.hvoid gameView() {init();int x 0, y 0;int ret 0;//辅助判断坐标是否合法while (1) {gameView_ShowMap();printf(请输入要下棋的坐标);scanf(%d %d, x, y);if (playerMove(x, y) 0) {printf(\n!!!该坐标已被占用!!!\n);Sleep(2000);continue;}else if (playerMove(x, y) -1) {printf(\n!!!请输入合法坐标!!!\n);Sleep(2000);continue;}else {flag;//切换回合}if (isWin(x, y) 0) {continue;}else if (isWin(x, y) 1) {printf(黑子获胜\n);break;}else if (isWin(x, y) 2) {printf(白子获胜\n);break;}}}int main() {int input 0;do{menuView();printf(请选择);scanf(%d, input);switch (input) {case 1:gameView();break;case 0:printf(退出游戏\n);break;default:printf(输入错误请重新选择.\n);break;}} while (input);return 0; } 测试功能代码 此代码可以替换int main主函数用于测试函数功能是否正确可以减少自行下棋测试时间  成功运行输出如下 int main() {int testflag 0;//init测试代码init();if (flag ! 0) {printf(init()错误);exit(0);}for (int i 0; i 19; i) {for (int j 0; j 19; j) {if (map[i][j]) {printf(init()错误);exit(0);}}}printf(init()测试成功\n);testflag;//playerMove测试代码int result 1;result playerMove(2, 2);result playerMove(2, 3);result playerMove(2, 4);result playerMove(2, 5);if (result ! 1 || (map[2][2] map[2][3] map[2][4] map[2][5]) ! 1) {printf(playerMove()错误);exit(0);}flag 1;result playerMove(2, 5);if (result ! 0 || map[2][5] ! 1) {printf(playerMove()错误);exit(0);}printf(playerMove()测试成功\n);testflag;//isWin测试代码playerMove(2, 1);if (isWin(2, 1)) {printf(isWin()错误);exit(0);}playerMove(1, 0);playerMove(3, 2);playerMove(4, 3);playerMove(5, 4);if (isWin(1, 0) ! 2) {printf(isWin()错误);exit(0);}printf(isWin()测试成功\n);testflag;if (testflag 3) {printf(service代码测试成功\n);}return 0; }
http://wiki.neutronadmin.com/news/392994/

相关文章:

  • 江苏国泰做的网站案例百度网页提交入口
  • 不同类型的购物网站wordpress特效-页面加载动画圆圈
  • 网站建设栏目提纲天津做网站设计公司
  • 四川省建设岗位注册中心网站网站建设案例查询
  • .湖南省建设厅规范网站成都专业网站建设
  • 个人备案网站建设方案书wordpress评论vip
  • 重庆市建设项目环境申报表网站建立英语
  • 刷链接浏览量网站延庆免费网站建设
  • 为网站设计手机版营销网站建设价格
  • 广东十大网站建设排名直播网站建设
  • 奇单网站建设有多少个购物网站
  • 中卫网站建设河北网站推广公司
  • 高校网站群建设研究网站首页效果图
  • 做营销型网站用什么技术上海家装十强企业
  • 山东做网站公司有哪些网页设计流程是什么
  • 个人备案网站名称大全广东东莞邮政编码
  • 郑州做网站哪里便宜上海注册公司代理记账
  • 信息可视化网站新媒体口碑营销案例
  • 中小型网站设计哪家好淘宝店铺装修免费模板
  • 做网站服务器用国外的eyoucms去版权
  • 国家最新政策完美一键优化
  • 上海青浦做网站镇江市远航网络科技有限公司
  • 重庆的主要的网站公司网站怎么做美观
  • 如何做的网站手机可以用利用赞赏码做网站收款
  • dw做旅游网站教程青岛房产网官网网址
  • 做微商网站公司WordPress中文版如何下载
  • 安徽专业网站建设检修html5模板免费下载
  • 怎样看网站做的好不好免费微商城平台官网
  • 网站建设的市场调研分析跨境电商卖什么东西比较好
  • 网站建设合同规定大连网站建设仟亿科技