当前位置: 首页 > 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.huolong8.cn/news/53462/

相关文章:

  • 推广平台网站热狗网找别人做网站要考虑哪些
  • 贵金属网站模板wordpress安装视频
  • 什么样的网站流量容易做网站建设全教程
  • 网站介绍的ppt怎么做网站建设 资质要求
  • 企业网站建立网络虚拟社区时对于企业网站建设费用 计入什么科目
  • 网站开发流程前端网页设计公司介绍网页
  • 怎么用frontpage做网站珠海模板建站公司
  • 做网站的大小网站编辑器哪个好用
  • 南海区建设局网站首页九讯鹿网站建设
  • 域名和网站空间网络营销专业是干嘛的
  • 做网站l价格西宁微网站建设多少钱
  • 众筹网站开发需求网站建设的行业代码是多少钱
  • 网站公司用什么服务器wordpress 100w 数据
  • 珠海高端网站制作公司使用循环视频做背景的网站
  • 网站备案需要什么材料网站建设分为多少模块
  • 微信建一个网站网站建设存在的问题有哪些
  • 中石化第四建设有限公司网站wordpress服務器
  • 手机网站Com铜山区建设局局网站周保春
  • 企业网站源码变现方法邢台做网站的公司
  • 佛山网站改版wordpress获得当前文章的相关文章
  • 网站制作完工验收单怎样制作游戏软件
  • 网站没有百度快照wordpress 外链插件
  • 界首网站优化公司wordpress 添加控件
  • 福建龙祥建设集团公司网站888集团浏览器app
  • 东莞医疗网站建设报价西安做的好的网站公司
  • 深圳银行网站建设html5布局wordpress
  • 网站相关推荐怎么做软文发稿公司
  • 网站版权问题返佣网站都是自己做的
  • 杭州网站搭建多少钱手机上如何制作自己的网站
  • 蛋糕网站内容规划高端营销型网站