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

徐州网站建设制作工作室微信crm系统软件

徐州网站建设制作工作室,微信crm系统软件,川畅科技搜搜 网站设计,免费关键词排名优化软件#x1f6a9;纸上得来终觉浅#xff0c; 绝知此事要躬行。 #x1f31f;主页#xff1a;June-Frost #x1f680;专栏#xff1a;C语言 #x1f525;该篇将结合之前的知识来实现 三子棋游戏。 目录#xff1a; #x1f31f;思路框架#xff1a;测试游戏 #x1f31f… 纸上得来终觉浅 绝知此事要躬行。 主页June-Frost 专栏C语言 该篇将结合之前的知识来实现 三子棋游戏。 目录 思路框架测试游戏 测试部分函数实现游戏部分函数实现完整的代码❤️ 结语 思路框架 测试 通过迭代保证每次玩完游戏后可以再来一局或者退出。 游戏 博主将会对上图每一个板块进行函数实现。 测试部分函数实现 选择是否玩游戏 该板块的循环部分将会使用do while 循环来实现保证一开始可以选择运行完游戏部分后还可以继续选择。 #includegame.hint main() {int input 0;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; }游戏部分函数实现 在玩三子棋游戏中每一步棋下完之后的状态需要保存即需要数据的保存所以可以创建一个3X3的数组之后的数据操作就可以针对数组进行操作。 菜单 void menu() {printf(**************************\n);printf(********* 1.play *********\n);printf(********* 0.exit *********\n);printf(**************************\n); }初始化棋盘 定义一个 3X3 数组后我们将数组的元素都赋为 空格这样就可以保证打印出来的效果是空的棋盘。 void BoardInit(char board[][Col], int row, int col) {//遍历数组将每个元素赋为 空格int i 0;for (i 0; i row; i){int j 0;for (j 0; j col; j){board[i][j] ;}} }打印棋盘 需要产生的效果 实现上述的效果只需要两步拆解 1. 将这样的棋盘首先分为三部分每一个部分由数据部分和分割线部分构成分割线部分在最后一部分没有(只需要加一个限制条件即可) int i 0;for (i 0; i row; i){//打印数据printf(\n);//打印后换行//打印分割线if (i row - 1)//保证最后一部分不打印分割线{}printf(\n);//打印后换行}每个部分内部又可以划分为三部分与第一次拆解逻辑一摸一样注意第三部分没有 | 即可 void DisplayBoard(char board[][Col], int row, int col) {int i 0;for (i 0; i row; i){//打印数据int j 0;for (j 0; j col; j){printf( %c , board[i][j]);if (j col - 1){printf(|);}}printf(\n);//打印分割线if (i row - 1){int j 0;for (j 0; j col; j){printf(---);if (j col - 1){printf(|);}}}printf(\n);} }玩家下棋 这里需要注意 检查玩家输入的坐标是否合法以及该坐标下是否已经有棋子。而且在写条件的时候需要代入玩家视角输入区间为 1 —— 3但访问区间为 0——2 。 void PlayerMove(char board[][Col], int row, int col) {printf(玩家下棋\n);printf(请输入下棋的坐标,中间使用空格:);while (1){int x 0;int y 0;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] X;//落子break;}else{printf(该位置已有棋子请重新输入:);}}else{printf(输入非法请重新输入:);}} }电脑下棋 这里需要使用伪随机数并且直接将范围锁定在 0——2可以直接访问数组元素。完成该功能只需要判断 坐标下是否有棋子若有棋子则重新生成随机数。若要了解随机数可以参考——随机数 。 void ComputerMove(char board[][Col], int row, int col) {printf(电脑下棋:\n);while (1){int x rand() % row;int y rand() % col;if (board[x][y] ){board[x][y] O;break;}} }判断输赢 只需要从4种方向遍历数组有符合获胜条件的直接返回数组元素如果没有获胜则需要判断是否棋盘已满平局除此之外就是未完成该局继续下棋。 所以返回值 有四种情况 电脑赢 —— 返回 ‘O’ 玩家赢 —— 返回 ‘X’ 平局 —— 返回 ‘P’ 继续 —— 返回 ‘C’ int IsFull(char board[][Col], int row, int col)//判断是否已满已满返回1 {//遍历int i 0;for (i 0; i row; i){int j 0;for (j 0; j col; j){if (board[i][j] )return 0;}}return 1; } //判断输赢 char IsWin(char board[][Col], int row, int col) {//一方获胜//从上到下遍历int i 0;for (i 0; i row; i){if (board[i][0] board[i][1] board[i][1] board[i][2] board[i][0] ! ){return board[i][0];}}//从左至右遍历for (i 0; i col; i){if (board[0][i] board[1][i] board[1][i] board[2][i] board[0][i] ! ){return board[0][i];}}//左上至右下if (board[0][0] board[1][1] board[1][1] board[2][2] board[0][0] ! ){return board[1][1];}//左下至右上if (board[2][0] board[1][1] board[1][1] board[0][2] board[2][0] ! ){return board[1][1];}//平局if (IsFull(board,row,col)){return P;}return C;}游戏逻辑部分 我们已经有了所有的功能函数按照思路框架直接写出来即可。 void game() {char board[Row][Col] { 0 };BoardInit(board, Row, Col);DisplayBoard(board, Row, Col);//先手判断//假设玩家先手void(*Fir)(char board[][Col], int, int) PlayerMove;void(*Sec)(char board[][Col], int, int) ComputerMove;int flag rand()%2; //1——玩家先手0——电脑先手if (flag 0){printf(电脑先手\n);Fir ComputerMove;Sec PlayerMove;}else{printf(玩家先手\n);}//char ret 0;while (1){Fir(board, Row, Col);DisplayBoard(board, Row, Col);ret IsWin(board, Row, Col);if (ret ! C)break;Sec(board, Row, Col);DisplayBoard(board, Row, Col);ret IsWin(board, Row, Col);if (ret ! C)break;}if (ret X){printf(玩家获胜\n);}else if (ret O){printf(电脑获胜\n);}else{printf(平局\n);} }首先假设玩家是先手如果flag 1则照旧进行如果flag 0就直接交换先后手。 完整的代码 test.c : 请记得设置随机数起点srand。 #define _CRT_SECURE_NO_WARNINGS 1 #includegame.hint main() {int input 0;srand((unsigned int)time(NULL));//起点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; }game.h #pragma once#includestdio.h #includestdlib.h #includetime.h #define Row 3 #define Col 3 //菜单 void menu(); //游戏(逻辑 void game(); //初始化棋盘 void BoardInit(char board[][Col], int row, int col); //打印棋盘 void DisplayBoard(char board[][Col], int row, int col); //玩家下棋 void PlayerMove(char board[][Col], int row, int col); //电脑下棋 void ComputerMove(char board[][Col], int row, int col); //判断输赢 char IsWin(char board[][Col], int row, int col); game.c #define _CRT_SECURE_NO_WARNINGS 1 #includegame.hvoid menu() {printf(**************************\n);printf(********* 1.play *********\n);printf(********* 0.exit *********\n);printf(**************************\n); }void BoardInit(char board[][Col], int row, int col) {//遍历数组将每个元素赋为 空格int i 0;for (i 0; i row; i){int j 0;for (j 0; j col; j){board[i][j] ;}} }void DisplayBoard(char board[][Col], int row, int col) {int i 0;for (i 0; i row; i){//打印数据int j 0;for (j 0; j col; j){printf( %c , board[i][j]);if (j col - 1){printf(|);}}printf(\n);//打印分割线if (i row - 1){int j 0;for (j 0; j col; j){printf(---);if (j col - 1){printf(|);}}}printf(\n);} }void PlayerMove(char board[][Col], int row, int col) {printf(玩家下棋\n);printf(请输入下棋的坐标,中间使用空格:);while (1){int x 0;int y 0;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] X;//落子break;}else{printf(该位置已有棋子请重新输入:);}}else{printf(输入非法请重新输入:);}} }void ComputerMove(char board[][Col], int row, int col) {printf(电脑下棋:\n);while (1){int x rand() % row;int y rand() % col;if (board[x][y] ){board[x][y] O;break;}} }int IsFull(char board[][Col], int row, int col) {//遍历int i 0;for (i 0; i row; i){int j 0;for (j 0; j col; j){if (board[i][j] )return 0;}}return 1; }char IsWin(char board[][Col], int row, int col) {//一方获胜//从上到下遍历int i 0;for (i 0; i row; i){if (board[i][0] board[i][1] board[i][1] board[i][2] board[i][0] ! ){return board[i][0];}}//从左至右遍历for (i 0; i col; i){if (board[0][i] board[1][i] board[1][i] board[2][i] board[0][i] ! ){return board[0][i];}}//左上至右下if (board[0][0] board[1][1] board[1][1] board[2][2] board[0][0] ! ){return board[1][1];}//左下至右上if (board[2][0] board[1][1] board[1][1] board[0][2] board[2][0] ! ){return board[1][1];}//平局if (IsFull(board,row,col)){return P;}return C;}void game() {char board[Row][Col] { 0 };BoardInit(board, Row, Col);DisplayBoard(board, Row, Col);//先手判断//假设玩家先手void(*Fir)(char board[][Col], int, int) PlayerMove;void(*Sec)(char board[][Col], int, int) ComputerMove;int flag rand()%2; //1——玩家先手0——电脑先手if (flag 0){printf(电脑先手\n);Fir ComputerMove;Sec PlayerMove;}else{printf(玩家先手\n);}//char ret 0;while (1){Fir(board, Row, Col);DisplayBoard(board, Row, Col);ret IsWin(board, Row, Col);if (ret ! C)break;Sec(board, Row, Col);DisplayBoard(board, Row, Col);ret IsWin(board, Row, Col);if (ret ! C)break;}if (ret X){printf(玩家获胜\n);}else if (ret O){printf(电脑获胜\n);}else{printf(平局\n);} }❤️ 结语 文章到这里就结束了如果对你有帮助你的点赞将会是我的最大动力如果大家有什么问题或者不同的见解欢迎大家的留言~
http://www.w-s-a.com/news/236970/

