【配列編】Java言語で『じゃんけんゲーム』を作る

Java

【配列編】Java言語で『じゃんけんゲーム』を作る

 

Java言語でプログラミングの勉強をしていくと、「じゃんけんゲーム」を作るというサンプルや課題が出てきます。

以前の記事では「if文を利用した作り方」「switch文を利用した作り方」について説明しました。今回は「配列を利用した作り方」について説明します。

 

プログラミングスキルを上げるためには、様々なアルゴリズムを確認することが重要です。1つのプログラムが完成したら、それで終わりではなく、他の方法はないのか? 考えることが重要です。

じゃんけんゲームを作成する場合も、今まで説明したように「if文」を使うプログラムと「switch文」を使う方法があります。また、今回説明する「配列」を使うプログラムもあります。他にも計算式を利用する場合もあり、まさに同じ「じゃんけんゲーム」でも様々なプログラムが存在します。

 

配列を利用すると、if文やswtich文のプログラムと異なり、行数が短くなります。ぜひ、配列を使ってどのように『じゃんけんゲーム』を作成するのか、この記事で確認してみて下さい。

 

まず、この記事は以下のような人を対象としています。

対象者・配列を使ったじゃんけんゲームの作り方を知りたい人

・様々なじゃんけんゲームのプログラムを確認したい人

 

この記事を読むと、次のようなことが理解できるようになります。

この記事を読むとできること・配列を使ったじゃんけんゲームのプログラムの作り方を知ることができる

・様々なじゃんけんゲームのプログラムを知ることができる

 

メソッドの書き方を詳しく説明した記事を追加しました。ぜひ参照してください。

【初心者の悩み解決!!】Java言語でのメソッドの書き方
多くの書籍ではmain()の中に全てのコードを記述していますが実際には複数のメソッドに分けて記述します。しかし、初心者はメソッドに分けて記述しようとすると記述方法が分からず、いきなりプログラムが書けなくなります。今回はメソッドの書き方を詳しく説明します。

 

なお、if文やswitch文を利用して『じゃんけんゲーム』を作成するプログラムの解説については、次の記事を参照してください。

【if編】Java言語で『じゃんけんゲーム』を作る
Java言語で「じゃんけん」プログラムを作る場合、どのようにして勝ち負けを判定すれば良いのか悩んでいませんか?色々な判定方法があるのですが、今回は「if文」を使って勝敗を判定するプログラムの作成方法について解説します。
【switch編】Java言語で『じゃんけんゲーム』を作る
Java言語で「じゃんけんゲーム」を作成する方法として、今回は「swtich文」を利用するサンプルを紹介します。またキーボードからデータを入力する時に例外処理を使ってデータのチェックを行う方法を説明します。

 

続石講師
続石講師

「if」と「switch」を使ってじゃんけんゲームのプログラムの作り方を以前説明してきました。今日は、配列を使ったプログラムを説明します。

太郎さん
太郎さん

配列を使ってじゃんけんゲームを作るのですか?

全く想像ができません。

続石講師
続石講師

配列をうまく利用するとプログラムが簡単になります。

ぜひ今回のプログラムを参考にしてみて下さい!!

 

じゃんけんゲームの仕様

今回作成するじゃんけんゲームの仕様は、以前紹介した「if編」と同じです。

  • グーは「0」、チョキは「1」、パーは「2」で表現する
  • ユーザのじゃんけんの手は、キーボードから入力してもらう
  • 「0」「1」「2」以外のデータが入力された時は、再入力させる
  • コンピュータ側のじゃんけんの手は、乱数で自動的に求める
  • ユーザの判定結果(勝ち、負け、引き分け)を画面に表示する
  • メソッドを利用して作成する

 

もちろん今回も3部構成で考え、さらにメソッドで作っていきます。

 

プログラムの3部構成については、以下の記事を参照してください。

【初心者用】プログラムは3つの構成要素で考える
どんなプログラムでも3つの構成要素で成り立っています。この3つの構成要素を意識すれば、プログラムは誰でも作れるようになります。初心者が「プログラムの書き方がわからない」のは、この3つの構成を知らないだけです。今回はプログラムの基本となる3つの構成要素について説明します。

作成するメソッドの設計

仕様を元に、作成する各種メソッドを以下のようにします。これも、「if編」と全く同じです。

機能 メソッド名 引数 戻り値
ユーザ側のじゃんけんの手を求める getUser() なし 整数(0/1/2)
コンピュータ側のじゃんけんの手を求める getPc() なし 整数(0/1/2)
ユーザの勝敗を判定する judgeJanken() ユーザの手(整数)、

コンピュータの手(整数)

文字列
結果を表示する showResult() ユーザの手(整数)、

コンピュータの手(整数)、

判定結果(文字列)

なし

 

main()メソッドの内容(途中)

決定したメソッドをまずは、main()内に記述します。記述した内容は以下の通りです。

なお、まだ各メソッドの詳細内容を記述していないので、コンパイルエラーとなっていますが、気にする必要はありません。

main()メソッド内の記述は「if編」「switch編」のものと全く変わりません。

 

このようにmain()メソッド内に詳細な処理を記述せずにメソッド名のみ記述しておけば、各メソッド内の処理方法が変わったとしても、main()メソッドの内容は全く修正する必要がなくなります。

 

