国外的服务器网站,pycharm 做网站,荥阳网页设计,网站开发项目质量控制措施目录 引言#xff1a;
1.游戏规则#xff1a;
2.实现步骤#xff1a;
2.1实现菜单#xff1a;
2.2创建棋盘并初始化#xff1a;
2.3绘制棋盘#xff1a;
2.4玩家落子#xff1a;
2.5电脑落子#xff1a;
2.6判断胜负#xff1a; 3.源码#xff1a;
结语
1.游戏规则
2.实现步骤
2.1实现菜单
2.2创建棋盘并初始化
2.3绘制棋盘
2.4玩家落子
2.5电脑落子
2.6判断胜负 3.源码
结语 引言 《三子棋》是一款古老的民间传统游戏又被称为OOXX棋、黑白棋井字棋九宫棋等。游戏分为双方对战双方依次在九宫格棋盘上摆放棋子率先将自己的三个棋子连成一条线的一方则为胜利者。 1.游戏规则 三子棋是一种两人对战的游戏棋盘是一个3x3的方格矩阵。玩家和电脑轮流在空白的方格中落子一方执X另一方执O。当玩家在横向、纵向或对角线上连成三个相同的棋子时该玩家获胜反之电脑获胜。如果棋盘填满而无法连成三子游戏结束双方平局。 2.实现步骤
想要完整的实现三子棋代码我们首先必须在脑海里构建出一个大致的框架然后再去一步步实现它里边的细节。 实现进入游戏的菜单界面创建棋盘并初始化绘制棋盘打印棋盘玩家落子电脑落子判断胜负 2.1实现菜单
void menu()
{printf(*******************\n);printf(**** 1.play ****\n);printf(**** 0.exit ****\n);printf(*******************\n);
}
2.2创建棋盘并初始化 首先我们需要创建一个3x3的二维数组来表示棋盘但考虑到这样不灵活那么我们可以使用宏定义的方式来使我们的代码变得更加易于维护。 #define ROW 3//行
#define COL 3//列
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] ;}}
}
2.3绘制棋盘 最终呈现在玩家眼里的棋盘应该是由分割线和空位置组成的。 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){for (j 0; j col; j){printf(---);if (j col - 1)printf(|);}}printf(\n);}
}
2.4玩家落子 当玩家下棋时他眼里的坐标只有123行而在计算机中数组是通过下标访问的是从0开始的所以在写代码时应该将玩家输入的坐标减去1才合适。还应该对玩家输入的坐标进行判断看有没有越界访问以及判断棋子有没有被占用。 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] X;break;}else{printf(坐标被占用请重新输入\n);}}elseprintf(坐标非法请重新输入\n);}
}
2.5电脑落子 利用rand函数生成的随机数再模个行和列输入坐标实现落子电脑落子也要判断落子点是否被占用。 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] O;break;}}
}
2.6判断胜负
我们规定 玩家赢返回 X电脑赢返回 O平局返回 Q以上三种情况都不是即游戏继续返回 C //未分出胜负并且所有元素都不为空格则为平局
static 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;
}//玩家赢 X
//电脑赢 O
//平局 Q
//游戏继续 C
char 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][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 (IsFull(board, row, col)){return Q;}return C;
} 3.源码
为了让代码逻辑更清晰更易于调试我们可以将整个三子棋代码分为三个文件。 主函数main.c实现游戏的进入和退出功能。游戏实现函数game.c思考游戏的逻辑并构建函数通过调用一系列函数来实现整个游戏。游戏实现头文件game.h定义宏并声明游戏实现函数中的各个函数。 (main.c) #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 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 X){printf(玩家赢\n);}else if (ret O){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;
} (game.c) #include game.hvoid 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){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] X;break;}else{printf(坐标被占用请重新输入\n);}}elseprintf(坐标非法请重新输入\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] O;break;}}
}static 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;
}//玩家赢 返回X
//电脑赢 返回O
//平局 返回Q
//游戏继续 返回C
char 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][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 (IsFull(board, row, col)){return Q;}return C;
} (game.h) #pragma once
#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);
结语 通过本篇博客我们学习了如何使用C语言实现三子棋游戏。通过实现菜单、创建棋盘并初始化棋盘、绘制棋盘、玩家落子、电脑落子、判断胜负等步骤我们成功完成了这个有趣的项目。希望本篇博客对初学者和有一定编程经验的佬佬都能有所帮助最后祝大家玩得愉快呀