本文將詳細介紹如何使用Python的Dictionary來編寫一個井字棋遊戲,並提供完整的代碼示例。
一、構造棋盤
我們可以使用一個3×3的Dictionary來表示井字棋盤,其中Key為二元組(x, y),對應的Value可以為”X”、”O”或者None,分別表示該位置下了X、O或者沒有棋子。
board = {(0, 0): None, (0, 1): None, (0, 2): None,
(1, 0): None, (1, 1): None, (1, 2): None,
(2, 0): None, (2, 1): None, (2, 2): None}
一開始所有位置都沒有棋子,因此初始化為None。為了更好的可讀性,可以使用縮進將其表示成3×3的形式。
二、列印棋盤
我們可以編寫一個函數,將board列印成井字棋盤的形式。代碼如下:
def print_board(board):
print(" 0 1 2")
for i in range(3):
row = str(i) + " "
for j in range(3):
if board[(i, j)] is None:
row += "| "
else:
row += "| " + board[(i, j)] + " "
row += "|"
print(row)
該函數會輸出一個3×3的井字棋盤,橫軸為0、1、2,縱軸也為0、1、2,每個格子中填充None、”X”或者”O”。
三、落子
我們也可以編寫一個函數,用於在指定位置落子。代碼如下:
def make_move(board, x, y, player):
board[(x, y)] = player
該函數會在指定位置將player對應的棋子落下,即將board中對應的Value修改為player。
四、勝負判斷
我們需要編寫一個函數,判斷當前棋盤上是否有任何一方獲勝。實現這個函數,可以通過枚舉所有可能的獲勝情況,也可以設置一個檢查函數,用於判斷某一方是否在某個位置獲勝。在本文中,我們將使用枚舉來實現該函數。
def check_win(board):
for i in range(3):
if board[(i, 0)] == board[(i, 1)] == board[(i, 2)] and board[(i, 0)] is not None:
return board[(i, 0)]
if board[(0, i)] == board[(1, i)] == board[(2, i)] and board[(0, i)] is not None:
return board[(0, i)]
if board[(0, 0)] == board[(1, 1)] == board[(2, 2)] and board[(0, 0)] is not None:
return board[(0, 0)]
if board[(0, 2)] == board[(1, 1)] == board[(2, 0)] and board[(0, 2)] is not None:
return board[(0, 2)]
return None
該函數將遍歷所有可能的獲勝情況。若有任何一方獲勝,則返回該方的代號(”X”或者”O”)。如果沒有任何一方獲勝,則返回None。
五、遊戲流程
現在我們已經有了用Python的Dictionary構造井字棋棋盤、列印棋盤、落子、判斷勝負的函數,可以編寫一個遊戲流程函數,用於啟動兩個玩家之間的井字棋遊戲。
def tic_tac_toe():
board = {(0, 0): None, (0, 1): None, (0, 2): None,
(1, 0): None, (1, 1): None, (1, 2): None,
(2, 0): None, (2, 1): None, (2, 2): None}
player = "X"
while not check_win(board):
print_board(board)
print("Player " + player + "'s turn.")
x = int(input("Enter x coordinate: "))
y = int(input("Enter y coordinate: "))
make_move(board, x, y, player)
if player == "X":
player = "O"
else:
player = "X"
print_board(board)
print("Player " + check_win(board) + " wins!")
該函數會循環執行以下步驟:
- 列印當前棋盤狀態。
- 提示該輪玩家的代號,並等待用戶輸入落子位置。
- 落子。
- 交換當前玩家。
- 如果任何一方獲勝,則輸出勝利信息並結束遊戲。
結束語
本文詳細介紹了如何使用Python的Dictionary編寫一個井字棋遊戲,包括棋盤構造、列印、落子、勝負判斷和遊戲流程等方面。讀者可以根據本文提供的代碼示例以及思路,自行編寫自己的井字棋遊戲,並進行優化和擴展。
原創文章,作者:MTZMT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/373582.html