はじめに
ミニマムなゲーム作りをしたいということで、Linuxを触りながらJavaを使ってシンプルなじゃんけんゲームを作成しています。
前回は、プレイヤーがキーボードから入力した数値を返す機能まで実装できました!
今の状態ではグー、チョキ、パーが割り振られている1から3以外の数値も入力できてしまうのですが、いったん今は入力制御の機能は作らずにおいておきます。
今回はじゃんけんゲームらしくするために、さらに次の機能を追加します。
- CPUがランダムに手を決める
※まだ勝敗判定は実装しません。
今回はランダム処理の基本を学ぶことを目的とします。
前提事項
前提事項としては以下のとおりです。
使用環境・ツール
OS:Windows11 Home
CPU:Intel
Linux環境:Ubuntu
OpenJDK 21
補助ツール
Chat GPT
AIにも慣れておきたいなぁ、ということで使用しています。
学習目的のため、実行するコマンドをただ提示させるのではなく、コマンドを実行する理由やコマンドの意味もをあわせて提示するように指示しました。
※念のため実際に説明や解釈が合っているか調べて確認しています。
その他
この記事内では、実行コマンドの下にコマンドの意味を記載しています。
1.Randomクラスとオブジェクトを作成
今回からCPUがそれぞれ1=グー、2=チョキ、3=パーと割り振られた数字をランダムに出せるようにします。
そこで使用するのが、JavaのRandomクラスです。
1-1.Randomクラスの使用を宣言する
まず、前回保存したソースコードに追記するためコマンドラインにvim Janken.javaを入力し、Vimを開きます。
前回追記したScannerの下にimport java.util.Random;を追記します。
import java.util.Scanner;
import java.util.Random;
public class Janken {
:
:
これでRandomクラスを使用するという宣言ができました。
1-2.Randomオブジェクトを作成する
つぎにScannerオブジェクトを作成している下にRandom random = new Random();を追記します。
Scanner scanner = new Scanner(System.in);
Random random = new Random();
これでRandamオブジェクトを作成する準備ができました。
2.CPUの手を作る
準備ができたので、今度はCPUが実際にじゃんけんの手を出せるようにしていきます。
2-1.1~3の数値を出力できるようにする
まず、CPU側はグー、チョキ、パーが振り分けられている3つの整数を出力する必要があります。
しかしプログラムは基本0から数えるため少し工夫が必要。
そこで以下のように記述します。
int cpuHand = random.nextInt(3) + 1;
int cpuHand = random.nextInt(3) では0、1、2の3つの数値しか返しません。
そこで**+1**を付け加えることで、1、2、3の数値をランダムに作ることができるようになります。
これで、CPUの手を作ることができました。
ここまでできたら、念のためesc+:+w+qとEnterで保存します。
3.動作確認テストの実装
それでは実際にCPUの手が正しく動作するか確認してみます。
テストとして以下を追記します。
//テスト用
System.out.println(); ←前回追記したコード。プレイヤーの入力値を返します
System.out.println("CPU:" + cpuHand); ←今回追記したコード。1~3の値をランダムに返します。
あらためてここまでできたら、念のためesc+:+w+qとEnterで保存します。
コマンドラインに戻ってきたら、javac Janken.javaでコンパイルを実行し、java Jankenでファイルを呼び出してみます。
プレイヤーが同じ手(数値)を入力しても、CPUは毎回異なる数値を返しているのがわかりますね。
【コラム】プログラミングでは0から数える
プログラミングでは、配列や文字列などの位置を扱う場面が多くあります。
例えば、3人の名前が入った配列があるとします。
[田中][鈴木][佐藤]
人間なら
1人目、2人目、3人目と数えますが、Javaでは
0番目:田中、1番目:鈴木、2番目:佐藤
となります。
なので、今回のように1~3の値を出力するためには出力結果に1を足す、というふうなプログラムが必要になるのです。
この0番目という考え方は、JavaだけでなくC言語やC++、JavaScript、Pythonなど、多くのプログラミング言語で共通しています。
まとめ
今回CPUがランダムにじゃんけんの手(値)を返すようにするという機能を実装しました。
プログラミングでは0から数えるという基本は忘れないようにしたいですね。
次回はいよいよ勝敗判定の機能を実装していきます!
シンプルなじゃんけんとしては、勝敗判定がつけば完成となるので楽しみです^^
