基于Eclipse用c++实现五子棋代码
时间: 2023-07-16 15:17:10 浏览: 54
这里提供一个基于Eclipse的C++实现五子棋的代码,希望对你有帮助。
注意:本代码仅供参考,不保证完全正确和优化。
```c++
#include <iostream>
using namespace std;
const int N = 15; // 棋盘大小
char board[N][N]; // 棋盘
char player1 = 'X'; // 玩家1执黑子
char player2 = 'O'; // 玩家2执白子
char currentPlayer = player1; // 当前玩家
bool isGameOver = false; // 游戏是否结束
// 初始化棋盘
void initBoard() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
board[i][j] = '-';
}
}
}
// 打印棋盘
void printBoard() {
cout << " ";
for (int i = 0; i < N; i++) {
cout << " " << i + 1;
}
cout << endl;
for (int i = 0; i < N; i++) {
cout << i + 1 << " ";
for (int j = 0; j < N; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
}
// 判断是否下到了边界
bool isInBound(int row, int col) {
return row >= 0 && row < N && col >= 0 && col < N;
}
// 判断该位置是否为空
bool isEmpty(int row, int col) {
return board[row][col] == '-';
}
// 判断是否可落子
bool isValidMove(int row, int col) {
return isInBound(row, col) && isEmpty(row, col);
}
// 落子
void makeMove(int row, int col, char player) {
board[row][col] = player;
}
// 检查是否有连成五个的子
bool checkWin(int row, int col, char player) {
// 检查横向
int count = 0;
for (int j = col; j >= 0; --j) {
if (board[row][j] == player) {
count++;
} else {
break;
}
}
for (int j = col + 1; j < N; ++j) {
if (board[row][j] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return true;
// 检查纵向
count = 0;
for (int i = row; i >= 0; --i) {
if (board[i][col] == player) {
count++;
} else {
break;
}
}
for (int i = row + 1; i < N; ++i) {
if (board[i][col] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return true;
// 检查左上-右下斜线
count = 0;
for (int i = row, j = col; i >= 0 && j >= 0; --i, --j) {
if (board[i][j] == player) {
count++;
} else {
break;
}
}
for (int i = row + 1, j = col + 1; i < N && j < N; ++i, ++j) {
if (board[i][j] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return true;
// 检查左下-右上斜线
count = 0;
for (int i = row, j = col; i >= 0 && j < N; --i, ++j) {
if (board[i][j] == player) {
count++;
} else {
break;
}
}
for (int i = row + 1, j = col - 1; i < N && j >= 0; ++i, --j) {
if (board[i][j] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return true;
return false;
}
// 检查是否平局
bool checkDraw() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (board[i][j] == '-') {
return false;
}
}
}
return true;
}
// 切换玩家
void switchPlayer() {
if (currentPlayer == player1) {
currentPlayer = player2;
} else {
currentPlayer = player1;
}
}
// 处理一个回合
void handleTurn() {
int row, col;
cout << "轮到" << currentPlayer << "落子,请输入落子的行列号(如:3 4):";
cin >> row >> col;
while (!isValidMove(row - 1, col - 1)) {
cout << "无效的落子,请重新输入落子的行列号(如:3 4):";
cin >> row >> col;
}
makeMove(row - 1, col - 1, currentPlayer);
printBoard();
if (checkWin(row - 1, col - 1, currentPlayer)) {
cout << currentPlayer << "获胜!" << endl;
isGameOver = true;
} else if (checkDraw()) {
cout << "平局!" << endl;
isGameOver = true;
} else {
switchPlayer();
}
}
int main() {
initBoard();
printBoard();
while (!isGameOver) {
handleTurn();
}
return 0;
}
```
在Eclipse中新建一个C++项目,将上述代码复制到main.cpp文件中,编译运行即可。