演習 - ルールを追加してゲームの実装を拡張する

完了

会社は、オブジェクト指向プログラミング (OOP) によるじゃんけんの実装に満足しています。 近頃のクールな子供はみんなそれで遊んでいるという理由から、ゲームを石、紙、ハサミ、トカゲ、スポックに変更しようと考えるほどです。

トカゲとスポックの選択を追加する

トカゲとスポックの 2 つの選択肢を追加するとなると、かなりの変更になるように思われます。 ルールの実装方法のおかげで、必要な変更は軽微です。

トカゲとスポックのルールは何ですか?

ハサミはトカゲの首を切り、ハサミは紙を切り、紙は石を包み、石はトカゲを潰し、トカゲはスポックに毒を盛り、スポックはハサミを壊し、ハサミはトカゲの首を切り、トカゲは紙を食べ、紙はスポックの誤りを指摘し、スポックは石を蒸発させ、石はこれまでどおりハサミを壊します。

上の説明は、次の更新されたルール テーブルに変換できます。

選択肢 論文 ハサミ トカゲ スポック
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
    

おめでとうございます。 コードの作業を最小限に抑えながら、"トカゲ" と "スポック" の 2 つの選択肢をゲームに追加しました。