iT邦幫忙

2023 iThome 鐵人賽

DAY 17
1
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 17

17. 經典遊戲(二) 井字遊戲

  • 分享至 

  • xImage
  •  

井字遊戲介紹

井字遊戲又叫做 Tic-Tac-Toe,雙方在井字棋盤上交互畫圈(◯)和打叉(✕),先以橫向、直向或斜向連成一線的為勝方,井字遊戲規則簡單易懂又節奏明快,只要有紙筆就能開始競賽,是相當受歡迎的小品遊戲。

https://ithelp.ithome.com.tw/upload/images/20230918/20105707MM8C7TKkQj.png

詳細的遊戲策略與技巧,可參閱 youtube 教學影片「(211) 【小數界大學問】5-1 穩操勝算 - YouTube」的開頭到06:16這段講解。

我們先用一段文字介面程式來講解其邏輯。先寫一個雙人版,利用數字鍵代表井字棋盤的相對位置。

我們先用一段文字介面程式來講解其邏輯。先寫一個雙人版,利用數字鍵代表井字棋盤的相對位置。

# 文字版井字遊戲
# 初始化棋盤
board = [" " for _ in range(9)]

# 定義玩家 X 
current_player = "X"

# 印棋盤
def print_board():
    print(board[0] + "|" + board[1] + "|" + board[2])
    print("-+-+-")
    print(board[3] + "|" + board[4] + "|" + board[5])
    print("-+-+-")
    print(board[6] + "|" + board[7] + "|" + board[8])

# 檢查是否有玩家獲勝
def check_winner(player):
    for i in range(0, 9, 3):
        if board[i] == board[i + 1] == board[i + 2] == player:
            return True
    for i in range(3):
        if board[i] == board[i + 3] == board[i + 6] == player:
            return True
    if board[0] == board[4] == board[8] == player:
        return True
    if board[2] == board[4] == board[6] == player:
        return True
    return False

# 主程式
while True:
    # 印棋盤
    print_board()

    # 取得當前玩家輸入位置
    move = int(input("玩家 " + current_player + " 請下棋 (1-9): ")) - 1

    # 檢查位置是否合法
    if 0 <= move < 9 and board[move] == " ":
        board[move] = current_player

        # 檢查是否有玩家獲勝
        if check_winner(current_player):
            print_board()
            print("玩家 " + current_player + " 獲勝!")
            break

        # 切換玩家
        current_player = "X" if current_player == "O" else "O"
    else:
        print("無效的棋步,請重下。")

print("遊戲結束。")

https://ithelp.ithome.com.tw/upload/images/20230918/20105707JE36aIUVzD.png

https://ithelp.ithome.com.tw/upload/images/20230918/20105707lT6Ky0jdBB.png


上一篇
16. 經典遊戲(一) 終極密碼
下一篇
18. 經典遊戲(三) 吃豆子遊戲
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言