首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Python 實現井字棋遊戲完整代碼解析

     編輯:Java 相關知識

遊戲特色

  • Windows 7 + Python 3.4.0 開發,使用 subprocess.call("cls") 清屏,僅限 Windows 執行。
  • 數字鍵盤 1-9 對應棋盤九宮格位置。
  • 人機對戰,電腦採用簡易 AI:優先獲勝 → 阻擋對手 → 佔角 → 佔中心 → 佔邊。

核心函數模組

棋盤顯示

def draw_board(board):
    subprocess.call("cls", shell=True)
    print(' -------\n' + ' |' + board[9] + '|' + board[8] + '|' + board[7] + '|\n' + ' -------\n' +
          ' |' + board[6] + '|' + board[5] + '|' + board[4] + '|\n' + ' -------\n' +
          ' |' + board[3] + '|' + board[2] + '|' + board[1] + '|\n' + ' -------')

玩家選擇棋子

def input_player_letter():
    letter = ''
    while letter not in ('X', 'O'):
        letter = input('請選擇 X 或 O 作棋子:').upper()
    return ['X', 'O'] if letter == 'X' else ['O', 'X']

判斷勝利邏輯

def is_winner(board, letter):
    return ((board[1]==letter and board[2]==letter and board[3]==letter) or
            (board[4]==letter and board[5]==letter and board[6]==letter) or
            (board[7]==letter and board[8]==letter and board[9]==letter) or
            (board[1]==letter and board[5]==letter and board[9]==letter) or
            (board[2]==letter and board[5]==letter and board[8]==letter) or
            (board[3]==letter and board[5]==letter and board[7]==letter) or
            (board[1]==letter and board[4]==letter and board[7]==letter) or
            (board[2]==letter and board[5]==letter and board[8]==letter) or
            (board[3]==letter and board[6]==letter and board[9]==letter))

電腦 AI 策略

def get_computer_move(board, computer_letter):
    player_letter = 'O' if computer_letter == 'X' else 'X'
    # 1. 檢查自己能否一步獲勝
    for i in range(1,10):
        if is_space_free(board, i):
            copy = get_board_copy(board)
            make_move(copy, computer_letter, i)
            if is_winner(copy, computer_letter): return i
    # 2. 檢查阻擋玩家獲勝
    for i in range(1,10):
        if is_space_free(board, i):
            copy = get_board_copy(board)
            make_move(copy, player_letter, i)
            if is_winner(copy, player_letter): return i
    # 3. 佔角 -> 佔中心 -> 佔邊
    move = choose_random_from_list(board, [1,3,7,9])
    if move: return move
    if is_space_free(board, 5): return 5
    return choose_random_from_list(board, [2,4,6,8])

主遊戲循環

while True:
    board = [' '] * 10
    player_letter, computer_letter = input_player_letter()
    turn = who_first()
    print(turn + '先走')
    game_is_playing = True
    while game_is_playing:
        if turn == 'player':
            draw_board(board)
            move = get_player_move(board)
            make_move(board, player_letter, move)
            if is_winner(board, player_letter):
                draw_board(board); print('恭喜!你贏了。'); break
            if is_board_full(board): draw_board(board); print('平手!'); break
            turn = 'computer'
        else:
            move = get_computer_move(board, computer_letter)
            make_move(board, computer_letter, move)
            if is_winner(board, computer_letter):
                draw_board(board); print('電腦獲勝!'); break
            if is_board_full(board): draw_board(board); print('平手!'); break
            turn = 'player'
    if not is_again(): break

執行畫面

程式啟動時顯示 ASCII 藝術字歡迎畫面,遊戲過程在控制台即時刷新棋盤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved