通過構建一個簡單的擲骰子游戲去學習怎麼用 Python 程式設計

贊 回覆發表於2017-11-20

不論是經驗豐富的老程式設計師,還是沒有經驗的新手,Python 都是一個非常好的程式語言。

 

Python 是一個非常流行的程式語言,它可以用於建立桌面應用程式、3D 圖形、視訊遊戲、甚至是網站。它是非常好的首選程式語言,因為它易於學習,不像一些複雜的語言,比如,C、 C++、 或 Java。 即使如此, Python 依然也是強大且健壯的,足以建立高階的應用程式,並且幾乎適用於所有使用電腦的行業。不論是經驗豐富的老程式設計師,還是沒有經驗的新手,Python 都是一個非常好的程式語言。

安裝 Python

在學習 Python 之前,你需要先去安裝它:

Linux: 如果你使用的是 Linux 系統, Python 是已經包含在裡面了。但是,你如果確定要使用 Python 3 。應該去檢查一下你安裝的 Python 版本,開啟一個終端視窗並輸入:

python3 -V

如果提示該命令沒有找到,你需要從你的包管理器中去安裝 Python 3。

MacOS: 如果你使用的是一臺 Mac,可以看上面 Linux 的介紹來確認是否安裝了 Python 3。MacOS 沒有內建的包管理器,因此,如果發現沒有安裝 Python 3,可以從 python.org/downloads/mac-osx 安裝它。即使 macOS 已經安裝了 Python 2,你還是應該學習 Python 3。

Windows: 微軟 Windows 當前是沒有安裝 Python 的。從 python.org/downloads/windows 安裝它。在安裝嚮導中一定要選擇 Add Python to PATH 來將 Python 執行程式放到搜尋路徑。

在 IDE 中執行

在 Python 中寫程式,你需要準備一個文字編輯器,使用一個整合開發環境(IDE)是非常實用的。IDE 在一個文字編輯器中整合了一些方便而有用的 Python 功能。IDLE 3 和 NINJA-IDE 是你可以考慮的兩種選擇:

IDLE 3

Python 自帶的一個基本的 IDE 叫做 IDLE。

IDLE

它有關鍵字高亮功能,可以幫助你檢測拼寫錯誤,並且有一個“執行”按鈕可以很容易地快速測試程式碼。

要使用它:

  • 在 Linux 或 macOS 上,啟動一個終端視窗並輸入 idle3
  • 在 Windows,從開始選單中啟動 Python 3。
    • 如果你在開始選單中沒有看到 Python,在開始選單中通過輸入 cmd 啟動 Windows 命令提示符,然後輸入 C:\Windows\py.exe
    • 如果它沒有執行,試著重新安裝 Python。並且確認在安裝嚮導中選擇了 “Add Python to PATH”。參考 docs.python.org/3/using/windows.html 中的詳細介紹。
    • 如果仍然不能執行,那就使用 Linux 吧!它是免費的,只要將你的 Python 檔案儲存到一個 U 盤中,你甚至不需要安裝它就可以使用。

Ninja-IDE

Ninja-IDE 是一個優秀的 Python IDE。它有關鍵字高亮功能可以幫助你檢測拼寫錯誤、引號和括號補全以避免語法錯誤,行號(在除錯時很有幫助)、縮排標記,以及執行按鈕可以很容易地進行快速程式碼測試。

Ninja-IDE

要使用它:

  1. 安裝 Ninja-IDE。如果你使用的是 Linux,使用包管理器安裝是非常簡單的;否則, 從 NINJA-IDE 的網站上 下載 合適的安裝版本。
  2. 啟動 Ninja-IDE。
  3. 轉到 Edit 選單,並選擇 Preferences 設定。
  4. 在 Preferences 視窗中,點選 Execution 選項卡。
  5. 在 Execution 選項卡上,更改 python 為 python3

Python3 in Ninja-IDE

Ninja-IDE 中的 Python3

告訴 Python 想做什麼

關鍵字可以告訴 Python 你想要做什麼。不論是在 IDLE 還是在 Ninja 中,轉到 File 選單並建立一個新檔案。對於 Ninja 使用者:不要建立一個新專案,僅建立一個新檔案。

在你的新的空檔案中,在 IDLE 或 Ninja 中輸入以下內容:

    print("Hello world.")
  • 如果你使用的是 IDLE,轉到 Run 選單並選擇 Run module 選項。
  • 如果你使用的是 Ninja,在左側按鈕條中點選 Run File 按鈕。

Run file in Ninja

在 Ninja 中執行檔案

關鍵字 print 告訴 Python 去列印輸出在圓括號中引用的文字內容。

雖然,這並不是特別刺激。在其內部, Python 只能訪問基本的關鍵字,像 print、 help,最基本的數學函式,等等。

可以使用 import 關鍵字載入更多的關鍵字。在 IDLE 或 Ninja 中開始一個新檔案,命名為 pen.py

