在程式設計的世界裡,從零開始開發一個互動遊戲是學習的絕佳方式。今天,玄貓(BlackCat)將帶領大家一步使用 Python 開發一個經典的猜數字遊戲。這個遊戲不僅能幫助你熟悉 Python 的基礎語法,還能讓你瞭解程式設計中的核心概念,例如隨機數生成、使用者輸入、條件判斷和迴圈。

1. 遊戲設計概念:猜數字遊戲的邏輯核心

猜數字遊戲的邏輯相當簡單,但背後蘊含著重要的程式設計思維。首先,電腦會隨機產生一個指定範圍內的數字,接著玩家需要不斷猜測,直到猜中為止。每次猜測後,電腦會給予提示,告訴玩家猜測的數字是太高還是太低,幫助玩家縮小範圍。

這個遊戲的核心在於:

  • 隨機數生成: 如何讓電腦產生一個秘密數字?
  • 使用者輸入: 如何接收玩家的猜測?
  • 條件判斷: 如何判斷玩家猜測的數字是否正確?
  • 迴圈: 如何讓玩家可以重複猜測,直到猜中為止?

接下來,玄貓(BlackCat)將透過 Python 程式碼,一實作這些核心功能。

2. 基礎程式碼:開發猜數字遊戲的骨架

首先,我們需要引入 random 模組,它提供了生成隨機數的功能。然後,我們定義一個函式 play_guessing_game(),它將負責處理遊戲的流程。

import random

def play_guessing_game(max_guesses, number_range):
    secret_number = random.randint(1, number_range)
    guesses_left = max_guesses

    print(f"我已經選好了一個 1 到 {number_range} 之間的數字。你有 {max_guesses} 次猜測機會。")

    while guesses_left > 0:
        try:
            guess = int(input("請猜一個數字:"))
        except ValueError:
            print("輸入錯誤,請輸入一個整數。")
            continue

        guesses_left -= 1

        if guess == secret_number:
            print(f"恭喜你,猜對了!你用了 {max_guesses - guesses_left} 次猜測。")
            return True
        elif guess < secret_number:
            print(f"太小了!你還有 {guesses_left} 次猜測機會。")
        else:
            print(f"太大了!你還有 {guesses_left} 次猜測機會。")

    print(f"你沒有猜中。正確答案是 {secret_number}。")
    return False

這段程式碼做了以下事情:

  • import random:引入 random 模組,用於生成隨機數。
  • secret_number = random.randint(1, number_range):使用 random.randint() 函式生成一個 1 到 number_range 之間的隨機整數,作為秘密數字。
  • guesses_left = max_guesses:設定剩餘猜測次數。
  • while guesses_left > 0::使用 while 迴圈,讓玩家可以重複猜測,直到猜中或用完所有機會。
  • guess = int(input("請猜一個數字:")):使用 input() 函式接收玩家的猜測,並使用 int() 函式將其轉換為整數。
  • if guess == secret_number::判斷玩家猜測的數字是否等於秘密數字。
  • elif guess < secret_number::判斷玩家猜測的數字是否小於秘密數字。
  • else::如果玩家猜測的數字既不等於也不小於秘密數字,則表示其大於秘密數字。
  • print(f"你沒有猜中。正確答案是 {secret_number}。"):如果玩家用完所有機會,則顯示正確答案。

3. 增加難度選擇:讓遊戲更具挑戰性

為了讓遊戲更具挑戰性,我們可以增加難度選擇功能,讓玩家可以根據自己的能力選擇不同的難度。

def choose_difficulty():
    while True:
        print("請選擇遊戲難度:")
        print("1. 簡單 (1-10, 5 次機會)")
        print("2. 普通 (1-50, 7 次機會)")
        print("3. 困難 (1-100, 10 次機會)")

        try:
            difficulty = int(input("請輸入難度選項 (1-3):"))
            if 1 <= difficulty <= 3:
                return difficulty
            else:
                print("輸入錯誤,請輸入 1 到 3 之間的數字。")
        except ValueError:
            print("輸入錯誤,請輸入一個整數。")

