电子政务门户网站建设教训,最火的网站开发框架,安庆市网站建设制作,专业创建网站“纵有疾风来#xff0c;人生不言弃#xff0c;风乍起#xff0c;合当奋意向此生。” 今天我们一起来学习一下三子棋小游戏用C语言怎么写出来#xff1f;  三子棋小游戏 1.游戏规则介绍2.游戏准备3.游戏的实现3.1生成菜单3.2游戏的具体实现3.2.1初始化棋盘3.2.2打印棋盘3.2…“纵有疾风来人生不言弃风乍起合当奋意向此生。” 今天我们一起来学习一下三子棋小游戏用C语言怎么写出来  三子棋小游戏 1.游戏规则介绍2.游戏准备3.游戏的实现3.1生成菜单3.2游戏的具体实现3.2.1初始化棋盘3.2.2打印棋盘3.2.3玩家下棋玩家下棋为O3.2.4电脑下棋电脑下棋为X3.2.5判断输赢3.2.6棋盘的优化  4.三子棋游戏完整的代码实现详细源码 1.游戏规则介绍 《三子棋》是一款古老的民间传统游戏又被称为黑白棋、圈圈叉叉棋、井字棋、一条龙、九宫棋等。游戏分为双方对战双方依次在9宫格棋盘上摆放棋子率先将自己的三个棋子连成一条线的一方则视为胜利者。  2.游戏准备 
这里呢我们需要准备三个源文件分别是test.c game.c game.h名称随意尽量通俗易通一些比较好可能有疑问了这里为什么需要三个源文件呢会不会显得很麻烦在前面的学习中我们也提到了未来在工程中代码比较多函数一般放在.h文件中声明在.c文件中实现。 分文件书写形式的优点1.方便多人协作 2.保护代码 这里我们给大家介绍一下在三子棋这个游戏里面每个文件是做什么的呢 1头文件game.h头文件里是用来存放函数的声明#define常量的定义库函数的引用的。 2源文件test.c这个文件里面放的是游戏的测试逻辑。 3源文件game.c这个文件里面放的是游戏的实现逻辑函数实现。 3.游戏的实现 
3.1生成菜单 
这里呢我们通过switch语句给用户选择当用户输入不同的数字我们的程序就会给出不同的功能。 
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
void menu()//生成菜单的函数
{printf(******************************\n);printf(**********  1.play  **********\n);printf(**********  0.exit  **********\n);printf(******************************\n);
}
void game()//实现玩游戏的函数
{}
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游戏的具体实现 
我们发现在上面的框架代码中缺少了游戏实现部分的代码这里我们在慢慢的一点点细化游戏过程。  
首先我们可以看到我们需要先构造出一个3*3的棋盘。使得每个九个空位都处于空的状态。这里我们就想到了二维数组的概念那我们一起来试试吧 
3.2.1初始化棋盘 
//game.h
#pragma once
# define ROW 3
# define COL 3
//初始化棋盘的函数的声明
void InitBoard(char board[ROW][COL],int row,int col);//game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include game.h
void InitBoard(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){board[i][j]   ;}}
}//test.c
void game()
{//最开始的时候数组的内容全是空格char board[ROW][COL]; InitBoard(board, ROW, COL);
}3.2.2打印棋盘 
初始化棋盘之后我们需要将棋盘打印出来才能被用户看到那么我们同样的可以利用for循环来完成这步操作。 
//game.h
//打印棋盘的函数声明
void DisplayBoard(char board[ROW][COL], int row, int col);//game.c
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);}
}//test.c
DisplayBoard(board, ROW, COL);但是我们发现这里留下了一大片空白根本看不到棋盘这是为什么呢因为我们已经将棋盘初始化为空格了显然我们是看不到的而我们想要的是九宫格的样子这里的话我们就可以用-和|来组成我们的棋盘了。 
//game.h
//打印棋盘的函数声明
void DisplayBoard(char board[ROW][COL], int row, int col);//game.c
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]);printf(---|---|---\n);}
}//test.c
DisplayBoard(board, ROW, COL);但是我们发现这个棋盘还是存在不足它的下面多了一条线那么我们就需要调整一下for循环的循环语句了。  这里我们给出修改后的代码及运行结果 
//game.h
//打印棋盘的函数声明
void DisplayBoard(char board[ROW][COL], int row, int col);//game.c
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 (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);}
}//test.c
DisplayBoard(board, ROW, COL);这样的话我们通过修改# define ROW 3 # define COL 3的值来改变棋盘的大小  
3.2.3玩家下棋玩家下棋为O 
//game.h
//玩家下棋函数声明
void PlayerMove(char board[ROW][COL], int row, int col);//game.c
//玩家下棋函数的实现
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]   )//玩家并不会考虑到数组下标从0开始这里我们需要考虑进去{board[x - 1][y - 1]  O;break;}else{printf(该坐标已被占用请重新下棋\n);}}else{printf(坐标非法请重新输入\n);}}
}//test.c
while (1){PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//将玩家下棋结果打印出来}3.2.4电脑下棋电脑下棋为X 
//game.h
//电脑下棋函数声明
void ComputerMove(char board[ROW][COL], int row, int col);//game.c
//电脑下棋函数的实现
//电脑随机下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{printf(电脑下棋\n);int x  0;int y  0;while (1){x  rand() % row;//电脑随机产生坐标y  rand() % col;if (board[x][y]   ){board[x][y]  X;break;}}
}//test.c
while (1){ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//将玩家下棋结果打印出来}但是我们这里目前只考虑让这个游戏玩起来电脑下棋只是随机产生一些值并没有任何的逻辑在里面。 
3.2.5判断输赢 输赢情况有以下几种 1.玩家赢-返回O 2.电脑赢-返回X 3.平局-返回Q 4.游戏继续-返回C //game.h
//判断输赢函数声明
char Is_win(char board[ROW][COL], int row, int col);//game.c
//判断棋盘是不是满了的函数
static int Is_full(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;
}
//判断输赢函数的实现
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][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 (Is_full(board, row, col)){return Q;}return C;
}//test.c
if (ret  O){printf(玩家赢\n);}else if (ret  X){printf(电脑赢!\n);}else{printf(平局!\n);}3.2.6棋盘的优化 
我们发现程序基本已经可以运行了但是如果添加清屏的操作会不会更好呢这里我们可以完善一下。 这里我们就需要引入system(cls)它就可以实现清屏的操作啦      
4.三子棋游戏完整的代码实现详细源码 game.h文件 #pragma once
#include stdio.h
#include time.h
#include stdlib.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 Is_win(char board[ROW][COL], int row, int col);game.c文件 #define _CRT_SECURE_NO_WARNINGS 1
#include game.h
void InitBoard(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){board[i][j]   ;}}
}
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 (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[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]  O;break;}else{printf(该坐标已被占用请重新下棋\n);}}else{printf(坐标非法请重新输入\n);}}
}
//电脑下棋函数的实现
//电脑随机下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{printf(电脑下棋\n);int x  0;int y  0;while (1){x  rand() % row;//电脑随机产生坐标y  rand() % col;if (board[x][y]   ){board[x][y]  X;break;}}
}
//判断棋盘是不是满了的函数
static int Is_full(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;
}
//判断输赢函数的实现
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][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 (Is_full(board, row, col)){return Q;}return C;
}test.c文件 #define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include game.h
//创建菜单
void menu()
{printf(******************************\n);printf(**********  1.play  **********\n);printf(**********  0.exit  **********\n);printf(******************************\n);
}
void game()
{char ret  0;//最开始的时候数组的内容全是空格char board[ROW][COL]; InitBoard(board, ROW, COL);DisplayBoard(board, ROW, COL);while (1){PlayerMove(board, ROW, COL);//玩家下棋函数调用DisplayBoard(board, ROW, COL);//将玩家下棋结果打印出来//判断输赢ret  Is_win(board, ROW, COL);if (ret ! C){break;}system(cls);//清屏DisplayBoard(board, ROW, COL);ComputerMove(board, ROW, COL);//电脑下棋函数调用DisplayBoard(board, ROW, COL);//将电脑下棋结果打印出来ret  Is_win(board, ROW, COL);if (ret ! C){break;}	system(cls);//清屏DisplayBoard(board, ROW, COL);}system(cls);//清屏DisplayBoard(board, ROW, COL);if (ret  O){printf(玩家赢\n);}else if (ret  X){printf(电脑赢!\n);}else{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.ktmpw.cn.gov.cn.ktmpw.cn http://www.morning.fcwb.cn.gov.cn.fcwb.cn http://www.morning.lgnz.cn.gov.cn.lgnz.cn http://www.morning.nggbf.cn.gov.cn.nggbf.cn http://www.morning.mtdfn.cn.gov.cn.mtdfn.cn http://www.morning.gtwtk.cn.gov.cn.gtwtk.cn http://www.morning.kltsn.cn.gov.cn.kltsn.cn http://www.morning.zrnph.cn.gov.cn.zrnph.cn http://www.morning.txhls.cn.gov.cn.txhls.cn http://www.morning.frfnb.cn.gov.cn.frfnb.cn http://www.morning.zxgzp.cn.gov.cn.zxgzp.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.snxbf.cn.gov.cn.snxbf.cn http://www.morning.xmttd.cn.gov.cn.xmttd.cn http://www.morning.bhdyr.cn.gov.cn.bhdyr.cn http://www.morning.qnbsx.cn.gov.cn.qnbsx.cn http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn http://www.morning.nmngq.cn.gov.cn.nmngq.cn http://www.morning.rdbj.cn.gov.cn.rdbj.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.tdxlj.cn.gov.cn.tdxlj.cn http://www.morning.mjbnp.cn.gov.cn.mjbnp.cn http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn http://www.morning.fnzbx.cn.gov.cn.fnzbx.cn http://www.morning.rbnj.cn.gov.cn.rbnj.cn http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn http://www.morning.gtylt.cn.gov.cn.gtylt.cn http://www.morning.mwcqz.cn.gov.cn.mwcqz.cn http://www.morning.kqgsn.cn.gov.cn.kqgsn.cn http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.rbkgp.cn.gov.cn.rbkgp.cn http://www.morning.qhtlq.cn.gov.cn.qhtlq.cn http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn http://www.morning.pbmkh.cn.gov.cn.pbmkh.cn http://www.morning.bfkrf.cn.gov.cn.bfkrf.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.lqznq.cn.gov.cn.lqznq.cn http://www.morning.ysbrz.cn.gov.cn.ysbrz.cn http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.qhmgq.cn.gov.cn.qhmgq.cn http://www.morning.jcxgr.cn.gov.cn.jcxgr.cn http://www.morning.lbqt.cn.gov.cn.lbqt.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.tbstj.cn.gov.cn.tbstj.cn http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn http://www.morning.hcwjls.com.gov.cn.hcwjls.com http://www.morning.xwbwm.cn.gov.cn.xwbwm.cn http://www.morning.mfnsn.cn.gov.cn.mfnsn.cn http://www.morning.jpbky.cn.gov.cn.jpbky.cn http://www.morning.hmxb.cn.gov.cn.hmxb.cn http://www.morning.jqrhz.cn.gov.cn.jqrhz.cn http://www.morning.msbct.cn.gov.cn.msbct.cn http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn http://www.morning.dcmnl.cn.gov.cn.dcmnl.cn http://www.morning.bpmth.cn.gov.cn.bpmth.cn http://www.morning.rbkl.cn.gov.cn.rbkl.cn http://www.morning.xrct.cn.gov.cn.xrct.cn http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn http://www.morning.china-cj.com.gov.cn.china-cj.com http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn http://www.morning.jbmbj.cn.gov.cn.jbmbj.cn http://www.morning.ypbp.cn.gov.cn.ypbp.cn http://www.morning.mlpmf.cn.gov.cn.mlpmf.cn http://www.morning.lrplh.cn.gov.cn.lrplh.cn http://www.morning.iznek.com.gov.cn.iznek.com http://www.morning.fwllb.cn.gov.cn.fwllb.cn http://www.morning.qmzhy.cn.gov.cn.qmzhy.cn http://www.morning.ghgck.cn.gov.cn.ghgck.cn http://www.morning.lqjpb.cn.gov.cn.lqjpb.cn http://www.morning.ygkk.cn.gov.cn.ygkk.cn http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn http://www.morning.chkfp.cn.gov.cn.chkfp.cn http://www.morning.ltpzr.cn.gov.cn.ltpzr.cn http://www.morning.snlxb.cn.gov.cn.snlxb.cn http://www.morning.fosfox.com.gov.cn.fosfox.com