名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波·莫听穿林打叶声》
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
目录
- 一、效果图
- 二、代码(带注释)
- 三、说明
一、效果图
二、代码(带注释)
#include <iostream>
#include <vector>using namespace std;const int BOARD_SIZE = 15; // 定义棋盘大小为 15x15
vector<vector<char>> board(BOARD_SIZE, vector<char>(BOARD_SIZE, '.')); // 初始化棋盘,所有位置都是空的(用'.'表示)// 打印棋盘的函数
void printBoard() {for (int i = 0; i < BOARD_SIZE; ++i) {for (int j = 0; j < BOARD_SIZE; ++j) {cout << board[i][j] << " ";}cout << endl;}
}// 落子的函数
bool makeMove(int x, int y, char player) {// 检查落子的位置是否有效if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || board[x][y] != '.') {return false;}board[x][y] = player; // 在指定位置放置玩家的棋子return true;
}// 检查是否赢得比赛的函数
bool checkWin(int x, int y) {char player = board[x][y];int count;// 水平方向检查count = 1;for (int i = x - 1; i >= 0 && board[i][y] == player; --i) count++;for (int i = x + 1; i < BOARD_SIZE && board[i][y] == player; ++i) count++;if (count >= 5) return true;// 垂直方向检查count = 1;for (int i = y - 1; i >= 0 && board[x][i] == player; --i) count++;for (int i = y + 1; i < BOARD_SIZE && board[x][i] == player; ++i) count++;if (count >= 5) return true;// 对角线检查(左上到右下)count = 1;for (int i = 1; x - i >= 0 && y - i >= 0 && board[x - i][y - i] == player; ++i) count++;for (int i = 1; x + i < BOARD_SIZE && y + i < BOARD_SIZE && board[x + i][y + i] == player; ++i) count++;if (count >= 5) return true;// 对角线检查(左下到右上)count = 1;for (int i = 1; x - i >= 0 && y + i < BOARD_SIZE && board[x - i][y + i] == player; ++i) count++;for (int i = 1; x + i < BOARD_SIZE && y - i >= 0 && board[x + i][y - i] == player; ++i) count++;if (count >= 5) return true;return false;
}// 检查棋盘是否已满的函数
bool isBoardFull() {for (int i = 0; i < BOARD_SIZE; ++i) {for (int j = 0; j < BOARD_SIZE; ++j) {if (board[i][j] == '.') {return false;}}}return true;
}// 主函数
int main() {int x, y;char currentPlayer = 'X'; // 初始玩家while (true) {printBoard(); // 打印棋盘cout << "玩家" << currentPlayer << ", 输入行列的来放入棋子: ";cin >> x >> y;if (makeMove(x, y, currentPlayer)) { // 尝试落子if (checkWin(x, y)) { // 检查是否赢得比赛cout << "玩家 " << currentPlayer << " wins!" << endl;break;} else if (isBoardFull()) { // 检查是否平局cout << "平局了!" << endl;break;}currentPlayer = (currentPlayer == 'X') ? 'O' : 'X'; // 更换玩家} else {cout << "无效移动,请重新尝试" << endl;}}return 0;
}
三、说明
上述代码实现了一个简单的棋盘游戏,适用于两位玩家,棋盘大小:15x15。关于实现思路和自定义函数说明如下:
-
棋盘初始化:棋盘是一个15x15的网格,初始化时用’.'表示空位。
-
打印棋盘:
printBoard()
函数打印当前棋盘的状态。 -
落子:
makeMove()
函数允许玩家在棋盘上放置他们的符号(‘X’或’O’),前提是所选单元格为空。 -
检查胜利:
checkWin()
函数检查玩家的最后一个动作是否赢得了游戏。它水平、垂直和对角线(两个方向)检查是否有连续的5个相同符号。 -
检查棋盘是否已满:
isBoardFull()
函数检查棋盘上是否还有空位。 -
游戏循环:在
main()
中,游戏继续循环,每位玩家轮流进行移动。每次移动后,它检查是否胜利或平局。如果一方胜利或棋盘已满(导致平局),游戏结束。 -
用户输入:玩家通过标准输入(
cin
)输入他们的移动,他们需要输入行号和列号。 -
处理无效移动:如果进行了无效的移动,游戏会提示用户重新尝试。
这个棋盘游戏,基于文本实现,在控制台中进行,能够提供一个简单但功能完备的双人棋盘游戏实现。
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
点赞加关注,收藏不迷路!本篇文章对你有帮助的话,还请多多点赞支持!