【初心者向け】Javaで作る簡単じゃんけんゲームサンプル (改善版)

  • このエントリーをはてなブックマークに追加
  • Pocket

このサンプルプログラムは以前に紹介した「サンプル じゃんけんゲーム(switch版)」を改善したものだ。

ストーリーは同じであり,画面へ表示される文字や入力する文字,タイミングは変わっていない。変わったのは,プログラムのコードである。

大きく改善されたのは,switch文を使わなくなったことである。判定が審判を表すクラスから手の形を持つオブジェクトに任されるようになった。また,判定結果に従って表示される文字列も,審判クラスから判定結果を表すクラスに移された。判定結果などのオブジェクトの状態が変数の値ではなくて,オブジェクトそのものになったのである。

さっそく,実際のサンプルプログラムを見てみよう。

じゃんけんゲームのクラス

クラスがたくさんあるので,整理しておこう。次のようなクラスある。これらのクラスのオブジェクトが,ScissorsPaterStoneGameクラスの中で実行されるゲームの状況に応じて作られていく。

  • ScissorsPaterStoneGameクラス:ゲームのストーリーを実行する。
  • Shapeクラス:じゃんけんする二人の手を表す抽象クラスである。
  • Stone, Scissors, Paper, NullShapeクラス:Shapeクラスの具象クラスである。
  • ShapeCreatorクラス:Shapeクラスのサブクラスのオブジェクトを作る。
  • Judgeクラス:審判を表す。
  • Resultクラス:判定の結果を表す抽象クラスである。
  • Even, Win, Loseクラス:Resultクラスの具象クラスである。
  • ResultCreatorクラス:Resultクラスのサブクラスのオブジェクトを作る。
  • Consoleクラス:画面の表示と入力を行うためのクラスである。また,タイマー機能も持っている。

サンプルプログラム

ScissorsPaterStoneGameクラス

このクラスは,ゲームに登場するオブジェクトをストーリーに従って呼び出し,じゃんけんゲームを実行する。

説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] mainメソッドの定義,ここからゲームが始まる。
  • [2]-[5] ゲームの中に登場するオブジェクトと作る。作られたオブジェクトは,shapeOfMyHand:コンピュータ側の手の形,shapeOfmyHand:入力された手の形,judge:審判,random:乱数である。
  • [6] ゲームの説明を表示する。
  • [7] ループの始まり。
  • [8] コンソールから文字を入力する。
  • [9] 入力文字をshapeOfYourHandオブジェクトの手の形に変換する。
  • [10]-[11] 手の形が「ぐう」,「ちょき」,「ぱー」以外の文字が入力されたら終了する。
  • [12] 審判がじゃんけんの開始の合図をする。
  • [13] 乱数からコンピュータ側の手の形を決める。
  • [14] 審判が判定を行う。
  • [15] 審判が判定結果を発表する。
  • [16] 2秒休み,ループの先頭に戻る。

Shapeクラス

このクラスは,ゲームを行う人の手の形を表している抽象クラスである。このクラスのサブクラスとして,「ぐう」,「ちょき」,「ぱー」の手の形がある。

説明

  • [1] クラスを定義する。
  • [2] 形を表現した文字列を戻すメソッドを定義する。
  • [3] 入力文字のコードに対応しているかを判定する。
  • [4] 判定を行う。

Stoneクラス

Stoneクラスは,Shapeクラスの抽象メソッドを実装した具象クラスであり,「ぐう」を表現している。

Scissorsクラス

Scissorsクラスは,Shapeクラスの抽象メソッドを実装した具象クラスであり,「ちょき」を表現している。

Paperクラス

Paperクラスは,Shapeクラスの抽象メソッドを実装した具象クラスであり,「ぱー」を表現している。

NullShapeクラス

NullShapeクラスは,Shapeクラスの抽象メソッドを実装した具象クラスであり,入力キーがどの手の形にも対応していない場合を表現している。

ShapeCreatorクラス

このクラスは,手の形のオブジェクトを作るクラスを表している。

