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

宝山品牌网站建设自己做免费手机网站吗

宝山品牌网站建设,自己做免费手机网站吗,移动网站营销,网站开发立项申请表大家好#xff0c;我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑随机下棋 6.判断输赢 7.判断棋盘是否满了 四、完整代码 game.h(相关函数的声明#xff0c;整个代码要引用的头文件以及宏… 大家好我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑随机下棋 6.判断输赢 7.判断棋盘是否满了 四、完整代码 game.h(相关函数的声明整个代码要引用的头文件以及宏定义) game.c(实现游戏的相关函数) test.c(:整个游戏相关的测试) 一、游戏介绍 《三子棋》是一款古老的民间传统游戏又被称为黑白棋、圈圈叉叉棋、井字棋、一条龙、九宫棋等。游戏分为双方对战双方依次在9宫格棋盘上摆放棋子率先将自己的三个棋子连成一条线的一方则视为胜利者 二、文件分装 源文件内含函数实现变量定义等内容 头文件内含函数声明、宏定义、结构体定义等内容  实现这个三子棋我创建了三个文件 源文件 test.c:整个游戏相关的测试 game.c:实现游戏的相关函数 头文件 game.h 相关函数的声明整个代码要引用的头文件以及宏定义 三、代码实现步骤 1.制作简易游戏菜单 1定义一个menu函数来打印游戏菜单菜单中需要有游戏菜单选项1.开始游戏  0.退出游戏当我们输入1就进入游戏0就退出游戏 2考虑到玩家可能玩一局以后还想继续玩就用do while循环打印菜单whileinput当输入的值为0就跳出循环退出游戏如果输入非0值就再次进入循环再次选择 3玩家选择了进入游戏还是退出游戏需要判断就用switch case语句来进行判断 test.c #includegame.h void menu() {printf(*****************************************\n);printf(********** 1.开始游戏 *********\n);printf(********** 0.退出游戏 *********\n);printf(*****************************************\n);}int main() {int input 0;srand((unsigned int)time(NULL));do//实现玩多盘游戏{ menu();//打印菜单printf(请选择1/0:\n);scanf(%d, input);//选择进入游戏/退出游戏switch (input)//判断输入input的值决定是进入游戏还是退出游戏{case 1:game();//三子棋游戏的实现break;case 0:printf(退出游戏\n);break;default:printf(选择错误请重新选择\n);break;}} while (input);//当input为0跳出循环为1再玩一盘游戏(重新进入循环);为其他值进入循环重新选择return 0; } 考虑到game.c和test.c可能都要用printf函数的头文件#includestdio.h,我们直接把这个头文件写进game.h那么test.c这个文件只需引用#inlcludegame.h即可 系统头文件一般用 用户自己定义的则可以使用 ,加快搜索速度 效果展示 选择1进入game 选择0退出游戏 选择非1非0选择错误重新选择  2.初始化棋盘 1首先我们需要定义一个二维数组来存放数据可以采用宏定义 宏定义方便程序的修改如果我们要改变棋盘的大小直接修改宏定义的数字即可 2初始化棋盘我们定义一个InitBoard(board)函数将棋盘全部初始化为 game.h //宏定义 //为了方便直接改变棋盘的大小在头文件里面定义(ROW和COL就是常量) #define ROW 3 //没有逗号 //行 #define COL 3 //列//初始化数组为空格 void InitBoard(char board[ROW][COL]); game.c //初始化数组为空格 void InitBoard(char board[ROW][COL]) {for (int i 0; i ROW; i){for (int j 0; j COL; j){board[i][j] ;//全部初始化为空格}} } 3.打印棋盘 我们想打印这样打一个棋盘用分隔线分开方便观察 (1)先打印数据最后一个不用打印‘|’ (2再打印分割行最后一行不用打印 game.h //打印棋盘 void DisplayBoard(char board[ROW][COL]); game.c //打印棋盘 void DisplayBoard(char board[ROW][COL]) {for (int i 0; i ROW; i){//先打印数据for (int j 0; j COL; j){printf( %c , board[i][j]);if(jCOL-1)//一行的最后一个不打印printf(|);}printf(\n);//再打印分割行(最后一行不打印)if (i ROW - 1)//最后一行不打印{for (int j 0; j COL; j){printf(---);if (j COL - 1)//也是一行的最后一个不打印printf(|);}printf(\n);}} } 4.玩家下棋 注意 1玩家下棋输入坐标要在1-3如果不在这个范围要重新输入而不是数组下标的范围0-2所以放入坐标是输入坐标分别-1得到的结果放入 2玩家下棋我们需要考虑坐标是否已经被占用 3字符的比较可以用既可用于常量也可用于变量比较 字符串的比较要用strcmp函数并且只能用于变量比较 game.h //打印棋盘 void DisplayBoard(char board[ROW][COL]); game.c //玩家下棋 void PlayerMove(char board[ROW][COL]) {int x 0;int y 0;printf(玩家下棋\n);while (1){printf(请输入要下棋的坐标:\n);scanf(%d %d, x, y);if (x 1 x ROW y 1 y COL)//下棋的坐标必须在二维数组内部{if (board[x - 1][y - 1] )//1.输入的横纵坐标-1才是数组的下标 2.字符串的比较不能用但是这只是一个字符空格而已{board[x - 1][y - 1] *;break;}else{printf(该坐标已被占用请输入其他坐标\n);}}else{printf(坐标非法请重新输入\n);}} } 5.电脑随机下棋 电脑随机下棋就需要随机生成两个随机数但是这两个数要在棋盘范围内那就对生成的随机数进行取模x rand() % ROW;产生的数为0-ROW-1这个时候就不用-1了因为电脑下棋不用我们自己输入它就以数组的形式下棋就行 这里介绍三个函数 rand 头文件#includestdlib.h 这个函数返回的是0-rand max之间的值0-32767 在使用rand函数之前我们要求调用srand函数这样才能实现rand的功能 srand 头文件#includestdlib.h 要想生成一个随机数还得给srand一个随机数要想rand函数产生的随机数不同就需要给srand函数输入一个不断改变的值如果只给一个常数那么rand给出的随机数就是同一个值不会改变 srand的参数需要是unsigned int无符号整形egsrand((unsigned int)time(NULL)); time 头文件#includetime.h 原理时间戳把不停在改变的时间转化为数字返回从而给srand一个随机值 game.h //电脑下棋 void ComputerMove(char board[ROW][COL]); game.c //电脑随机下棋 void ComputerMove(char board[ROW][COL]) {int x 0;int y 0;printf(电脑下棋\n);while (1){x rand() % ROW;//产生的数为0-ROW-1y rand() % COL;if (board[x][y] )//如果这个位置已经有棋子了再进入循环重新生成x和y直到下了一个棋子为止{board[x][y] #;break;}} } 6.判断输赢 判断输赢设置四种结果 玩家赢-返回* 电脑赢-# 平局-Q 游戏继续—C game.h //判断输赢 char IsWin(char board[ROW][COL]); game.c //判断输赢四种结果 //玩家赢-返回* //电脑赢-# //平局-Q //游戏继续—C char IsWin(char board[ROW][COL]) {for (int i 0; i ROW; i){if (board[i][0] board[i][1] board[i][0] board[i][2] board[i][0] ! )//注意要排除三个空格的情况return board[i][0];//谁的棋子连着三个就返回谁的棋子}for (int i 0; i COL; i){if (board[0][i] board[1][i] board[0][i] board[2][i] board[0][i] ! )//注意要排除三个空格的情况return board[0][i];//谁的棋子连着三个就返回谁的棋子}if (board[0][0] board[1][1] board[0][0] board[2][2] board[0][0] ! )return board[0][0];if (board[0][2] board[1][1] board[1][1] board[2][0] board[1][1] ! )return board[1][1];if (IsFull(board))return Q;//如果棋盘满了就表示平局返回Qreturn C;//否则就继续下棋} 7.判断棋盘是否满了 遍历二维数组只要有一个空格就继续下棋没满如果都不是空格那就是表示满了 game.h //判断棋盘是否满了 int IsFull(char board[ROW][COL]); game.c //判断棋盘是否是满的 static int IsFull(char board[ROW][COL])//staic表示只在这个game.c的文件中使用这个函数 {for (int i 0; i ROW; i){for (int j 0; j COL; j){if (board[i][j] )//只要有一个空格就继续进行return 0;}}return 1;//如果都不是空格那就是表示全满 } 四、完整代码 game.h(相关函数的声明整个代码要引用的头文件以及宏定义) //头文件内含函数声明、宏定义、结构体定义等内容#includestdio.h #includetime.h #includestdlib.h//宏定义 //为了方便直接改变棋盘的大小在头文件里面定义(ROW和COL就是常量) #define ROW 3 //没有逗号 //行 #define COL 3 //列//函数声明 //初始化数组为空格 void InitBoard(char board[ROW][COL]);//row和col为真实的行和列 //打印棋盘 void DisplayBoard(char board[ROW][COL]); //玩家下棋 void PlayerMove(char board[ROW][COL]); //电脑下棋 void ComputerMove(char board[ROW][COL]); //判断输赢 char IsWin(char board[ROW][COL]); //判断棋盘是否满了 int IsFull(char board[ROW][COL]); game.c(实现游戏的相关函数) //实现游戏相关的代码 #includegame.h//这里也要包含自己定义的头文件不然ROW和COL宏定义就不起作用了//初始化数组为空格 void InitBoard(char board[ROW][COL]) {for (int i 0; i ROW; i){for (int j 0; j COL; j){board[i][j] ;//全部初始化为空格}} }//打印棋盘 void DisplayBoard(char board[ROW][COL]) {for (int i 0; i ROW; i){//先打印数据for (int j 0; j COL; j){printf( %c , board[i][j]);if(jCOL-1)//一行的最后一个不打印printf(|);}printf(\n);//再打印分割行(最后一行不打印)if (i ROW - 1)//最后一行不打印{for (int j 0; j COL; j){printf(---);if (j COL - 1)//也是一行的最后一个不打印printf(|);}printf(\n);}} }//玩家下棋 void PlayerMove(char board[ROW][COL]) {int x 0;int y 0;printf(玩家下棋\n);while (1){printf(请输入要下棋的坐标:\n);scanf(%d %d, x, y);if (x 1 x ROW y 1 y COL)//下棋的坐标必须在二维数组内部{if (board[x - 1][y - 1] )//1.输入的横纵坐标-1才是数组的下标 2.字符串的比较不能用但是这只是一个字符空格而已{board[x - 1][y - 1] *;break;}else{printf(该坐标已被占用请输入其他坐标\n);}}else{printf(坐标非法请重新输入\n);}} }//电脑随机下棋 void ComputerMove(char board[ROW][COL]) {int x 0;int y 0;printf(电脑下棋\n);while (1){x rand() % ROW;//产生的数为0-ROW-1y rand() % COL;if (board[x][y] )//如果这个位置已经有棋子了再进入循环重新生成x和y直到下了一个棋子为止{board[x][y] #;break;}} }//判断棋盘是否是满的 static int IsFull(char board[ROW][COL])//staic表示只在这个game.c的文件中使用这个函数 {for (int i 0; i ROW; i){for (int j 0; j COL; j){if (board[i][j] )//只要有一个空格就继续进行return 0;}}return 1;//如果都不是空格那就是表示全满 }//判断输赢四种结果 //玩家赢-返回* //电脑赢-# //平局-Q //游戏继续—C char IsWin(char board[ROW][COL]) {for (int i 0; i ROW; i){if (board[i][0] board[i][1] board[i][0] board[i][2] board[i][0] ! )//注意要排除三个空格的情况return board[i][0];//谁的棋子连着三个就返回谁的棋子}for (int i 0; i COL; i){if (board[0][i] board[1][i] board[0][i] board[2][i] board[0][i] ! )//注意要排除三个空格的情况return board[0][i];//谁的棋子连着三个就返回谁的棋子}if (board[0][0] board[1][1] board[0][0] board[2][2] board[0][0] ! )return board[0][0];if (board[0][2] board[1][1] board[1][1] board[2][0] board[1][1] ! )return board[1][1];if (IsFull(board))return Q;//如果棋盘满了就表示平局返回Qreturn C;//否则就继续下棋} test.c(:整个游戏相关的测试) game函数的逻辑 1初始化数组并打印出来看看什么样子 2开始下棋玩家先下下完进行打印打印完进行判断输赢如果不是游戏继续就直接跳出循环输出游戏结果玩家赢/电脑赢/平局 3电脑下棋下棋的逻辑一样  //源文件内含函数实现变量定义等内容#includegame.h//系统头文件一般用;用户自己定义的则可以使用 //整个游戏相关的测试 void menu() {printf(*****************************************\n);printf(********** 1.开始游戏 *********\n);printf(********** 0.退出游戏 *********\n);printf(*****************************************\n);}void game() {char ret 0;char board[ROW][COL];//开始的时候数组的内容应该全是空格InitBoard(board);//用于初始化数组为空格DisplayBoard(board);//用于打印棋盘//下棋while (1){PlayerMove(board);//玩家下棋放*DisplayBoard(board);//判断输赢retIsWin(board);if (ret ! C){break;//不是游戏继续就跳出循环输出结果}ComputerMove(board);//电脑随机下棋放#DisplayBoard(board);//判断输赢ret IsWin(board);if (ret ! C){break;}}if (ret *)printf(玩家赢\n);else if (ret #)printf(电脑赢\n);elseprintf(平局\n); } int main() {int input 0;srand((unsigned int)time(NULL));do//实现玩多盘游戏{ menu();//打印菜单printf(请选择1/0:\n);scanf(%d, input);//选择进入游戏/退出游戏switch (input)//判断输入input的值决定是进入游戏还是退出游戏{case 1:game();//三子棋游戏的实现break;case 0:printf(退出游戏\n);break;default:printf(选择错误请重新选择\n);break;}} while (input);//当input为0跳出循环为1再玩一盘游戏(重新进入循环);为其他值进入循环重新选择return 0; } 本次C语言小游戏三子棋的内容就到此啦有什么问题欢迎评论区或者私信交流觉得笔者写的还可以或者自己有些许收获的麻烦铁汁们动动小手给俺来个一键三连万分感谢 !
http://www.sadfv.cn/news/53462/