警告:不要命名你的檔名為 turtle.py,因為名為 turtle.py 的檔案是包含在你正在控制的 turtle (海龜)程式中的。命名你的檔名為 turtle.py ,將會把 Python 搞糊塗,因為它會認為你將匯入你自己的檔案。

在你的檔案中輸入下列的程式碼,然後執行它:

    import turtle

Turtle 是一個非常有趣的模組,試著這樣做:

    turtle.begin_fill()
    turtle.forward(100)
    turtle.left(90)
    turtle.forward(100)
    turtle.left(90)
    turtle.forward(100)
    turtle.left(90)
    turtle.forward(100)
    turtle.end_fill()

看一看你現在用 turtle 模組畫出了一個什麼形狀。

要擦除你的海龜畫圖區,使用 turtle.clear() 關鍵字。想想看,使用 turtle.color("blue") 關鍵字會出現什麼情況?

嘗試更復雜的程式碼:

    import turtle as t
    import time

    t.color("blue")
    t.begin_fill()

    counter=0

    while counter < 4:
        t.forward(100)
        t.left(90)
        counter = counter+1

    t.end_fill()
    time.sleep(5)

執行完你的指令碼後,是時候探索更有趣的模組了。

通過建立一個遊戲來學習 Python

想學習更多的 Python 關鍵字,和用圖形程式設計的高階特性,讓我們來關注於一個遊戲邏輯。在這個教程中,我們還將學習一些關於計算機程式是如何構建基於文字的遊戲的相關知識,在遊戲裡面計算機和玩家擲一個虛擬骰子,其中擲的最高的是贏家。

規劃你的遊戲

在寫程式碼之前,最重要的事情是考慮怎麼去寫。在他們寫程式碼 之前,許多程式設計師是先 寫簡單的文件,這樣,他們就有一個程式設計的目標。如果你想給這個程式寫個文件的話,這個遊戲看起來應該是這樣的:

  1. 啟動擲骰子游戲並按下 Return 或 Enter 去擲骰子
  2. 結果列印在你的螢幕上
  3. 提示你再次擲骰子或者退出

這是一個簡單的遊戲,但是,文件會告訴你需要做的事很多。例如,它告訴你寫這個遊戲需要下列的元件:

  • 玩家:你需要一個人去玩這個遊戲。
  • AI:計算機也必須去擲,否則,就沒有什麼輸或贏了
  • 隨機數:一個常見的六面骰子表示從 1-6 之間的一個隨機數
  • 運算:一個簡單的數學運算去比較一個數字與另一個數字的大小
  • 一個贏或者輸的資訊
  • 一個再次玩或退出的提示

製作擲骰子游戲的 alpha 版

很少有程式,一開始就包含其所有的功能,因此,它們的初始版本僅實現最基本的功能。首先是幾個定義:

變數是一個經常要改變的值,它在 Python 中使用的非常多。每當你需要你的程式去“記住”一些事情的時候,你就要使用一個變數。事實上,執行於程式碼中的資訊都儲存在變數中。例如,在數學方程式 x + 5 = 20 中,變數是 x ,因為字母  x 是一個變數佔位符。

整數是一個數字, 它可以是正數也可以是負數。例如,1-1 都是整數,因此,1421,甚至 10947 都是。

在 Python 中變數建立和使用是非常容易的。這個擲骰子游戲的初始版使用了兩個變數: player 和 ai

在命名為 dice_alpha.py 的新檔案中輸入下列程式碼:

    import random

    player = random.randint(1,6)
    ai = random.randint(1,6)

    if player > ai :
        print("You win")  # notice indentation
    else:
        print("You lose")

啟動你的遊戲,確保它能工作。

這個遊戲的基本版本已經工作的非常好了。它實現了遊戲的基本目標,但是,它看起來不像是一個遊戲。玩家不知道他們搖了什麼,電腦也不知道搖了什麼,並且,即使玩家還想玩但是遊戲已經結束了。

這是軟體的初始版本(通常稱為 alpha 版)。現在你已經確信實現了遊戲的主要部分(擲一個骰子),是時候該加入到程式中了。

改善這個遊戲

在你的遊戲的第二個版本中(稱為 beta 版),將做一些改進,讓它看起來像一個遊戲。

1、 描述結果

不要只告訴玩家他們是贏是輸,他們更感興趣的是他們擲的結果。在你的程式碼中嘗試做如下的改變:

    player = random.randint(1,6)
    print("You rolled " + player)

    ai = random.randint(1,6)
    print("The computer rolled " + ai)

現在,如果你執行這個遊戲,它將崩潰,因為 Python 認為你在嘗試做數學運算。它認為你試圖在 player 變數上加字母 You rolled ,而儲存在其中的是數字。

你必須告訴 Python 處理在 playerai 變數中的數字,就像它們是一個句子中的單詞(一個字串)而不是一個數學方程式中的一個數字(一個整數)。

