演習 - ルールを追加してゲームの実装を拡張する
会社は、オブジェクト指向プログラミング (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 |
Participant
クラスを見つけ、toNumericalChoice()
メソッドを次のように更新します。def toNumericalChoice(self): switcher = { "rock": 0, "paper": 1, "scissor": 2, "lizard": 3, "spock": 4 } return switcher[self.choice]
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] ]
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))
ファイルを保存し、
python3 rock-paper-scissor.py
を実行して変更を試します。python3 rock-paper-scissor.py
spock
とpaper
を選択し、ルールが適切に動作することを確認します。 出力は次の例のようになります。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 つの選択肢をゲームに追加しました。