相关文章:

  • 静态网站是什么样东莞营销型网站开发
  • 遨翔网站建设wordpress网站生成app
  • 网站推广计划书范文500字泰州整站优化
  • 做网站郑州网站运营主要是做什么
  • js网站源码下载网站空间格式asp
  • 河北建设厅安监站官方网站页框 wordpress插件
  • 济南网站建设小程序开发怎样开始学做自媒体
  • 做一份seo网站诊断wordpress苏醒主题
  • 上云网站做等保人力资源公司加盟合作
  • 网站开发 理念怎么写佛山新网站制作
  • 网站全站开发长春网站建设致电吉网传媒优
  • 网站建设的栏目策划怎么做好网络营销推广
  • 怎么创建网站根目录浏览器直接进入网站的注意事项
  • 网站开发和app开发的区别宁波制作网站企业有哪些
  • 长沙做网站找哪家好构建网站需要会什么意思
  • 怎样获得做网站的客户国内做轮胎网站哪家好
  • 优惠券网站要怎么做推广贾汪城乡建设局网站
  • 如何建设红色旅游网站河南省城乡和住房建设厅网站首页
  • 网站如何提交关键词wordpress插件太多
  • iis做网站之vps企业用什么做网站
  • 环保设备网站建设方案腾讯云网站建设教程视频
  • 企业网站模板源码有哪些做外贸不能访问国外网站怎么办
  • 容桂低价网站建设WordPress主题在线生成
  • 珠海市网站开发公司电话中国建设传媒网官网
  • 优化网站要怎么做wordpress 存储空间
  • 佛山网站建设网站建设商业网络
  • 天津网站建设企业系统网站改版的宣传词
  • 网站建设linux网站建设市场多大
  • 网站项目建设措施小礼品网络定制
  • 高州市荷花镇网站建设河池市城乡住房建设厅网站