練習 - 使用新增的規則擴充遊戲實作

已完成

您公司對「剪刀、石頭、布」物件導向程式設計 (OOP) 實作相當滿意。 因此他們希望您將遊戲變更為剪刀、石頭、布、蜥蜴、史巴克,因為現今新潮的孩子都會這樣玩。

新增「蜥蜴」和「史巴克」選項

新增兩個「蜥蜴」和「史巴克」這樣的選項聽起來要變更許多內容。 但多虧您執行規則的方式,所需的變更其實微乎其微。

「蜥蜴」和「史巴克」的規則是什麼?

剪刀斬首蜥蜴、剪刀切斷布、布包住石頭、石頭砸死蜥蜴、蜥蜴毒死史巴克、史巴克踩碎剪刀、剪刀斬首蜥蜴、蜥蜴吃掉布、布證明史巴克不存在、史巴克融化石頭、以及一如往常地,石頭壓碎剪刀。

上述描述可以轉譯成這個更新的規則資料表:

選擇 石頭 剪刀 蜥蜴 史巴克
石頭 0 -1 1 1 -1
1 0 -1 -1 1
剪刀 -1 1 0 1 -1
蜥蜴 -1 1 -1 0 1
史巴克 1 -1 1 -1 0
  1. 找出 Participant 類別,然後更新方法 toNumericalChoice(),使其看起來像這樣:

        def toNumericalChoice(self):
            switcher = {
                 "rock": 0,
                 "paper": 1,
                 "scissor": 2,
                 "lizard": 3,
                 "spock": 4
            }
            return switcher[self.choice]
    
  2. 找出 GameRound 類別。 在方法 __init__() 中,將 self.rules 變數變更為此程式碼:

            self.rules = [
                [0, -1, 1, 1, -1],
                [1, 0, -1, -1, 1],
                [-1, 1, 0, 1, -1],
                [-1, 1, -1, 0, 1],
                [1, -1, 1, -1, 0]
            ]
    
  3. 找出 Participant 類別。 更新方法 choose 以便納入新選項:

        def choose(self):
            self.choice = input("{name}, select rock, paper, scissor, lizard or Spock: ".format(name= self.name))
            print("{name} selects {choice}".format(name=self.name, choice = self.choice))
    
  4. 儲存檔案,然後執行 python3 rock-paper-scissor.py 以試驗您所作的變更:

    python3 rock-paper-scissor.py
    

    選取 spockpaper,以查看規則是否正常運作。 您的輸出訊息看起來應類似下列範例:

    Spock, select rock, paper, scissor, lizard or spock: spock
    Spock selects spock
    Kirk, select rock, paper, scissor, lizard or spock: paper
    Kirk selects paper
    Round resulted in a loss
    Continue game y/n: n
    Game ended, Spock has 0, and Kirk has 1
    Winner is Kirk
    

恭喜! 您已將蜥蜴史巴克這兩個選項新增至遊戲中,而且沒有在程式碼上花費多少力氣。