説明

  • [1] クラスを定義する。
  • [2]-[4] キーコードに対応した定数を定義する。
  • [5]-[6] 変数を定義する。
  • [20]-[26] コンストラクタにより初期値を設定する。
  • [40] メソッドcreateRandomShapeを定義する。
  • [41]-[42] ランダムに手の形を作る。
  • [60] メソッドcreateShapeByKeyを定義する。
  • [61]-[63] キーコードから手の形を作る。
  • [80] メソッドtoLowerKeyを定義する。
  • [81]-[83] 文字コードを小文字に変換する。

Judgeクラス

このクラスは,審判を表している。この審判を表すオブジェクトは,ゲームの進行に伴って指示を行い,判定を下す。

説明

  • [1] クラスを定義する。
  • [2]-[4] 変数を定義する。
  • [5]-[6] コンストラクタにより初期値を設定する。
  • [20] メソッドdisplayIntroductionを定義する。
  • [21]-[24] ゲームの紹介と入力方法について説明を行う
  • [40] メソッドsayCueWordを定義する。
  • [41]-[42] 前の判定結果によって合図の言葉を変える。
  • [60] メソッドjudgeを定義する。
  • [61]-[63] 現在の手の形を保存して,じゃんけんのルールに従って判定を行う。
  • [80] メソッドsayResultを定義する。
  • [81]-[87] あなたの手の形,コンピュータの手の形,判定結果の順にタイマーを入れて表示する。

Resultクラス

このクラスは,ゲームの結果を表している。このクラスのサブクラスとして,引き分け(Even),勝ち(Win)負け(Lose)がある。

説明

  • [1] クラスを定義する。
  • [2] 開始の合図を表す言葉を戻すメソッドを定義する。
  • [3] 判定結果を表す言葉を戻すメソッドを定義する。

Evenクラス

Evenクラスは,Resultクラスの抽象メソッドを実装した具象クラスであり,「引き分け」を表現している。

Winクラス

Winクラスは,Resultクラスの抽象メソッドを実装した具象クラスであり,「勝ち」を表現している。

Loseクラス

Loseクラスは,Resultクラスの抽象メソッドを実装した具象クラスであり,「負け」を表現している。

ResultCreatorクラス

このクラスは,判定結果のオブジェクトを作るクラスを表している。

説明

  • [1] クラスを定義する。
  • [2]-[4] 静的な変数を定義する。
  • [5]-[6] 変数を定義する。
  • [20]-[24] コンストラクタにより初期値を設定する。
  • [40] メソッドcreateEvenを定義する。
  • [41] Evenのオブジェクトを戻す。
  • [42] メソッドcreateWinを定義する。
  • [43] Winのオブジェクトを戻す。
  • [44] メソッドcreateLoseを定義する。
  • [45] Loseのオブジェクトを戻す。

Consoleクラス

このクラスは,「じゃんけんゲーム(switch版)」と全く同じである。

説明

  • [1] クラスを定義する。
  • [2] メソッドreadを定義する。
  • [3]-[10] 入力されたキーのコードを取得する。
  • [20] メソッドwriteを定義する。
  • [21] コンソールに引数で指定された文字列を表示する。
  • [40] メソッドwriteWithCRを定義する。
  • [41] コンソールに引数で指定された文字列を表示し,改行する。
  • [60] メソッドsleepを定義する。
  • [61]-[64] 引数に指定された秒数だけ休止する。

まとめ

以前に紹介したプログラムに比べて機能がかなり細分化されており、プログラム全体の構成が大きく変わっているのに処理の結果は同じになっていることがわかる。今回のような例に限らず、どのような作りにしておけば将来的に機能の追加や改善が簡単なのか、やりやすいのか、という観点でプログラムの構成を考えてみよう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*

ゼロからエンジニアを目指す方へ
短期間でエンジニアになる方法

必要な勉強や技術の最新動向、本当に使えるIT資格、学習に役立つ国からの奨励金などの情報を無料でお届け

資料を見てみる