はじめに
ミニマムなゲーム作りをしたいということで、Linuxを触りながらJavaを使ってシンプルなじゃんけんゲームを作成しています。
前回は、WSL上でJavaの開発環境を構築し、タイトルを表示するところまで実装しました!
今回はじゃんけんゲームらしくするために、次の機能を追加します。
- じゃんけんのメニューを表示する
- キーボードから番号を入力する
今回は「キーボードからの入力」の基本を学ぶことを目的とします。
前提事項
前提事項としては以下のとおりです。
使用環境・ツール
- OS:Windows11 Home
- CPU:Intel
- Linux環境:Ubuntu
- OpenJDK 21
補助ツール
Chat GPT
AIにも慣れておきたいなぁ、ということで使用しています。
学習目的のため、実行するコマンドをただ提示させるのではなく、コマンドを実行する理由やコマンドの意味もをあわせて提示するように指示しました。
※念のため実際に説明や解釈が合っているか調べて確認しています。
その他
この記事内では、実行コマンドの下にコマンドの意味を記載しています。
1.メニュー画面を表示させる
前回HelloWorldもとい、タイトルコールができたので、応用してメニュー画面を作っていきます。
とはいっても、内容としては至ってシンプルです。
System.out.println()を使って文字列をただ出力するだけ。
ではさっそく、コマンドラインにvim Janken.javaを入力してVimを開き、以下を記述していきます。
System.out.println("じゃんけんゲーム");
System.out.println();
System.out.println("1:グー");
System.out.println("2:チョキ");
System.out.println("3:パー");
System.out.println();
System.out.print("番号を入力してください");
記述が完了したらesc+:+w+qとEnterで保存を忘れずに!
コマンドラインに戻ったら、javac Janken.javaでコンパイルを実行し、java Jankenでファイルを呼び出してみます。
メニュー画面が実装できました!
それではいよいよプレイヤーからの入力を受け付ける処理を実装していきます。
2.キーボード入力を受け付けるためにScannerクラスを利用する
Scannerクラスとはキーボードやファイルなどからデータを読み取るためのクラス。
今回は、プレイヤーが入力したじゃんけんの手(1~3)を受け取るために利用します。
2-1.Scannerクラスを読み込む
Scannerクラスはjava.utilパッケージに含まれているため、使用する前に
import java.util.Scanner;
と記述してこれからScannerクラスを使いますとJavaに宣言します。
まずは前回作成したJanken.javaファイルにSvannerクラスを追加していきます。
import java.util.Scanner;
2-2.Scannerオブジェクトの作成とplayerHand変数への代入
mainメソッドの最初に以下を追記する。
Scanner scanner = new Scanner(System.in);
これでキーボードからの入力を受けつける機能を持つオブジェクトが作成されるようになります。
続いて、プレイヤーの入力を受け取れるようにしていきます。
そのためにSystem.out.print("番号を入力してください:");の下に以下を追記します。
int playerHand = scanner.nextInt();
- int(型)
データを整数で扱う型であることを宣言 - playerHand
任意の変数名を入れる - =
右側の値を左側へ代入する - scanner
作成したscannerオブジェクト - nextInt()
キーボードから整数を読み取るメソッド(つまり機能)
このプログラムでは、nextInt()メソッドを呼び出すと、scannerオブジェクトがキーボードから入力された数値を読み取ります。
nextInt()メソッドは、その読み取った数値を返し、返された数値をplayerHandという変数に代入しているのです。
Scannerオブジェクトはキーボードからの入力をずっと待ち構えているため、終了するためにプログラムの最後にscanner.close();を加えます。
最終的に、以下のようになります。
コードを見る
import java.util.Scanner;
public class Janken {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("じゃんけんゲーム");
System.out.println();
System.out.println("1:グー");
System.out.println("2:チョキ");
System.out.println("3:パー");
System.out.println();
System.out.print("番号を入力してください:");
int playerHand = scanner.nextInt();
scanner.close();
}
}
2-3.動作確認テストの実装
これでプレイヤーからの入力を受け取ることができるようになりました。
ただ、このままだと入力しても受け取った数値を出力していないため、本当に値が入っているのかがわかりません。
そこで、デバッグ用のコードを記述していきます。
おそらく、実際の開発現場ではテスト用のファイルを作成しているかと思うのですが、今回はシンプルなゲーム開発なのでそこは気にせずやっていきます。
最後に記述したscanner.close();の下に以下を記述します。
//テスト用
System.out.println("入力された番号:" + playerHand);
Javaでは//はその行をコメントアウトします。
コメントアウトはこのほかにも/*コメント*/と記述することで複数行まとめてコメントアウトできるブロックコメントもあります。
コメントアウトすることでプログラムとして実行されなくなります。
記述が完了したらesc+:+w+qとEnterで保存を忘れずに!
コマンドラインに戻ったら、javac Janken.javaでコンパイルを実行し、java Jankenでファイルを呼び出してみます。
入力された値が無事帰ってきました!
まとめ
今回はプレイヤーがキーボードから入力したじゃんけんの手(値)を受け取る機能までを実装しました。
まだ入力された値をそのまま返すだけなので、4とか100とか-1とかでもそのまま表示されてしまいます。
ゆくゆくはエラーになるような処理を実装していければと思います。
とりあえず現状はユーザーの想定外な操作は考えず、次回はCPUがランダムに値を返してくるような機能を実装していきたいと思います!

