这个不是正确答案,但是可以直接复制在IDE上玩

小唐唐  •  9小时前


include

include

include

using namespace std; // 游戏常量定义 const int BOARD_SIZE = 15; // 棋盘大小(15x15,标准五子棋尺寸) const char EMPTY = '+'; // 空位置标记 const char PLAYER1 = 'b'; // 玩家1(黑子) const char PLAYER2 = 'w'; // 玩家2(白子)

// 棋盘数组 char board[BOARD_SIZE][BOARD_SIZE];

// 初始化棋盘 void initBoard() {

for (int i = 0; i < BOARD_SIZE; i++) {
    for (int j = 0; j < BOARD_SIZE; j++) {
        board[i][j] = EMPTY;
    }
}

}

// 绘制棋盘 void drawBoard() {

system("cls");  // Windows清屏,Linux/macOS替换为system("clear")
cout << "    ";
// 绘制列号
for (int j = 0; j < BOARD_SIZE; j++) {
    cout << setw(2) << j << " ";
}
cout << endl;
cout << "   +";
for (int j = 0; j < BOARD_SIZE; j++) {
    cout << "---+";
}
cout << endl;

// 绘制棋盘内容和行号
for (int i = 0; i < BOARD_SIZE; i++) {
    cout << setw(2) << i << " |";
    for (int j = 0; j < BOARD_SIZE; j++) {
        cout << " " << board[i][j] << " |";
    }
    cout << endl;
    cout << "   +";
    for (int j = 0; j < BOARD_SIZE; j++) {
        cout << "---+";
    }
    cout << endl;
}

}

// 检查坐标是否合法 bool isValidPos(int x, int y) {

return x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE && board[x][y] == EMPTY;

}

// 检查是否获胜 bool checkWin(int x, int y, char player) {

// 定义四个检查方向:水平、垂直、左斜、右斜
int dx[] = {0, 1, 1, 1};
int dy[] = {1, 0, 1, -1};

for (int dir = 0; dir < 4; dir++) {
    int count = 1;  // 当前位置已有一个棋子
    // 正向检查
    int nx = x + dx[dir];
    int ny = y + dy[dir];
    while (nx >= 0 && nx < BOARD_SIZE && ny >= 0 && ny < BOARD_SIZE && board[nx][ny] == player) {
        count++;
        nx += dx[dir];
        ny += dy[dir];
    }
    // 反向检查
    nx = x - dx[dir];
    ny = y - dy[dir];
    while (nx >= 0 && nx < BOARD_SIZE && ny >= 0 && ny < BOARD_SIZE && board[nx][ny] == player) {
        count++;
        nx -= dx[dir];
        ny -= dy[dir];
    }
    // 五子连珠判定
    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] == EMPTY) {
            return false;
        }
    }
}
return true;

}

// 游戏主逻辑 void gameLoop() {

int x, y;
char currentPlayer = PLAYER1;
bool gameOver = false;

initBoard();
drawBoard();

while (!gameOver) {
    cout << endl << "玩家" << (currentPlayer == PLAYER1 ? "1(黑子)" : "2(白子)") 
         << " 请输入坐标(行 列):";
    cin >> x >> y;

    // 检查输入合法性
    if (!isValidPos(x, y)) {
        cout << "坐标不合法!请重新输入(范围0-" << BOARD_SIZE-1 << ",且位置不能为空)。" << endl;
        continue;
    }

    // 落子
    board[x][y] = currentPlayer;
    drawBoard();

    // 检查胜负
    if (checkWin(x, y, currentPlayer)) {
        cout << endl << "恭喜玩家" << (currentPlayer == PLAYER1 ? "1(黑子)" : "2(白子)") << " 获胜!" << endl;
        gameOver = true;
    }
    // 检查平局
    else if (isBoardFull()) {
        cout << endl << "棋盘已满,平局!" << endl;
        gameOver = true;
    }
    // 切换玩家
    else {
        currentPlayer = (currentPlayer == PLAYER1) ? PLAYER2 : PLAYER1;
    }
}

cout << endl << "游戏结束!按任意键退出..." << endl;

}

int main() {

cout << "==================== 五子棋游戏 ====================" << endl;
cout << "规则:两人轮流落子,先形成五子连珠者获胜!" << endl;
cout << "输入格式:行号 列号(例如:7 7 表示棋盘中心位置)" << endl;
cout << "====================================================" << endl;
cout << "按任意键开始游戏..." << endl;
gameLoop();
return 0;

}


评论:

请先登录,才能进行评论