這個函式做了以下事情:

  • while True::使用 while 迴圈,讓使用者可以重複選擇難度,直到輸入有效的選項。
  • print("請選擇遊戲難度:"):顯示難度選項。
  • difficulty = int(input("請輸入難度選項 (1-3):")):使用 input() 函式接收使用者的選擇,並使用 int() 函式將其轉換為整數。
  • if 1 <= difficulty <= 3::判斷使用者輸入的數字是否在 1 到 3 之間。

4. 主程式:整合所有功能,讓遊戲跑起來

現在,我們需要將所有功能整合到主程式中,讓遊戲跑起來。

def main():
    while True:
        difficulty = choose_difficulty()

        if difficulty == 1:
            max_guesses = 5
            number_range = 10
        elif difficulty == 2:
            max_guesses = 7
            number_range = 50
        else:  # difficulty == 3
            max_guesses = 10
            number_range = 100

        game_won = play_guessing_game(max_guesses, number_range)

        play_again = input("想再玩一次嗎?(y/n): ")
        if play_again.lower() != "y":
            break

    print("謝你的遊玩!")

if __name__ == "__main__":
    main()

這段程式碼做了以下事情:

  • while True::使用 while 迴圈,讓使用者可以重複玩遊戲。
  • difficulty = choose_difficulty():呼叫 choose_difficulty() 函式,讓使用者選擇遊戲難度。
  • if difficulty == 1:elif difficulty == 2:else::根據使用者選擇的難度,設定 max_guessesnumber_range 的值。
  • game_won = play_guessing_game(max_guesses, number_range):呼叫 play_guessing_game() 函式,開始玩遊戲。
  • play_again = input("想再玩一次嗎?(y/n): "):詢問使用者是否要再玩一次。
  • if play_again.lower() != "y": break:如果使用者不想再玩了,迴圈結束。
  • print("謝你的遊玩!"):程式結束時顯示感謝訊息。
  • if __name__ == "__main__": main():這是一個 Python 的特殊語法,用於判斷程式是否作為主程式執行。如果程式作為主程式執行,則執行 main() 函式。如果程式作為模組被匯入,則不執行 main() 函式。

5. 最佳化與擴充套件:讓遊戲更完美

這個猜數字遊戲已經相當完整,但玄貓(BlackCat)仍然可以進行一些最佳化和擴充套件:

  • 增加提示訊息: 可以根據使用者猜測的數字,提供更精確的提示訊息,例如 “非常接近” 或 “差很遠”。
  • 記錄遊戲歷史: 可以將每次遊戲的結果 (猜測次數、是否猜對) 記錄到檔案中,方便使用者檢視。
  • 圖形化介面: 可以使用 Pygame 或 Tkinter 等 GUI 函式庫遊戲介面圖形化,增加互動性。

透過這些最佳化和擴充套件,你可以讓你的猜數字遊戲更加完美,更具吸引力。

透過本文的學習,你已經掌握了使用 Python 開發猜數字遊戲的基本技巧和進階應用。這個遊戲不僅可以幫助你熟悉 Python 的基本語法,還能讓你瞭解程式設計中的核心概念,例如隨機數生成、使用者輸入、條件判斷和迴圈。希望你能將這些知識應用到其他程式設計專案中,創造出更多有趣與實用的應用程式!下次在與朋友聚會時,不妨展示你親手開發的猜數字遊戲,一起享受程式設計的樂趣吧!

Python 猜數字遊戲:從入門到進階

猜數字遊戲是一個經典的程式設計練習,尤其適合初學者。它涵蓋了程式設計中的多個核心概念,例如隨機數生成、使用者輸入、條件判斷以及迴圈等。本文將由玄貓(BlackCat)引導各位,使用 Python 從基礎到進階,一步開發一個功能完善的猜數字遊戲,並探討如何最佳化程式碼,增加遊戲的趣味性。

基礎版:核心邏輯實作

首先,讓玄貓(BlackCat)來看如何使用 Python 實作猜數字遊戲的核心邏輯:

import random

# 產生一個 1 到 100 之間的隨機整數
number = random.randint(1, 100)

# 提示使用者輸入猜測的數字
guess = int(input("請猜一個 1 到 100 之間的數字:"))

# 使用 while 迴圈,直到使用者猜對為止
while guess != number:
    if guess < number:
        print("太小了!")
    else:
        print("太大了!")

    # 再次提示使用者輸入猜測的數字
    guess = int(input("再猜一次:"))

