最便宜的网站建设公司,南安seo快速排名,网站建站需要什么,网站建设基础问题大家好#xff0c;我是你们熟悉的恒川 今天我们用C语言来实现三子棋 实现的过程很难#xff0c;但我们一定要不放弃 三子棋1. 配置运行环境2. 三子棋游戏的初步实现2.1 建立三子棋分布模块2.2 创建一个名为board的二维数组并进行初始化2.3 搭建棋盘3. 接下来该讨论的事情3.1 … 大家好我是你们熟悉的恒川 今天我们用C语言来实现三子棋 实现的过程很难但我们一定要不放弃 三子棋1. 配置运行环境2. 三子棋游戏的初步实现2.1 建立三子棋分布模块2.2 创建一个名为board的二维数组并进行初始化2.3 搭建棋盘3. 接下来该讨论的事情3.1 目前现在三子棋整体代码的样子3.1.1 game.h3.1.2 game.c3.1.3 三子棋做法.c3.2 玩家下棋打印新的棋盘3.3 电脑下棋并打印新的棋盘3.4 判断最终的结果4. 完整三子棋游戏程序的实现4.1 game.h4.2 game.c4.3 三子棋做法.c1. 配置运行环境 本游戏用到了三个文件 两个源文件三子棋做法.c game.c 一个头文件game.h 2. 三子棋游戏的初步实现 
2.1 建立三子棋分布模块 想要做好游戏首要任务就是要把模块想好。 先打印一个游戏菜单 void menu()
{printf(********************************\n);printf(**********  1.play   ***********\n);printf(**********  0.exit   ***********\n);printf(********************************\n);
}玩家选择是否1\0是否进入游戏 #include stdio.h
void menu()
{printf(********************************\n);printf(**********  1.play   ***********\n);printf(**********  0.exit   ***********\n);printf(********************************\n);
}
int main()
{int input  0;do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:printf(三子棋\n);break;case 2:printf(选择错误请重新选择\n);break;default:break;}} while (input);return 0;
}2.2 创建一个名为board的二维数组并进行初始化 数组类型为char char board[ ][ ]  { 0 }; void InitBoard(char board[ROW][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]   ;}}
}另一种写法但要包含头文件string.h 
memset(board[0][0],  , row * col * sizeof(board[0][0]));2.3 搭建棋盘 在game.c文件中实现棋盘的搭建功能 错误代码的两种形式 
1. void DisplayBoard(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){printf(%c , board[i][j]);}printf(\n);}
}2. void DisplayBoard(char board[ROW][COL], int row, int col)
{int i  0;int j  0;for (i  0; i  row; i){printf( %c | %c | %c \n, board[i][0], board[i][1], board[i][2]);if(i  row-1)printf(---|---|---\n);}
}能正确搭建功能的棋盘可以灵活创建棋盘大小改变宏定义的变量 
void DisplayBoard(char board[ROW][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(jcol-1)printf(|);}printf(\n);//打印分割的行if (i  row - 1){for (j  0; j  col; j){printf(---);if (j  col - 1)printf(|);}printf(\n);}}
}该代码的目的是构建完成打印出的棋盘大概形状就是一个“井”框架。 3. 接下来该讨论的事情 
玩家下棋打印棋盘判断输赢电脑下棋打印棋盘判断输赢 
3.1 目前现在三子棋整体代码的样子 
3.1.1 game.h 
//头文件的包含
#include string.h
#include stdio.h#define ROW 3
#define COL 3//函数的声明//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col); 
3.1.2 game.c 
#include game.hvoid InitBoard(char board[ROW][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]   ;}}//memset(board[0][0],  , row*col*sizeof(board[0][0]));
}
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i  0;int j  0;for (i  0; i  row; i){int j  0;for (j  0; j  col; j){printf( %c , board[i][j]);if(jcol-1)printf(|);}printf(\n);if (i  row - 1){for (j  0; j  col; j){printf(---);if(jcol-1)printf(|);}}printf(\n);}
}3.1.3 三子棋做法.c 
#include game.hvoid menu()
{printf(*******************************\n);printf(********    1. play      ******\n);printf(********    0. exit      ******\n);printf(*******************************\n);
}void game()
{//存放数据需要一个3*3的二维数组char board[ROW][COL]  {0};//初始化棋盘InitBoard(board, ROW, COL);//显示棋盘DisplayBoard(board, ROW, COL);while (1){//玩家下棋//打印棋盘//判断输赢//电脑下棋//打印棋盘//判断输赢}
}int main()
{int input  0;do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出游戏\n);break;default:printf(选择错误重新选择\n);break;}} while (input);return 0;
}3.2 玩家下棋打印新的棋盘 在game文件中实现对棋盘上空位的判断防止一个位置多次下棋并且显示出空位给玩家下棋之后打印出新的棋盘。 void player_move(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(坐标非法请重新输入\n);}}
}3.3 电脑下棋并打印新的棋盘 玩家选择一个位置打印后电脑通过rand()函数产生一个在限定范围内的的随机值并产生一个随机坐标并在相应坐标打印一个字符电脑下棋过程滞后打印新的棋盘。 void computer_move(char board[ROW][COL], int row, int col)
{int x  0;int y  0;printf(电脑下棋:\n);while (1){x  rand() % row;//模3结果为0~2y  rand() % col;//模3结果为0~2if (board[x][y]   ){board[x][y]  #;break;}}
}3.4 判断最终的结果 在多次进行 玩家—电脑—玩家…的循环之后产生最终的结果这时候对结果进行分析相同的3个字符相连行 列 对角线即为胜利如果棋盘已满也为产生胜利者即为平局。 char is_win(char board[ROW][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][1] !  ){return board[i][1];}}//判断列for (i  0; i  col; i){if (board[0][i]  board[1][i]  board[1][i]  board[2][i]  board[1][i] !  ){return board[1][i];}}//对角线if (board[0][0]  board[1][1]  board[1][1]  board[2][2]  board[1][1] !  ){return board[1][1];}if (board[0][2]  board[1][1]  board[1][1]  board[2][0]  board[1][1] !  ){return board[1][1];}//判断平局if (if_full(board, row, col)  1){return Q;}//继续return C;
}上面代码第一段判断棋盘是否满了把结果返回给第二段代码中的函数第二段代码中的函数判断最后的结果玩家赢 \ 电脑赢 \平局并把相应的字符返回到 三子棋做法.c文件中判断并打印最后结果的函数中去。 打印结果 如果结果是C将不进入if判断语句中。 if (ret  *){printf(玩家赢了\n);}else if (ret  #){printf(电脑赢了\n);}else{printf(平局\n);}4. 完整三子棋游戏程序的实现 
4.1 game.h 
//头文件的包含
#include string.h
#include stdio.h
#include stdlib.h
#include time.h#define ROW 3
#define COL 3//函数的声明//初始化棋盘
void 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);//判断输赢
char IsWin(char board[ROW][COL],int row, int col);4.2 game.c 
#include game.hvoid InitBoard(char board[ROW][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]   ;}}//memset(board[0][0],  , row*col*sizeof(board[0][0]));
}void DisplayBoard(char board[ROW][COL], int row, int col)
{int i  0;int j  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){for (j  0; j  col; j){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(坐标非法请重新输入\n);}}
}//电脑随机下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{int x  0;int y  0;printf(电脑下棋:\n);while (1){x  rand() % row;y  rand() % col;if (board[x][y]   ){board[x][y]  #;break;}}
}int IsFull(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;
}//判断输赢
//玩家赢 - *
//电脑赢 - #
//平局   - Q
//继续   - Cchar IsWin(char board[ROW][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[1][1] !  ){return board[1][1];}if (board[0][2]  board[1][1]  board[1][1]  board[2][0]  board[1][1] !  ){return board[1][1];}//判断是否平局if (IsFull(board, row, col)){return Q;}//游戏继续return C;
} 
4.3 三子棋做法.c 
#include game.hvoid menu()
{printf(*******************************\n);printf(********    1. play      ******\n);printf(********    0. exit      ******\n);printf(*******************************\n);
}void game()
{//存放数据需要一个3*3的二维数组char board[ROW][COL]  { 0 };//初始化棋盘InitBoard(board, ROW, COL);//显示棋盘DisplayBoard(board, ROW, COL);char ret  0;while (1){//玩家下棋PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断输赢ret  IsWin(board, ROW, COL);if (ret ! C){break;}//电脑下棋ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断输赢ret  IsWin(board, ROW, COL);if (ret ! C){break;}}if (*  ret){printf(玩家赢\n);}else if (#  ret){printf(电脑赢\n);}else if (Q  ret){printf(平局\n);}
}int main()
{int input  0;srand((unsigned int)time(NULL));do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出游戏\n);break;default:printf(选择错误重新选择\n);break;}} while (input);return 0;
} 如果这份博客对大家有帮助希望各位给恒川一个免费的点赞作为鼓励并评论收藏一下谢谢大家 制作不易如果大家有什么疑问或给恒川的意见欢迎评论区留言。 
 文章转载自: http://www.morning.clybn.cn.gov.cn.clybn.cn http://www.morning.gwjnm.cn.gov.cn.gwjnm.cn http://www.morning.tpnxj.cn.gov.cn.tpnxj.cn http://www.morning.tkchg.cn.gov.cn.tkchg.cn http://www.morning.cpqwb.cn.gov.cn.cpqwb.cn http://www.morning.kqylg.cn.gov.cn.kqylg.cn http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn http://www.morning.dgwrz.cn.gov.cn.dgwrz.cn http://www.morning.blznh.cn.gov.cn.blznh.cn http://www.morning.ydwsg.cn.gov.cn.ydwsg.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.stprd.cn.gov.cn.stprd.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.rbnnq.cn.gov.cn.rbnnq.cn http://www.morning.bmlcy.cn.gov.cn.bmlcy.cn http://www.morning.qztsq.cn.gov.cn.qztsq.cn http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn http://www.morning.phxdc.cn.gov.cn.phxdc.cn http://www.morning.cpqqf.cn.gov.cn.cpqqf.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.qbgdy.cn.gov.cn.qbgdy.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn http://www.morning.pdmml.cn.gov.cn.pdmml.cn http://www.morning.mmhaoma.com.gov.cn.mmhaoma.com http://www.morning.smfbw.cn.gov.cn.smfbw.cn http://www.morning.pwfwk.cn.gov.cn.pwfwk.cn http://www.morning.hrjrt.cn.gov.cn.hrjrt.cn http://www.morning.rkwwy.cn.gov.cn.rkwwy.cn http://www.morning.wcrcy.cn.gov.cn.wcrcy.cn http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.mgnrc.cn.gov.cn.mgnrc.cn http://www.morning.xlbyx.cn.gov.cn.xlbyx.cn http://www.morning.lndongguan.com.gov.cn.lndongguan.com http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.nj-ruike.cn.gov.cn.nj-ruike.cn http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.bkkgt.cn.gov.cn.bkkgt.cn http://www.morning.rgmls.cn.gov.cn.rgmls.cn http://www.morning.jcxgr.cn.gov.cn.jcxgr.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn http://www.morning.nlkhr.cn.gov.cn.nlkhr.cn http://www.morning.tmpsc.cn.gov.cn.tmpsc.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.wmhqd.cn.gov.cn.wmhqd.cn http://www.morning.lthpr.cn.gov.cn.lthpr.cn http://www.morning.hpmzs.cn.gov.cn.hpmzs.cn http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn http://www.morning.ryxbz.cn.gov.cn.ryxbz.cn http://www.morning.qwbht.cn.gov.cn.qwbht.cn http://www.morning.fbrshjf.com.gov.cn.fbrshjf.com http://www.morning.pjjkz.cn.gov.cn.pjjkz.cn http://www.morning.hbkkc.cn.gov.cn.hbkkc.cn http://www.morning.csxlm.cn.gov.cn.csxlm.cn http://www.morning.ztrht.cn.gov.cn.ztrht.cn http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn http://www.morning.mfltz.cn.gov.cn.mfltz.cn http://www.morning.xgjhy.cn.gov.cn.xgjhy.cn http://www.morning.datadragon-auh.cn.gov.cn.datadragon-auh.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn http://www.morning.jkrrg.cn.gov.cn.jkrrg.cn http://www.morning.xhjjs.cn.gov.cn.xhjjs.cn http://www.morning.zycll.cn.gov.cn.zycll.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.lhxdq.cn.gov.cn.lhxdq.cn http://www.morning.kzxlc.cn.gov.cn.kzxlc.cn http://www.morning.yrflh.cn.gov.cn.yrflh.cn http://www.morning.qynnw.cn.gov.cn.qynnw.cn http://www.morning.haibuli.com.gov.cn.haibuli.com http://www.morning.rszt.cn.gov.cn.rszt.cn http://www.morning.zcmpk.cn.gov.cn.zcmpk.cn http://www.morning.mlgsc.com.gov.cn.mlgsc.com