按照下面要求用C++生成一个五子棋游戏代码还得有人机对战、双人对战两种模式:2 详细设计:a ChessBoard类:- 成员变量:二维数组存储棋盘信息。- 成员函数:绘制棋盘、获取棋盘信息等。b ChessPiece类:- 成员变量:棋子颜色、位置信息。- 成员函数:获取棋子信息、设置棋子信息等。c Player类:- 成员变量:玩家名称、执棋颜色。- 成员函数:获取玩家信息、设置玩家信息等
g) 电脑玩家根据棋盘情况和难度等级进行下棋,并自动判断胜负。
h) 游戏结束后,根据用户选择进行重新开始或退出游戏。
- C++代码实现:(以人机对战为例)
#include
const int ROW = 15; const int COL = 15;
class ChessBoard { private: int board[ROW][COL]; public: ChessBoard() { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { board[i][j] = 0; } } } void drawBoard() { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { if (board[i][j] == 0) { cout << "+ "; } else if (board[i][j] == 1) { cout << "o "; } else { cout << "x "; } } cout << endl; } } int getBoard(int x, int y) { return board[x][y]; } void setBoard(int x, int y, int color) { board[x][y] = color; } void undo(int x, int y) { board[x][y] = 0; } };
class ChessPiece { private: int x, y, color; public: ChessPiece(int x, int y, int color) { this->x = x; this->y = y; this->color = color; } int getX() { return x; } int getY() { return y; } int getColor() { return color; } };
class Player { private: string name; int color; public: Player(string name, int color) { this->name = name; this->color = color; } string getName() { return name; } int getColor() { return color; } };
class Game { private: ChessBoard board; Player* player1; Player* player2; public: Game() { player1 = new Player("Player1", 1); player2 = new Player("Computer", 2); } void play() { int turn = 1; int win = 0; int x, y;
while (win == 0) {
if (turn == 1) {
cout << "Player1's turn: ";
cin >> x >> y;
if (board.getBoard(x, y) != 0) {
cout << "This position is already occupied!" << endl;
continue;
}
board.setBoard(x, y, player1->getColor());
}
else {
cout << "Computer's turn: ";
if (turn == 2) {
srand(time(NULL));
x = rand() % 15;
y = rand() % 15;
}
else {
// AI algorithm
}
if (board.getBoard(x, y) != 0) {
continue;
}
board.setBoard(x, y, player2->getColor());
}
board.drawBoard();
// check win or draw
if (checkWin(x, y)) {
win = turn;
if (win == 1) {
cout << "Player1 wins!" << endl;
}
else {
cout << "Computer wins!" << endl;
}
}
else if (checkDraw()) {
win = 3;
cout << "Draw!" << endl;
}
// switch turn
turn = (turn == 1) ? 2 : 1;
}
}
bool checkWin(int x, int y) {
int color = board.getBoard(x, y);
int count = 1;
// check row
for (int i = x + 1; i < ROW && board.getBoard(i, y) == color; i++) {
count++;
}
for (int i = x - 1; i >= 0 && board.getBoard(i, y) == color; i--) {
count++;
}
if (count >= 5) {
return true;
}
// check column
count = 1;
for (int i = y + 1; i < COL && board.getBoard(x, i) == color; i++) {
count++;
}
for (int i = y - 1; i >= 0 && board.getBoard(x, i) == color; i--) {
count++;
}
if (count >= 5) {
return true;
}
// check diagonal
count = 1;
for (int i = x + 1, j = y + 1; i < ROW && j < COL && board.getBoard(i, j) == color; i++, j++) {
count++;
}
for (int i = x - 1, j = y - 1; i >= 0 && j >= 0 && board.getBoard(i, j) == color; i--, j--) {
count++;
}
if (count >= 5) {
return true;
}
// check anti-diagonal
count = 1;
for (int i = x + 1, j = y - 1; i < ROW && j >= 0 && board.getBoard(i, j) == color; i++, j--) {
count++;
}
for (int i = x - 1, j = y + 1; i >= 0 && j < COL && board.getBoard(i, j) == color; i--, j++) {
count++;
}
if (count >= 5) {
return true;
}
return false;
}
bool checkDraw() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (board.getBoard(i, j) == 0) {
return false;
}
}
}
return true;
}
void reset() {
board = ChessBoard();
}
};
int main() { Game game; game.play(); return 0;
原文地址: http://www.cveoy.top/t/topic/ho7k 著作权归作者所有。请勿转载和采集!