ユーザの手を取得:getUser()メソッド

ユーザの手をキーボードから入力するメソッドを説明します。

キーボードからデータを入力させる場合、「Scannerクラス」を利用します。

今回は「if編」で利用した「無限ループ」を使用します。例外処理を利用したい場合は過去の「switch編」を参照してください。

 

getUser()メソッドの記述内容

ユーザのじゃんけんの手をキーボードから入力してもらうメソッドの記述内容は以下のようになります。

キーボードから入力されたデータについて以下のチェックを行っています。

  • 整数が入力されているか?
  • 整数の場合、不適切な値(-1以下、3以上)か?

 

 

コメントを記述していますが、簡単に要点を説明します。

29行目:無限ループの指定

35行目:キーボードから入力されたデータが整数かどうかのチェック

37行目:入力された整数を変数に代入

39行目:整数が不適切な範囲の値かどうかのチェック

42行目:不適切な場合、再入力(29行目に戻る)

45行目:適切(0,1,2)な場合、読み込んだデータをmain()に戻す

51行目:整数以外が入力された場合、バッファをクリアする

 

もし、詳細な解説が知りたい場合は「if編」で確認してください。
https://ict-skillup.com/java/1107/

コンピュータの手を取得:getPc()メソッド

コンピュータのじゃんけんの手を乱数で求めるメソッドの記述内容は以下のようになります。

このプログラムではRandomクラスを利用しています。

getPc()メソッドの記述内容

 

Randomクラスで乱数を作成する場合、まずRandomインスタンスを生成します(58行目)。

そして、整数の乱数を作成するメソッド「nextInt()」を実行すると、()内に指定した値を元にした乱数が1つ作成されます。

()内には「0から始まる乱数の種類」を指定します。「3」を指定すると「0から始まる3種類の整数」となり、「0か1か2のどれか」となります。

 

勝敗の判定:judgeJuanken()メソッド

では、今回の説明で一番重要な配列を使ったじゃんけんの判定処理を説明します。

ユーザの手とコンピュータの手の対戦表を以下のように作成します

この表を2次元配列で表現し、勝敗を判定します。

ユーザの手に該当する値(0~2)が行方向の添え字、コンピュータの手に該当する値(0~2)が列方向の添え字にし、勝敗結果を要素に格納しておきます。

例えば、ユーザの手がグー(0)で、コンピュータの手がパー(2)の場合、配列の[0][2]を参照すると「負け」という結果が取得できます。ユーザの手がパー(2)でコンピュータの手が(1)の場合、配列の[2][1]を参照し、「負け」となります。

 

judgeJanken()メソッドの記述内容

上記で説明した勝敗表の配列を利用したjudgeJanken()メソッドの内容は以下の通りとなります。

 

ユーザの手を行方向、コンピュータの手を列方向の添え字として、該当する値(勝敗結果)を参照し、main()メソッドに返しています。

 

if文やswitch文を使用したプログラムと比較すると、行数が非常に少ないのが分かります。プログラムだけでは理解しづらいかも知れませんが、対戦表と対比させながら見るとその処理内容を確認できるはずです。

 

結果の表示:showResult()メソッドの記述

結果を表示するメソッドはif編やswitch編と全く同じです。

 

全コード

以下に全コードを記載します。

 

実行結果

実際に今回のプログラムを実行した結果は以下の通りです。

入力チェックは次の5パターンです。

 

①.不適切なデータ(-1以下)

②.不適切なデータ(3以上)

③.整数以外のデータ(小数点を含む数値)

④.整数以外のデータ(文字列)

⑤.適切なデータ(0、1、2)のどれか

 

きちんと対応できていることが、確認できます。

 

まとめ

今回は、配列を使った『じゃんけんゲーム』のプログラムについて説明しました。同じ結果が得られても、プログラムの作り方は多数あります。ぜひ、「if編」「switch編」、今回の「配列編」の3つのプログラムを比較して、確認してください。

 

・勝敗結果の対戦表を2次元配列で定義しておく

・それぞれの手(0~2)を行と列の添え字(index)として利用する

・配列をうまく利用すると判定用の行数を減らすことができる

・プログラムには様々な書き方がある

 

続石講師
続石講師

配列を使ったプログラムはどうでしたか?

太郎さん
太郎さん

2次元配列はちょっと難しいですが、プログラムの行数が短くなってビックリしました!!

続石講師
続石講師

このような方法もあるので、色々な書き方をぜひ確認するようにしてください。

 

「if編」「switch編」のプログラムを確認したい場合は、以下の記事を参照してください。

【if編】Java言語で『じゃんけんゲーム』を作る
Java言語で「じゃんけん」プログラムを作る場合、どのようにして勝ち負けを判定すれば良いのか悩んでいませんか?色々な判定方法があるのですが、今回は「if文」を使って勝敗を判定するプログラムの作成方法について解説します。
【switch編】Java言語で『じゃんけんゲーム』を作る
Java言語で「じゃんけんゲーム」を作成する方法として、今回は「swtich文」を利用するサンプルを紹介します。またキーボードからデータを入力する時に例外処理を使ってデータのチェックを行う方法を説明します。
タイトルとURLをコピーしました