# 如果猜對了,印出恭喜訊息
print("恭喜你,猜對了!")

程式碼解說:

這段程式碼使用 Python 實作了猜數字遊戲的核心功能。以下是玄貓(BlackCat)針對各部分的詳細說明:

  1. import random:

    import random
    

    此行匯入 random 模組,該模組提供了生成隨機數的功能。import 陳述式用於引入外部模組,讓程式可以使用該模組中定義的函式和變數。

  2. number = random.randint(1, 100):

    number = random.randint(1, 100)
    

    此行使用 random.randint(a, b) 函式生成一個 ab 之間(包含 ab)的隨機整數,並將其指定給變數 number。在這個例子中,生成一個 1 到 100 之間的隨機整數作為要猜測的目標數字。

  3. guess = int(input("請猜一個 1 到 100 之間的數字:")):

    guess = int(input("請猜一個 1 到 100 之間的數字:"))
    

    此行使用 input() 函式提示使用者輸入猜測的數字,並使用 int() 函式將使用者輸入的字串轉換為整數,然後將其指定給變數 guessinput() 函式會顯示括號中的提示訊息,並等待使用者輸入。int() 函式則確保使用者輸入的是一個整數,如果輸入的不是數字,程式會產生錯誤。

  4. while guess != number::

    while guess != number:
    

    此行使用 while 迴圈,只要使用者猜測的數字 guess 不等於電腦產生的數字 number,迴圈就會一直執行。while 迴圈會不斷重複執行迴圈內的程式碼,直到條件 guess != number 不成立(即使用者猜對數字)為止。

  5. if guess < number::

    if guess < number:
        print("太小了!")
    else:
        print("太大了!")
    

    這是一個條件判斷陳述式。如果使用者猜測的數字 guess 小於電腦產生的數字 number,則印出 “太小了!"。else 區塊則在 guess 不小於 number 時執行,表示使用者猜測的數字太大。

  6. guess = int(input("再猜一次:")):

    guess = int(input("再猜一次:"))
    

    while 迴圈內,這行程式碼再次提示使用者輸入猜測的數字,並將其轉換為整數,然後指定給變數 guess。這樣,使用者可以在每次猜測後更新 guess 的值,並繼續進行下一輪的猜測。

  7. print("恭喜你,猜對了!"):

    print("恭喜你,猜對了!")
    

    當使用者猜對數字時,迴圈結束,程式會執行這行程式碼,印出恭喜訊息。這表示 guess == number 的條件成立,迴圈停止執行。

執行結果:

執行這段程式碼後,你會看到類別似以下的輸出:

請猜一個 1 到 100 之間的數字:50
太大了!
再猜一次:25
太小了!
再猜一次:37
太小了!
再猜一次:43
太大了!
再猜一次:40
恭喜你,猜對了!

進階版:增加遊戲功能

現在,各位讀者已經實作了猜數字遊戲的核心邏輯。接下來,玄貓(BlackCat)將增加一些功能,讓遊戲更加有趣:

  • 限制猜測次數: 限制使用者猜測的次數,增加遊戲難度。
  • 顯示猜測次數: 顯示使用者已經猜測了多少次。
  • 難度選擇: 讓使用者選擇遊戲難度,不同的難度對應不同的猜測範圍和次數限制。
  • 重新開始遊戲: 在遊戲結束後,詢問使用者是否要重新開始遊戲。
import random

def play_guessing_game(max_guesses, number_range):
    """玩猜數字遊戲"""
    number = random.randint(1, number_range)
    guesses_left = max_guesses
    print(f"我已經選好了一個 1 到 {number_range} 之間的數字。")
    print(f"你有 {max_guesses} 次猜測機會。")

    while guesses_left > 0:
        try:
            guess = int(input("請猜一個數字:"))
            if guess < 1 or guess > number_range:
                print(f"請輸入 1 到 {number_range} 之間的數字。")
                continue  # 跳過本次迴圈,重新輸入
        except ValueError:
            print("請輸入一個有效的整數。")
            continue  # 跳過本次迴圈,重新輸入

        guesses_left -= 1

        if guess == number:
            print(f"恭喜你,猜對了!你用了 {max_guesses - guesses_left} 次猜測。")
            return True  # 猜對了,回傳 True
        elif guess < number:
            print("太小了!")
        else:
            print("太大了!")
            
        print(f"你還有 {guesses_left} 次猜測機會。")

    print(f"你沒有猜到數字,答案是 {number}。")
    return False  # 沒有猜對,回傳 False

