用c++写一个简单可以运行五子棋游戏代码配上解析
时间: 2024-01-02 07:01:57 浏览: 96
以下是一个简单的 C++ 五子棋游戏代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
const int BOARD_SIZE = 15;
enum Player { EMPTY, BLACK, WHITE };
class Board {
public:
Board() {
for (int i = 0; i < BOARD_SIZE; i++) {
vector<Player> row(BOARD_SIZE, EMPTY);
board_.push_back(row);
}
}
bool move(Player player, int row, int col) {
if (board_[row][col] == EMPTY) {
board_[row][col] = player;
return true;
}
return false;
}
bool has_five(Player player) const {
// Check rows
for (int row = 0; row < BOARD_SIZE; row++) {
for (int col = 0; col <= BOARD_SIZE - 5; col++) {
bool found = true;
for (int i = 0; i < 5; i++) {
if (board_[row][col + i] != player) {
found = false;
break;
}
}
if (found) return true;
}
}
// Check columns
for (int row = 0; row <= BOARD_SIZE - 5; row++) {
for (int col = 0; col < BOARD_SIZE; col++) {
bool found = true;
for (int i = 0; i < 5; i++) {
if (board_[row + i][col] != player) {
found = false;
break;
}
}
if (found) return true;
}
}
// Check diagonals
for (int row = 0; row <= BOARD_SIZE - 5; row++) {
for (int col = 0; col <= BOARD_SIZE - 5; col++) {
bool found = true;
for (int i = 0; i < 5; i++) {
if (board_[row + i][col + i] != player) {
found = false;
break;
}
}
if (found) return true;
}
}
for (int row = 0; row <= BOARD_SIZE - 5; row++) {
for (int col = 4; col < BOARD_SIZE; col++) {
bool found = true;
for (int i = 0; i < 5; i++) {
if (board_[row + i][col - i] != player) {
found = false;
break;
}
}
if (found) return true;
}
}
return false;
}
void print() const {
cout << " ";
for (int col = 0; col < BOARD_SIZE; col++) {
cout << col << " ";
}
cout << endl;
for (int row = 0; row < BOARD_SIZE; row++) {
cout << row << " ";
for (int col = 0; col < BOARD_SIZE; col++) {
switch (board_[row][col]) {
case BLACK:
cout << "X ";
break;
case WHITE:
cout << "O ";
break;
default:
cout << ". ";
break;
}
}
cout << endl;
}
}
private:
vector<vector<Player>> board_;
};
int main() {
Board board;
Player player = BLACK;
while (true) {
// Print board
board.print();
// Get user input
int row, col;
cout << "Player " << player << ", enter row and column: ";
cin >> row >> col;
// Make move
if (!board.move(player, row, col)) {
cout << "Invalid move, try again." << endl;
continue;
}
// Check for win
if (board.has_five(player)) {
cout << "Player " << player << " wins!" << endl;
break;
}
// Switch players
player = (player == BLACK) ? WHITE : BLACK;
}
return 0;
}
```
这个代码实现了一个简单的五子棋游戏,可以在终端上进行游戏。玩家可以输入行和列来进行移动,程序会检查移动是否合法,如果合法则会在棋盘上放置一个黑子或白子,如果出现五个连续的相同颜色的棋子则会宣布该玩家获胜。
解析:
1. 首先定义了一个枚举类型 Player 来表示棋盘上的三种状态:空、黑子和白子。
2. 定义了一个 Board 类来表示棋盘,其中包含一个 BOARD_SIZE 常量,表示棋盘大小。在构造函数中,使用 vector<vector<Player>> 来初始化棋盘,其中每个元素都被初始化为空状态。
3. Board 类中的 move() 函数用来移动棋子,它接受一个 Player 类型的参数来表示当前玩家,以及行和列的索引。如果该位置为空,则将该位置设置为当前玩家的颜色,并返回 true,否则返回 false。
4. Board 类中的 has_five() 函数用来检查当前玩家是否获胜。它会检查每一行、每一列和每一条对角线是否存在五个相同颜色的棋子。如果存在,则返回 true,否则返回 false。
5. Board 类中的 print() 函数用来打印棋盘。它会将棋盘上的每个位置打印为一个字符,其中 X 表示黑子,O 表示白子,. 表示空。
6. 在 main() 函数中,首先创建一个 Board 对象。然后使用一个 while 循环来不断进行游戏,直到某一方获胜。在循环中,首先打印棋盘,然后获取当前玩家的输入,调用 Board 类的 move() 函数来移动棋子。如果移动无效,则提示玩家重新输入。如果移动有效,则检查当前玩家是否获胜,如果获胜则宣布胜利并退出循环。最后,切换玩家并继续下一轮游戏。
阅读全文