C++实现三子棋游戏详细介绍(附代码)
简介
本文将介绍如何使用C++语言来实现一个简单的三子棋游戏。三子棋游戏是一种经典的小游戏,规则简单玩法有趣。在这个游戏中,两个玩家将轮流在一个3x3的棋盘上放置自己的棋子,若某个玩家在横、竖、斜三个方向上连续地放置了三个自己的棋子,则该玩家获胜。本文的实现将包括游戏引擎和用户界面,读者可以直接运行实现好的程序进行游戏。
游戏引擎实现
游戏引擎的任务是实现游戏逻辑,即判断玩家是否获胜以及判断棋盘是否已满。在本篇实现中,游戏引擎通过一个3x3的二维字符数组表示棋盘。下面是一些关键的函数实现:
初始化棋盘
void initBoard(char board[3][3]) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
board[i][j] = ' ';
}
}
}
该函数用于将棋盘的所有格子初始化为空格字符。
标记落子
bool markMove(char board[3][3], int row, int col, char piece) {
if (row<0 || row>2 || col<0 || col>2 || board[row][col]!=' ') {
return false;
} else {
board[row][col] = piece;
return true;
}
}
该函数用于标记玩家落子。如果玩家尝试在一个已经放了棋子的格子上继续放棋子,或者玩家尝试放在棋盘外面,函数将返回false。否则,函数将在玩家想要放置的格子上放置一个棋子,并返回true。
判断胜负
bool checkWin(char board[3][3]) {
for (int i=0; i<3; i++) {
if (board[i][0]==board[i][1] && board[i][1]==board[i][2] && board[i][0]!=' ') {
return true;
}
}
for (int j=0; j<3; j++) {
if (board[0][j]==board[1][j] && board[1][j]==board[2][j] && board[0][j]!=' ') {
return true;
}
}
if (board[0][0]==board[1][1] && board[1][1]==board[2][2] && board[0][0]!=' ') {
return true;
}
if (board[0][2]==board[1][1] && board[1][1]==board[2][0] && board[0][2]!=' ') {
return true;
}
return false;
}
该函数用于判断玩家是否获胜。对于任意一个格子,如果该格子在横、竖、斜三个方向上均和其他两个相邻格子的棋子相同,则该玩家获胜。
判断平局
bool checkTie(char board[3][3]) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
if (board[i][j] == ' ') {
return false;
}
}
}
return true;
}
该函数用于判断棋盘是否已满,即平局。函数直接检查每个格子是否已经被落子,如果所有格子都已经被落子,就返回true。
用户界面实现
用户界面的任务是获取玩家的输入并将其传递给游戏引擎。在本篇实现中,我们将使用控制台进行用户界面的交互。下面是一些关键的函数实现:
输出棋盘
void printBoard(char board[3][3]) {
for (int i=0; i<3; i++) {
cout << " " << board[i][0] << " | " << board[i][1] << " | " << board[i][2] << " " << endl;
if (i!=2) {
cout << "---|---|---" << endl;
}
}
}
该函数用于将棋盘输出到控制台上。注意,该函数并没有处理行末的换行符,输出完毕后需要手动换行。
获取玩家输入
void getMove(int& row, int& col) {
cout << "Enter a row (0, 1, 2) and column (0, 1, 2), separated by a space: ";
cin >> row >> col;
}
该函数用于获取玩家的输入。函数会提示玩家输入行数和列数,然后将输入保存到传入的引用参数中。
游戏主循环
void gameLoop() {
char board[3][3];
initBoard(board);
bool playerOne = true;
bool gameOver = false;
while (!gameOver) {
system("cls");
cout << "Current board:" << endl;
printBoard(board);
int row, col;
getMove(row, col);
if (playerOne) {
if (markMove(board, row, col, 'X')) {
playerOne = false;
}
} else {
if (markMove(board, row, col, 'O')) {
playerOne = true;
}
}
if (checkWin(board)) {
gameOver = true;
system("cls");
cout << "Current board:" << endl;
printBoard(board);
if (playerOne) {
cout << "Player 2 (O) wins!" << endl;
} else {
cout << "Player 1 (X) wins!" << endl;
}
} else if (checkTie(board)) {
gameOver = true;
system("cls");
cout << "Current board:" << endl;
printBoard(board);
cout << "Tie game!" << endl;
}
}
}
该函数是游戏的主循环。在游戏循环开始时,程序将初始化棋盘,并设定先手玩家为玩家1。然后,程序将执行以下步骤:
- 清空控制台屏幕,输出当前棋盘状态;
- 获取玩家输入;
- 如果是玩家1的回合,则在输入的位置放置一个X,否则在输入的位置放置一个O;
- 判断游戏是否结束,如果是,输出胜负结果并结束游戏循环;否则重新进行下一轮循环。
示例
示例一:开始游戏
程序启动后,将出现如下提示:
Current board:
| |
---|---|---
| |
---|---|---
| |
Enter a row (0, 1, 2) and column (0, 1, 2), separated by a space:
此时玩家可以在控制台中输入行数和列数,程序将在对应的位置放置一个棋子,并切换到另一个玩家的回合。如下:
Current board:
X | |
---|---|---
| |
---|---|---
| |
Enter a row (0, 1, 2) and column (0, 1, 2), separated by a space:
程序将在不停顿的情况下一直运作,直到游戏结束。
示例二:平局
当棋盘被下满后,程序将出现如下状态:
Current board:
O | O | X
---|---|---
X | X | O
---|---|---
O | X | O
Tie game!
此时程序将精确地判断出平局的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现三子棋游戏详细介绍(附代码) - Python技术站