def choose_difficulty():
    """選擇遊戲難度"""
    print("請選擇遊戲難度:")
    print("1. 簡單 (1-10, 10 次機會)")
    print("2. 中等 (1-50, 7 次機會)")
    print("3. 困難 (1-100, 5 次機會)")

    while True:
        try:
            choice = int(input("請輸入難度選項 (1-3): "))
            if choice == 1:
                return 10, 10
            elif choice == 2:
                return 7, 50
            elif choice == 3:
                return 5, 100
            else:
                print("無效的選項,請重新輸入。")
        except ValueError:
            print("請輸入一個有效的整數。")

def main():
    """主程式"""
    while True:
        max_guesses, number_range = choose_difficulty()
        if play_guessing_game(max_guesses, number_range):
            print("你贏了!")
        else:
            print("你輸了!")

        play_again = input("想再玩一次嗎? (y/n): ")
        if play_again.lower() != 'y':
            break

if __name__ == "__main__":
    main()

程式碼說明:

  1. play_guessing_game(max_guesses, number_range) 函式:

    • 接收最大猜測次數 max_guesses 和數字範圍 number_range 作為引數。
    • 生成一個 1 到 number_range 之間的隨機整數。
    • 提示使用者猜測的範圍和剩餘次數。
    • 使用 while 迴圈,讓使用者在限制次數內猜測數字。
    • 在迴圈中,使用 try-except 區塊來處理使用者輸入的錯誤,例如輸入非整數或超出範圍的數字。
    • 如果使用者猜對了數字,印出恭喜訊息,並回傳 True
    • 如果使用者沒有猜對,印出正確答案,並回傳 False
  2. choose_difficulty() 函式:

    • 讓使用者選擇遊戲難度,不同的難度對應不同的猜測範圍和次數限制。
    • 使用 while 迴圈,直到使用者輸入有效的選項。
    • 回傳最大猜測次數和數字範圍。
  3. main() 函式:

    • 是主程式,負責控制遊戲的流程。
    • 使用 while 迴圈,讓使用者可以重複玩遊戲。
    • 在迴圈中,先呼叫 choose_difficulty() 函式讓使用者選擇難度。
    • 然後呼叫 play_guessing_game() 函式開始遊戲。
    • 根據遊戲結果印出相應的訊息。
    • 詢問使用者是否要再玩一次,如果使用者輸入 y,則繼續迴圈;否則,結束迴圈。

執行結果:

執行這段程式碼後,你會看到類別似以下的輸出:

請選擇遊戲難度:
1. 簡單 (1-10, 10 次機會)
2. 中等 (1-50, 7 次機會)
3. 困難 (1-100, 5 次機會)
請輸入難度選項 (1-3): 2
我已經選好了一個 1 到 50 之間的數字。
你有 7 次猜測機會。
請猜一個數字:25
太小了!
你還有 6 次猜測機會。
請猜一個數字:37
太大了!
你還有 5 次猜測機會。
請猜一個數字:30
太小了!
你還有 4 次猜測機會。
請猜一個數字:33
太小了!
你還有 3 次猜測機會。
請猜一個數字:35
太大了!
你還有 2 次猜測機會。
請猜一個數字:34
恭喜你,猜對了!你用了 6 次猜測。
你贏了!
想再玩一次嗎? (y/n): n

程式碼最佳化建議:

  • 使用函式(Function)模組化程式碼: 將不同的遊戲功能封裝到不同的函式中,例如 generate_number()get_user_guess()check_guess() 等,使程式碼更易於閱讀和維護。
  • 增加輸入驗證: 確保使用者輸入的是有效的數字,並在輸入無效時給予明確的提示。
  • 提供更多遊戲提示: 例如,可以提示使用者猜測的數字是奇數還是偶數,或者提供一個範圍提示,告訴使用者數字在哪個區間內。

