じゃんけんシミュレータ作ってみた

こんにちは。駆け出しエンジニアの太鼓眼鏡です。
まだまだ研修中の身ですが、書いたものや学んだことをシェアしていきます。

今日は研修の課題で作成した「じゃんけんシミュレータ」について紹介します。
仕様言語はJava、一応オブジェクト指向を意識したつもりです。

ファイルはこちらから御覧ください。
github.com

コメント等も残しているので、詳細はそちらから。 一応記事下にも添付してありますが、長いです。

前提条件

  • 5人でじゃんけんを行う
  • 1〜5位まで全員に順位がつくまでに、何回じゃんけんをするかを算出する
  • 1000回シミュレーションを行い、その平均値を出力する
  • 複数グループに分かれてじゃんけんを行うときは、同時にじゃんけんを行う

フローチャート

f:id:cyclemem:20170521225938p:plain

各ファイルの説明

Main.java

ゲームの全体の流れ

Player.java

じゃんけんに参加するプレイヤークラス
*フィールド、メソッドはそれぞれ1つずつ。

フィールド:
- rsp = じゃんけんの手。0: rock, 1: scissors, 2: paperとする
メソッド:
- setRsp()=引数無しで、0~2の乱数をrspに代入する

Referee.java

じゃんけんの結果を判定する審判クラス

フィールド:
- num = シミュレーション回数。コンストラクタで設定
- total = じゃんけんを行う総人数。コンストラクタで設定
- group = 各グループの人数。詳しくは後述
- win, lose = それぞれ各ゲームの勝敗人数
- total = じゃんけん1回が終了するまでの回数。詳しくは後述
- total_count = じゃんけん終了までの総回数
- r, s, p = それぞれグー、チョキ、パーの人数
メソッド:
- 各セッター、ゲッター:基本は通常通りなため割愛
- setGroup = groupを初期化
- setTotal_count = count[0]とcount[1]を比較して、大きいほうをtotal_countに代入
- setCount = countを1増やす
- 初期化用メソッド
- clearRsp = じゃんけんの手を初期化
- clearCount = countを初期化
- じゃんけん用メソッド
- countRsp = r,s,pがそれぞれ何人いるか数える
- judge = 勝敗判定、あいこならループ続行指示
- add = 勝敗人数をgroupに追加
- remove = じゃんけんを行ったgroupを削除
- シミュレーション用メソッド
- calcAvg = 総回数の平均値を算出する

結果

今回課題では5人という指定がありましたが、n人でも利用出来るシミュレータを作成することを意識しました。
最終的に、プログラムとしては可能ですが、PCのスペック的に処理が追いつかないものになりました。20人ほどで結果がでなくなります。
またその仕様を実現するために、ArrayListを用いています。

今後に向けて

  • もう少し細かく説明する記事をあげたい
  • いざ文章にしてみるとフローチャートの流れが自然じゃない箇所が散見されるので修正加えたい
  • ArrayListについてもう少し詳しく勉強しときたい
  • 今回人数増えると結果が出なくなるので、もっと効率的なフローで回したい 以上!精進あるのみ。

最後に肝心のプログラム

gist.github.com