相关文章:

  • 不同的网站 做301公共资源交易中心是干嘛的
  • 36 氪 网站如何优化怎么优化自己的网站
  • 网站兼容问题湖北网站建设优化
  • 2018新网站做外链app制作的网站
  • 外贸网站建设怎么建设pc网站做移动端适配
  • 做经销找厂家好的网站个人备案网站可以做电影站吗
  • 网站搭建怎么做网站建设培训哪家好
  • 学做美食的视频网站企业网站备案密码怎么找回
  • 销售产品做单页还是网站seo有哪些作用
  • 网站视觉规范南宁网站优化推广
  • 公司起名打分最准的免费网站学设计的学校
  • 用cn作网站行么WordPress网站打不开nginx
  • 顺德龙江网站建设百货商城自助下单网站
  • 门户网站采用较多的模式是wordpress自动搜索缩略图
  • 深圳设计功能网站做网站推广怎么做
  • 海口专业网站建设地址wordpress站点标题是什么
  • 青岛做网站那家好网页素材网
  • 宁夏银川做网站的公司网络营销有哪些推广方法
  • 免费域名网站哪个最好东莞企业网站排名
  • dz做网站网址模版
  • 做外贸网站平台中华室内设计师网
  • 三大网络架构seo是啥职业
  • 一个域名可以做中英文两个网站吗搜索引擎营销的6种方式
  • 可以做ppt的网站天津网站建设怎么样
  • 网站怎么做的qq邮件订阅浙江省住房和城乡建设厅网站查询
  • 主机屋网站在线做图片
  • 河南省城乡住房建设厅网站wordpress登陆密码
  • 漳州做网站的公司搭建网站多少时间
  • 网站开发实习计划模板微营销手机
  • 网站设计与制作是做什么工作免费封面设计在线制作生成