透過本文,各位讀者學習瞭如何使用 Python 開發猜數字遊戲,從基礎版到進階版,逐步增加了遊戲的功能和趣味性。玄貓(BlackCat)希望您能從中掌握 Python 程式設計的核心概念,並將其應用到其他專案中。Python 是一門功能強大與易於學習的程式語言,非常適合初學者入門。透過不斷的練習和實作,各位讀者一定能成為一位優秀的 Python 開發者。

客製化猜數字遊戲:Python 難度分級實作

開發獨一無二的猜數字遊戲:Python 實作難度分級

身為一位熱愛程式設計的技術部落客,玄貓(BlackCat)這次將帶領大家深入瞭解如何使用 Python 開發一款更具挑戰性的猜數字遊戲。不同於傳統的猜數字遊戲,我們將加入難度分級功能,讓玩家可以根據自身程度選擇遊戲難度,增加遊戲的趣味性和挑戰性。

猜數字遊戲的核心邏輯

在深入難度分級的實作之前,我們先來回顧一下猜數字遊戲的核心邏輯。遊戲的目標是讓玩家猜出電腦隨機產生的一個數字。玩家每次猜測後,電腦會給予提示,告訴玩家猜測的數字是太大了還是太小了,直到玩家猜對為止。

以下是 Python 實作猜數字遊戲核心邏輯的程式碼:

import random

def play_guessing_game(max_guesses, number_range):
    """玩猜數字遊戲"""
    number = random.randint(1, number_range)
    guesses_left = max_guesses
    print(f"我已經選好了一個 1 到 {number_range} 之間的數字。")
    print(f"你有 {max_guesses} 次猜測機會。")

    while guesses_left > 0:
        try:
            guess = int(input("請猜一個數字:"))
            if guess < 1 or guess > number_range:
                print(f"請輸入 1 到 {number_range} 之間的數字。")
                continue  # 跳過本次迴圈,重新輸入
        except ValueError:
            print("請輸入一個有效的整數。")
            continue  # 跳過本次迴圈,重新輸入

        guesses_left -= 1

        if guess == number:
            print(f"恭喜你,猜對了!你用了 {max_guesses - guesses_left} 次猜測。")
            return True  # 猜對了,回傳 True
        elif guess < number:
            print("太小了!")
        else:
            print("太大了!")

        print(f"你還有 {guesses_left} 次猜測機會。")

    print(f"你沒有猜到!正確答案是 {number}。")
    return False  # 沒有猜對,回傳 False

這段程式碼使用 random.randint() 函式產生一個指定範圍內的隨機整數,並使用 while 迴圈讓玩家重複猜測,直到猜對或用完所有猜測次數為止。try...except 區塊則是用於處理玩家輸入非整數的情況,確保程式不會因為錯誤的輸入而當機。

難度分級的實作:客製化遊戲體驗

為了增加遊戲的挑戰性和趣味性,我們可以加入難度分級功能,讓玩家可以根據自身程度選擇遊戲難度。例如,我們可以設定三個難度等級:

  • 簡單: 數字範圍 1-10,5 次猜測機會
  • 普通: 數字範圍 1-50,7 次猜測機會
  • 困難: 數字範圍 1-100,10 次猜測機會

以下是如何使用 Python 實作難度分級的程式碼:

def choose_difficulty():
    """選擇遊戲難度"""
    while True:
        print("\n請選擇遊戲難度:")
        print("1.簡單 (1-10, 5 次機會)")
        print("2.普通 (1-50, 7 次機會)")
        print("3.困難 (1-100, 10 次機會)")

        try:
            choice = int(input("請輸入難度選項 (1-3):"))
            if 1 <= choice <= 3:
                return choice
            else:
                print("請輸入 1 到 3 之間的數字。")
        except ValueError:
            print("請輸入一個有效的整數。")

這個 choose_difficulty() 函式使用 while 迴圈讓玩家重複選擇難度,直到輸入有效的選項為止。try...except 區塊同樣是用於處理玩家輸入非整數的情況。

整合核心邏輯與難度分級

現在,我們需要將核心邏輯與難度分級功能整合在一起,才能完成整個猜數字遊戲。以下是整合後的程式碼:

import random

