練習 - 為您的遊戲建立模型並進行 Scaffold
遊戲與上個單元中提及的發票系統相去不遠。 在物件導向程式設計 (OOP) 的世界中,其仍然具有相同的元素。 這些元素為物件、資料和行為。 就像我們對發票系統所做的動作,您可以先描述領域,為「剪刀、石頭、布」這類型的遊戲建立模型,然後嘗試列出詳細內容。 您接下來要為遊戲建立模型。 您也會撰寫一些程式碼,可稍後用於建置。
分析「剪刀、石頭、布」,以建立 OOP 模型
本練習是一種模型練習。 系統會提供您一個問題領域的描述, 然後會要求您從文字中擷取重要關鍵字,並將其排列於資料表中。
提示
如需回想如何建立模型,請參閱第二單元中的〈尋找物件、資料和行為〉一節。 請記住,建立模型始於提出誰與誰互動或誰對誰做了什麼等問題。
問題說明
「剪刀、石頭、布」這項遊戲由兩位參與者進行。 遊戲由回合組成。 在每個回合中,參與者會從剪刀、石頭或布中選擇一個符號,而另一名參與者也會執行相同的動作。 接著比較雙方所選符號,並藉此來決定該回合的贏家。 遊戲的規則是:石頭贏剪刀,剪刀贏 (剪) 布,布贏 (包住) 石頭。 每一回合的贏家可獲得 1 分。 只要參與者同意,遊戲就繼續,回合不限。 分數最高的參與者為最終贏家。
為遊戲建立模型
將上述文字複製並貼到文件中。 將重要關鍵字設為粗體或斜體以作為醒目提示。
提示
請花幾分鐘的時間,試著將您認為是重要關鍵字的內容加上底線。 完成之後,請向下捲動至醒目提示重要部分的文字。
以下是具有醒目提示的問題說明文字:
「剪刀、石頭、布」這項遊戲由兩位參與者進行。 遊戲由回合組成。 在每個回合中,參與者會從剪刀、石頭或布中選擇一個符號,而另一名參與者也會執行相同的動作。 接著比較雙方所選符號,並藉此來決定該回合的贏家。 遊戲的規則是:石頭贏剪刀,剪刀贏 (剪) 布,布贏 (包住) 石頭。 每一回合的贏家可獲得 1 分。 只要參與者同意,遊戲就繼續,回合不限。 分數最高的參與者為最終贏家。
接下來,建立具有
Phase
、Actor
、Behavior
和Data
資料行的資料表。 將醒目提示文字排列在您認為應放置的地方。提示
請花幾分鐘的時間思考這個過程,並在您思考後向下捲動。
結果資料表應如下所示:
階段 演員 行為 資料 輸入 參與者 選擇符號 Participant(choice) 上儲存為「選擇」的符號 加工業 GameRound 比較遊戲規則的選擇 已檢查的「結果」 加工業 GameRound 以結果值為基礎的獎勵積分 新增到獲勝 Participant(point) 的「積分」 加工業 遊戲 檢查後續解答 答案為真即繼續,否則結束 輸出 遊戲 新的遊戲回合或遊戲結束點數
建立類別和狀態
上表說明遊戲經歷不同階段的進展過程。 重點在 Behavior
和 Data
這兩個資料行,您可以「建構」一些初始程式碼,作為建立遊戲的基礎。
將下列程式碼複製到終端機,然後按 Enter 鍵,以建立
rock-paper-scissor.py
檔案並開啟編輯器:touch rock-paper-scissor.py code .
提示
使用捷徑功能表 (按一下滑鼠右鍵),將程式碼貼到終端機。
提供下列內容,並儲存檔案 (Ctrl+S,或 macOS 上的 Command+S):
class Participant: class GameRound: class Game:
提示
使用 Ctrl+V 將程式碼貼到編輯器。
您已為遊戲建立了所需的類別。 接下來,您需要思考有哪些資料,以及該放入哪個類別。
繼續使用同一個檔案,並像這樣展開程式碼,然後儲存檔案:
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
類別添加points
和choice
屬性。根據第四行,我們為
Game
添加endGame
欄位。 此外,Game
類別有兩個參與者participant
和secondParticipant
。 物件上的變數過去可有兩個角色。 這些角色可以是狀態,例如電梯的樓層,或描述性的屬性。points
和choice
屬性是此內容中的狀態變數。Game
類別的參與者是描述性屬性,因為遊戲「有」參與者。恭喜! 您已將類別新增至遊戲並建立了資料,即已指派給所建立類別的屬性。 此時,您有很好的起始程式碼。 因為其需要行為,所以還不會做什麼。 您將在下一個練習單元中新增行為。