PROGRAM VISUALBASIC

Visual Basicでプログラムを作成しよう~複数人のジャンケン

複数人に対応したジャンケンプログラムを作成しよう

前回の記事では、1(プレイヤー)対1(コンピューター)のジャンケンプログラムを作成しました。
今回は、複数人に対応したジャンケンプログラムを作成しましょう。
本記事で作成するプログラムの環境は、以下の通りです。

本記事で使用する開発環境

  • IDE(統合開発環境)は、Visual Studio Community 2022 を使用します。
  • 開発言語は、Visual Basic を使用します。
  • フレームワークは、.NET Framework 4.8 を使用します。

Visual Studioのインストール方法は、以下のマイクロソフト公式サイトを参照してください。

ジャンケンのルール

ジャンケンはご存じのように、「グー」「チョキ」「パー」の三すくみになっています。
プレイヤーはグー、チョキ、パーのどれかを画面から入力して、コンピューターはグー、チョキ、パーをランダムに選択するようにします。
このゲームの仕様は、以下のようになります。

ゲームの仕様

  • プレイヤーは、グーは「1」、チョキは「2」、パーは「3」を入力する
  • プレイヤーが、1、2、3以外を入力した場合、メッセージを表示し、再度入力させるようにする
  • コンピューターはランダムにグー、チョキ、パーを選択する
  • プレイヤーとコンピューターの出した値を画面に表示する
  • 誰が勝ったかを表示する
  • ジャンケンを3回繰り返し、合計の勝利数が多い人を勝者とする

ジャンケンをするメンバーのクラス

まず、ジャンケンをするメンバーの情報を格納するクラスを作成します。
コンピューターのジャンケンの手は、Randomクラスを使ってランダムに出します。
クラスをインスタンス化する時に、メンバー名が渡されるようにして、コンストラクタの中でプロパティに設定します。
ジャンケン実行メソッド(Play)では、RandomクラスのNext()メソッドを使って、1~3の値を発生させ、Actプロパティに設定します。
なお、前回からの変更点として、インスタンスを作成するときにRandom()クラスで使うシード値が渡されます。
シード値を指定しないとデフォルトの値が設定され、どのコンピューターのメンバーも同じ手になってしまいます。
詳しくは、以下のマイクロソフトの公式サイトを参照してください。

ジャンケンプログラムのモジュール

ジャンケンプログラムのモジュールは、以下のようになります。

プログラムの解説

1対1のジャンケンと比べると難しくなっているので、ポイントを解説します。

  • 3行目:ジャンケンを実行する回数を設定します。
  • 5行目:ディクショナリーを使って、1をグー、2をチョキ、3をパーに定義します。
  • 9行目:配列にメンバーの名前を定義します。この配列に名前を定義した人数でジャンケンをします。
  • 18~21行目:GamerリストにMemberクラスのインスタンスを追加します。
  • 19行目:ミリセカンドを使って、Random()クラスのシード値を作成します。
  • 26行目:ジャンケンの手を格納するAction配列を、0で初期化します。
  • 47~49行目:コンピューターがPlay()メソッドを使ってジャンケンの手を出します。Gamerリストの0番目はプレイヤーなので、1番目から実行します。
  • 57~64行目:メンバーの出した手を、Action配列に1づつ加算します。
  • 68、69行目:全員同じ手か手が全部出ている場合は、引き分けとします。
  • 72~99行目:出されていない手を探し、その手に対応した勝敗をメンバー毎に判定します。
  • 108行目:MaxWinリストに、各メンバーの勝利数を追加します。
  • 110行目:MaxWinリストにある最大勝利数と最小勝利数が同じ場合は、引き分けとします。
  • 113~117行目:最大勝利数のメンバーを画面に表示します。

プログラムの実行

プログラムの実行結果は、以下のようになります。
実行する時は、Ctrl + F5キーを押下してデバッグなしモードで開始します。

vbjanken2-1
実行結果

クラスのフィールドにPrivate変数を使ったプログラム

上記の例では、クラスのフィールドにPropertyを使っていますが、これをPrivate変数に置き換えると、以下のようなプログラムになります。
Private変数にすると、外部から直接アクセス出来なくなるので、アクセスするためのメソッドを用意する必要があります。
その分コードが長くなりますが、オブジェクト指向のカプセル化という観点では、こちらの方が良いでしょう

-PROGRAM, VISUALBASIC
-,