def play_guessing_game(max_guesses, number_range):
    """玩猜數字遊戲"""
    number = random.randint(1, number_range)
    guesses_left = max_guesses
    print(f"我已經選好了一個 1 到 {number_range} 之間的數字。")
    print(f"你有 {max_guesses} 次猜測機會。")

    while guesses_left > 0:
        try:
            guess = int(input("請猜一個數字:"))
            if guess < 1 or guess > number_range:
                print(f"請輸入 1 到 {number_range} 之間的數字。")
                continue  # 跳過本次迴圈,重新輸入
        except ValueError:
            print("請輸入一個有效的整數。")
            continue  # 跳過本次迴圈,重新輸入

        guesses_left -= 1

        if guess == number:
            print(f"恭喜你,猜對了!你用了 {max_guesses - guesses_left} 次猜測。")
            return True  # 猜對了,回傳 True
        elif guess < number:
            print("太小了!")
        else:
            print("太大了!")

        print(f"你還有 {guesses_left} 次猜測機會。")

    print(f"你沒有猜到!正確答案是 {number}。")
    return False  # 沒有猜對,回傳 False

def choose_difficulty():
    """選擇遊戲難度"""
    while True:
        print("\n請選擇遊戲難度:")
        print("1.簡單 (1-10, 5 次機會)")
        print("2.普通 (1-50, 7 次機會)")
        print("3.困難 (1-100, 10 次機會)")

        try:
            choice = int(input("請輸入難度選項 (1-3):"))
            if 1 <= choice <= 3:
                return choice
            else:
                print("請輸入 1 到 3 之間的數字。")
        except ValueError:
            print("請輸入一個有效的整數。")

def main():
    """主程式"""
    while True:
        difficulty = choose_difficulty()

        if difficulty == 1:
            max_guesses = 5
            number_range = 10
        elif difficulty == 2:
            max_guesses = 7
            number_range = 50
        else:  # difficulty == 3
            max_guesses = 10
            number_range = 100

        game_won = play_guessing_game(max_guesses, number_range)

        play_again = input("想再玩一次嗎?(y/n): ")
        if play_again.lower() != "y":
            break

    print("謝你的遊玩!")

if __name__ == "__main__":
    main()

這個 main() 函式首先呼叫 choose_difficulty() 函式讓玩家選擇難度,然後根據選擇的難度設定 max_guessesnumber_range,最後呼叫 play_guessing_game() 函式開始遊戲。遊戲結束後,詢問玩家是否要再玩一次,如果玩家不想再玩,就結束程式。

例外處理的重要性

在程式設計中,例外處理(Exception Handling)扮演著至關重要的角色。它可以協助我們預防程式在執行過程中因為未預期的錯誤而當機,並提供更友善的使用者經驗。

在我們的猜數字遊戲中,我們使用了 try...except 區塊來處理可能發生的 ValueError 異常。當玩家輸入非整數時,int(input("請猜一個數字:")) 函式會丟擲 ValueError 異常。此時,except 區塊中的程式碼就會被執行,提示玩家輸入有效的整數,並讓玩家重新輸入。

如果我們沒有使用 try...except 區塊來處理 ValueError 異常,當玩家輸入非整數時,程式就會當機,並顯示錯誤訊息。這會讓使用者感到困惑和沮喪,並降低使用者經驗。

因此,在程式設計中,我們應該養成良好的習慣,使用案例外處理來處理可能發生的錯誤,確保程式的穩定性和可靠性。

客製化遊戲規則:開發個人化的猜數字體驗

除了難度分級之外,我們還可以透過修改程式碼,客製化猜數字遊戲的規則,開發更個人化的遊戲體驗。例如,我們可以:

  • 增加猜測次數的限制
  • 改變數字的範圍
  • 加入提示功能
  • 設定不同的獎勵

透過客製化遊戲規則,我們可以讓猜數字遊戲更符合自己的喜好,並增加遊戲的趣味性和挑戰性。

結語

透過這次的實作,我們不僅學會瞭如何使用 Python 開發一款具備難度分級的猜數字遊戲,也瞭解了例外處理的重要性以及如何客製化遊戲規則。希望大家能夠將這些知識應用到自己的專案中,創造出更多有趣與實用的程式。身為玄貓(BlackCat),我鼓勵大家持續精程式設計技能,探索更多技術的可能性。