- 取石子
曹莫凡(故渊助手)五子棋1.0
- 2025-10-5 10:55:01 @
#include <iostream>
#include <vector>
using namespace std;
// 棋盘大小
const int BOARD_SIZE = 8;
// 棋子类型
enum Piece {
EMPTY = 0,
BLACK = 1,
WHITE = 2
};
// 初始化棋盘
void initializeBoard(vector<vector<Piece>>& board) {
for (int i = 0; i < BOARD_SIZE; i++) {
vector<Piece> row(BOARD_SIZE, EMPTY);
board.push_back(row);
}
}
// 打印棋盘
void printBoard(const vector<vector<Piece>>& board) {
cout << " ";
for (int i = 0; i < BOARD_SIZE; i++) {
cout << i << " ";
}
cout << endl;
for (int i = 0; i < BOARD_SIZE; i++) {
cout << i << " ";
for (int j = 0; j < BOARD_SIZE; j++) {
switch (board[i][j]) {
case EMPTY: cout << ". "; break;
case BLACK: cout << "● "; break;
case WHITE: cout << "○ "; break;
}
}
cout << endl;
}
}
// 检查是否有效落子位置
bool isValidMove(const vector<vector<Piece>>& board, int row, int col) {
return row >= 0 && row < BOARD_SIZE &&
col >= 0 && col < BOARD_SIZE &&
board[row][col] == EMPTY;
}
// 检查是否获胜
bool checkWin(const vector<vector<Piece>>& board, int row, int col, Piece piece) {
// 检查水平方向
int count = 0;
for (int i = max(0, col - 4); i <= min(BOARD_SIZE - 1, col + 4); i++) {
if (board[row][i] == piece) {
count++;
if (count == 5) return true;
} else {
count = 0;
}
}
// 检查垂直方向
count = 0;
for (int i = max(0, row - 4); i <= min(BOARD_SIZE - 1, row + 4); i++) {
if (board[i][col] == piece) {
count++;
if (count == 5) return true;
} else {
count = 0;
}
}
// 检查左上到右下对角线
count = 0;
for (int i = -4; i <= 4; i++) {
int r = row + i;
int c = col + i;
if (r >= 0 && r < BOARD_SIZE && c >= 0 && c < BOARD_SIZE) {
if (board[r][c] == piece) {
count++;
if (count == 5) return true;
} else {
count = 0;
}
}
}
// 检查右上到左下对角线
count = 0;
for (int i = -4; i <= 4; i++) {
int r = row + i;
int c = col - i;
if (r >= 0 && r < BOARD_SIZE && c >= 0 && c < BOARD_SIZE) {
if (board[r][c] == piece) {
count++;
if (count == 5) return true;
} else {
count = 0;
}
}
}
return false;
}
// 主游戏函数
void playGame() {
vector<vector<Piece>> board;
initializeBoard(board);
Piece currentPlayer = BLACK;
int moves = 0;
int maxMoves = BOARD_SIZE * BOARD_SIZE;
cout << "欢迎来到8×8五子棋游戏!" << endl;
cout << "黑棋(●)先手,白棋(○)后手" << endl;
cout << "输入坐标格式: 行 列 (例如: 3 4)" << endl;
while (moves < maxMoves) {
printBoard(board);
cout << (currentPlayer == BLACK ? "黑棋(●)" : "白棋(○)") << "的回合: ";
int row, col;
cin >> row >> col;
// 检查输入是否有效
if (!isValidMove(board, row, col)) {
cout << "无效的落子位置,请重新输入!" << endl;
continue;
}
// 落子
board[row][col] = currentPlayer;
moves++;
// 检查是否获胜
if (checkWin(board, row, col, currentPlayer)) {
printBoard(board);
cout << (currentPlayer == BLACK ? "黑棋(●)" : "白棋(○)") << "获胜!" << endl;
return;
}
// 切换玩家
currentPlayer = (currentPlayer == BLACK) ? WHITE : BLACK;
}
printBoard(board);
cout << "平局!棋盘已满!" << endl;
}
int main() {
playGame();
return 0;
}
3 条评论
-
孙易莘EASON @ 2025-10-5 11:55:09
666
-
2025-10-5 11:15:39@
-
2025-10-5 10:56:02@
666
- 1
信息
- ID
- 116
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 56
- 已通过
- 9
- 上传者