//井字棋(人机对战) #include <iostream> #include <vector> #include <cstdlib> #include <ctime> using namespace std; void drawBoard(const vector<char>& board) { cout << "\n"; cout << " " << board[0] << " | " << board[1] << " | " << board[2] << " \n"; cout << "---+---+---\n"; cout << " " << board[3] << " | " << board[4] << " | " << board[5] << " \n"; cout << "---+---+---\n"; cout << " " << board[6] << " | " << board[7] << " | " << board[8] << " \n\n"; } bool checkWin(const vector<char>& board, char player) { const int winPatterns[8][3] = {{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6}}; for (int i = 0; i < 8; i++) { if (board[winPatterns[i][0]] == player && board[winPatterns[i][1]] == player && board[winPatterns[i][2]] == player) { return true; } } return false; } bool checkDraw(const vector<char>& board) { for (int i = 0; i < 9; i++) { if (board[i] != 'X' && board[i] != 'O') { return false; } } return true; } int getComputerMove(const vector<char>& board) { vector<int> available; for (int i = 0; i < 9; i++) { if (board[i] != 'X' && board[i] != 'O') { available.push_back(i); } } srand(time(0)); int randomIndex = rand() % available.size(); return available[randomIndex]; } int main() { vector<char> board(9); for (int i = 0; i < 9; i++) { board[i] = '1' + i; } char currentPlayer = 'X'; bool gameOver = false; cout << "欢迎来到井字棋游戏!\n"; cout << "你是 X,电脑是 O\n"; while (!gameOver) { drawBoard(board); int move; if (currentPlayer == 'X') { cout << "请输入你的落子位置 (1-9): "; cin >> move; move--; if (move < 0 || move > 8 || board[move] == 'X' || board[move] == 'O') { cout << "无效的位置,请重新输入!\n"; continue; } } else { move = getComputerMove(board); cout << "电脑选择了位置: " << move + 1 << "\n"; } board[move] = currentPlayer; if (checkWin(board, currentPlayer)) { drawBoard(board); if (currentPlayer == 'X') { cout << "恭喜你,你赢了!\n"; } else { cout << "电脑赢了,再接再厉!\n"; } gameOver = true; } else if (checkDraw(board)) { drawBoard(board); cout << "游戏平局!\n"; gameOver = true; } else { currentPlayer = (currentPlayer == 'X') ? 'O' : 'X'; } } return 0; }
Note.ms
/lvbg