練習 - 為您的遊戲建立模型並進行 Scaffold

已完成

遊戲與上個單元中提及的發票系統相去不遠。 在物件導向程式設計 (OOP) 的世界中,其仍然具有相同的元素。 這些元素為物件、資料和行為。 就像我們對發票系統所做的動作,您可以先描述領域,為「剪刀、石頭、布」這類型的遊戲建立模型,然後嘗試列出詳細內容。 您接下來要為遊戲建立模型。 您也會撰寫一些程式碼,可稍後用於建置。

分析「剪刀、石頭、布」,以建立 OOP 模型

本練習是一種模型練習。 系統會提供您一個問題領域的描述, 然後會要求您從文字中擷取重要關鍵字,並將其排列於資料表中。

提示

如需回想如何建立模型,請參閱第二單元中的〈尋找物件、資料和行為〉一節。 請記住,建立模型始於提出誰與誰互動誰對誰做了什麼等問題。

問題說明

「剪刀、石頭、布」這項遊戲由兩位參與者進行。 遊戲由回合組成。 在每個回合中,參與者會從剪刀、石頭或布中選擇一個符號,而另一名參與者也會執行相同的動作。 接著比較雙方所選符號,並藉此來決定該回合的贏家。 遊戲的規則是:石頭贏剪刀,剪刀贏 (剪) 布,布贏 (包住) 石頭。 每一回合的贏家可獲得 1 分。 只要參與者同意,遊戲就繼續,回合不限。 分數最高的參與者為最終贏家。

為遊戲建立模型

  1. 將上述文字複製並貼到文件中。 將重要關鍵字設為粗體或斜體以作為醒目提示。

    提示

    請花幾分鐘的時間,試著將您認為是重要關鍵字的內容加上底線。 完成之後,請向下捲動至醒目提示重要部分的文字。

    以下是具有醒目提示的問題說明文字:

    「剪刀、石頭、布」這項遊戲由兩位參與者進行。 遊戲由回合組成。 在每個回合中,參與者會從剪刀石頭中選擇一個符號,而另一名參與者也會執行相同的動作。 接著比較雙方所選符號,並藉此來決定該回合的贏家。 遊戲的規則是:石頭贏剪刀,剪刀贏 (剪) 布,布贏 (包住) 石頭。 每一回合的贏家可獲得 1 。 只要參與者同意,遊戲就繼續,回合不限。 分數最高的參與者為最終贏家。

  2. 接下來,建立具有 PhaseActorBehaviorData 資料行的資料表。 將醒目提示文字排列在您認為應放置的地方。

    提示

    請花幾分鐘的時間思考這個過程,並在您思考後向下捲動。

    結果資料表應如下所示:

    階段 演員 行為 資料
    輸入 參與者 選擇符號 Participant(choice) 上儲存為「選擇」的符號
    加工業 GameRound 比較遊戲規則的選擇 已檢查的「結果」
    加工業 GameRound 以結果值為基礎的獎勵積分 新增到獲勝 Participant(point) 的「積分」
    加工業 遊戲 檢查後續解答 答案為真即繼續,否則結束
    輸出 遊戲 新的遊戲回合或遊戲結束點數

建立類別和狀態

上表說明遊戲經歷不同階段的進展過程。 重點在 BehaviorData 這兩個資料行,您可以「建構」一些初始程式碼,作為建立遊戲的基礎。

  1. 將下列程式碼複製到終端機,然後按 Enter 鍵,以建立 rock-paper-scissor.py 檔案並開啟編輯器:

    touch rock-paper-scissor.py
    code .
    

    提示

    使用捷徑功能表 (按一下滑鼠右鍵),將程式碼貼到終端機。

  2. 提供下列內容,並儲存檔案 (Ctrl+S,或 macOS 上的 Command+S):

    class Participant:
    class GameRound:
    class Game:
    

    提示

    使用 Ctrl+V 將程式碼貼到編輯器。

    您已為遊戲建立了所需的類別。 接下來,您需要思考有哪些資料,以及該放入哪個類別。

  3. 繼續使用同一個檔案,並像這樣展開程式碼,然後儲存檔案:

    class Participant:
        def __init__(self):
            self.points = 0
            self.choice = ""
    
    class GameRound:
    
    class Game:
        def __init__(self):
            self.endGame = False
            self.participant = Participant()
            self.secondParticipant = Participant()
    
    

    提示

    • 您可以拖曳編輯器和終端機之間分隔線,以調整可用的空間。
    • 您可以從 ... 功能表關閉編輯器。
    • 您可以在終端機輸入 code .,以重新開啟編輯器。

    如資料表第一行和第三行所示,我們為 Participant 類別添加 pointschoice 屬性。

    根據第四行,我們為 Game 添加 endGame 欄位。 此外,Game 類別有兩個參與者 participantsecondParticipant。 物件上的變數過去可有兩個角色。 這些角色可以是狀態,例如電梯的樓層,或描述性的屬性。 pointschoice 屬性是此內容中的狀態變數。 Game 類別的參與者是描述性屬性,因為遊戲「有」參與者。

    恭喜! 您已將類別新增至遊戲並建立了資料,即已指派給所建立類別的屬性。 此時,您有很好的起始程式碼。 因為其需要行為,所以還不會做什麼。 您將在下一個練習單元中新增行為。