在你的程式碼中做如下的改變:

    player = random.randint(1,6)
    print("You rolled " + str(player) )

    ai = random.randint(1,6)
    print("The computer rolled " + str(ai) )

現在執行你的遊戲將看到該結果。

2、 讓它慢下來

計算機執行的非常快。人有時可以很快,但是在遊戲中,產生懸念往往更好。你可以使用 Python 的 time 函式,在這個緊張時刻讓你的遊戲慢下來。

    import random
    import time

    player = random.randint(1,6)
    print("You rolled " + str(player) )

    ai = random.randint(1,6)
    print("The computer rolls...." )
    time.sleep(2)
    print("The computer has rolled a " + str(player) )

    if player > ai :
        print("You win")  # notice indentation
    else:
        print("You lose")

啟動你的遊戲去測試變化。

3、 檢測關係

如果你多玩幾次你的遊戲,你就會發現,即使你的遊戲看起來執行很正確,它實際上是有一個 bug 在裡面:當玩家和電腦搖出相同的數字的時候,它就不知道該怎麼辦了。

去檢查一個值是否與另一個值相等,Python 使用 ==。那是個“雙”等號標記,不是一個。如果你僅使用一個,Python 認為你嘗試去建立一個新變數,但是,實際上你是去嘗試做數學運算。

當你想有比兩個選項(即,贏或輸)更多的選擇時,你可以使用 Python 的 elif 關鍵字,它的意思是“否則,如果”。這允許你的程式碼去檢查,是否在“許多”結果中有一個是 true, 而不是隻檢查“一個”是 true

像這樣修改你的程式碼:

    if player > ai :
        print("You win")  # notice indentation
    elif player == ai:
        print("Tie game.")
    else:
        print("You lose")

多執行你的遊戲幾次,去看一下你能否和電腦搖出一個平局。

編寫最終版

你的擲骰子游戲的 beta 版的功能和感覺比起 alpha 版更像遊戲了,對於最終版,讓我們來建立你的第一個 Python 函式

函式是可以作為一個獨立的單元來呼叫的一組程式碼的集合。函式是非常重要的,因為,大多數應用程式裡面都有許多程式碼,但不是所有的程式碼都只執行一次。函式可以啟用應用程式並控制什麼時候可以發生什麼事情。

將你的程式碼變成這樣:

    import random
    import time

    def dice():
        player = random.randint(1,6)
        print("You rolled " + str(player) )

        ai = random.randint(1,6)
        print("The computer rolls...." )
        time.sleep(2)
        print("The computer has rolled a " + str(player) )

        if player > ai :
            print("You win")  # notice indentation
        else:
            print("You lose")

        print("Quit? Y/N")
        cont = input()

        if cont == "Y" or cont == "y":
            exit()
        elif cont == "N" or cont == "n":
            pass
        else:
            print("I did not understand that. Playing again.")

遊戲的這個版本,在他們玩遊戲之後會詢問玩家是否退出。如果他們用一個 Y 或 y 去響應, Python 就會呼叫它的 exit 函式去退出遊戲。

更重要的是,你將建立一個稱為 dice 的你自己的函式。這個 dice 函式並不會立即執行,事實上,如果在這個階段你嘗試去執行你的遊戲,它不會崩潰,但它也不會正式執行。要讓 dice 函式真正執行起來做一些事情,你必須在你的程式碼中去呼叫它

在你的現有程式碼下面增加這個迴圈,前兩行就是上文中的前兩行,不需要再次輸入,並且要注意哪些需要縮排哪些不需要。要注意縮排格式

        else:
            print("I did not understand that. Playing again.")

    # main loop
    while True:
        print("Press return to roll your die.")
        roll = input()
        dice()

while True 程式碼塊首先執行。因為 True 被定義為總是真,這個程式碼塊將一直執行,直到 Python 告訴它退出為止。

while True 程式碼塊是一個迴圈。它首先提示使用者去啟動這個遊戲,然後它呼叫你的 dice 函式。這就是遊戲的開始。當 dice 函式執行結束,根據玩家的回答,你的迴圈再次執行或退出它。

使用迴圈來執行程式是編寫應用程式最常用的方法。迴圈確保應用程式保持長時間的可用,以便計算機使用者使用應用程式中的函式。

下一步

現在,你已經知道了 Python 程式設計的基礎知識。這個系列的下一篇文章將描述怎麼使用 PyGame 去編寫一個視訊遊戲,一個比 turtle 模組有更多功能的模組,但它也更復雜一些。


作者簡介:

Seth Kenlon - 一個獨立的多媒體大師,自由文化的倡導者,和 UNIX 極客。他同時從事電影和計算機行業。他是基於 slackwarers 的多媒體制作專案的維護者之一, http://slackermedia.info


via: https://opensource.com/article/17/10/python-101

作者:Seth Kenlon 譯者:qhwdw 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章