演習 - ゲームのモデル化とスキャフォールディング

完了

ゲームではありますが、前のユニットで述べた "請求書システム" と同じことです。 オブジェクト指向プログラミング (OOP) の世界では、ゲームにも同じパーツがあります。 それらのパーツとは、オブジェクト、データ、およびビヘイビアーです。 じゃんけんゲームを "モデル化" するには、請求書システムで行ったのと同じように、まず問題領域を記述し、その後、その内容をリストしていきます。 次のセクションでは、実際にゲームのモデル化を行っていきます。 また、ビルド可能なコードも記述していきます。

じゃんけんを OOP でのモデル化用に分析する

この演習はモデル化の演習です。 まずは、問題領域の説明を確認します。 次に、テキストから重要なキーワードを拾い出し、表に配置していきます。

ヒント

モデル化の方法をもう一度確認したい場合は、2 番目のユニットの「オブジェクト、データ、およびビヘイビアーの特定」セクションを参照してください。 先にも述べたように、モデル化で最初に行うことは、"誰が誰とやり取りするのか" や、"誰が誰に対して何をするのか" を確認することです。

問題の説明

じゃんけんゲームは、2 人の参加者でプレイするゲームです。 ゲームは複数の "ラウンド" で構成されます。 各ラウンドでは、一方の "参加者" が "石"、"紙"、"ハサミ" の中から "シンボル" を選択し、もう一方の "参加者" も同じことをします。 その後、選択されたシンボルが "比較" され、ラウンドの "勝者" が決定されます。 このゲームの "ルール" は、石がハサミに勝ち、ハサミは紙に勝ち、紙は石に勝つというものです。 ラウンドの勝者は、"ポイント" を獲得します。 ゲームは、参加者が同意したラウンド数だけ継続されます。 最も多くのポイントを獲得した参加者が勝者となります。

ゲームをモデル化する

  1. 前述のテキストをコピーしてドキュメントに貼り付けてください。 重要なキーワードを太字または斜体にして強調表示してください。

    ヒント

    数分間かけて、重要と思われるキーワードを拾い出してみてください。 完了したら、重要な部分を強調表示したテキストまで、下にスクロールします。

    次に示すのは、問題の説明テキストに強調表示を加えたものです。

    じゃんけんゲームは、2 人の参加者でプレイする "ゲーム" です。 ゲームは複数の "ラウンド" で構成されます。 各ラウンドでは、一方の "参加者" が ""、""、"ハサミ" の中から "シンボル" を選択し、もう一方の "参加者" も同じことをします。 その後、選択されたシンボルが "比較" され、ラウンドの "勝者" が決定されます。 このゲームの "ルール" は、石がハサミに勝ち、ハサミは紙に勝ち、紙は石に勝つというものです。 ラウンドの勝者は、"ポイント" を獲得します。 ゲームは、参加者が同意したラウンド数だけ継続されます。 最も多くのポイントを獲得した参加者が勝者となります。

  2. 次に、PhaseActorBehaviorData の列を含んだ表を作成してください。 強調表示された単語を、適切と思われる場所に配置してください。

    ヒント

    これについて数分間考えた後、下にスクロールしてください。

    結果の表は次のようになります。

    段階 Actor 動作 Data
    入力 参加者 手を選択する Participant(choice) で "選択" として保存された手
    処理中 GameRound 選択内容とゲーム ルールを比較する 調べられた "結果"
    処理中 GameRound 結果の値に基づいてポイントを与える 勝った Participant(point) に追加された "ポイント"
    処理中 ゲーム 続行の回答を確認する 回答は true、continue、quit
    出力 ゲーム 新しいゲーム ラウンドまたはゲーム終了のクレジット

クラスと状態を作成する

前のテーブルには、さまざまなフェーズを経てゲームがどのように進行するかが示されています。 2 つの列 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 . を入力すれば、エディターをもう一度開くことができます。

    テーブルの 1 行目と 3 行目で示されているように、Participant クラスには属性 pointschoice を指定しました。

    4 行目で示されているように、Game には、フィールド endGame を指定しました。 さらに、Game クラスには、2 人の参加者 participantsecondParticipant がいます。 オブジェクトの変数には、2 つの役割がありました。 役割は、エレベーターの階数のような状態か、または説明的な属性のどちらかです。 points および choice 属性は、このコンテキストでの状態変数です。 ゲームには参加者が "いる" ので、Game クラスの参加者は説明的属性です。

    おめでとうございます。 ゲームにクラスを追加し、データつまり属性を作成して、作成したクラスに割り当てました。 この時点で、適切な開始コードが用意されています。 ビヘイビアーが必要なので、まだ大したことは行われません。 次の演習ユニットでビヘイビアーを追加します。