この記事は約7分で読めます。
おはようございます、すずしんです。
最近あまりプログラミングをしていませんでしたので…。
久しぶりにJavaのプログラミングをしてみました。
何のプログラムを作成しようかと悩んだのですが…。
どうせなら、GUI付きのプログラム(JavaFX)で作成してみようと思い立ちました。
そして、あまり難しくなさそうなテーマを扱おうということで…。
今回は、簡単な「じゃんけん」ゲームを作成してみることにしました。
スポンサーリンク
じゃんけんゲームの仕様
今回作成することにしたじゃんけんゲームの仕様は以下のような感じです。
- コンピュータの手・自分の手・じゃんけんの結果を表示するラベルと、自分の手を選ぶためのボタン(グー・チョキ・パー)から構成される。
- いずれかの手のボタンを押すと、コンピュータがランダムな手を選びじゃんけんをする。
- じゃんけんをした時、コンピュータの手・自分の手・じゃんけんの結果を表示する。
じゃんけんゲームのプログラム作成
それでは、ここから実際にじゃんけんゲームを作成していきます。
今回のじゃんけんゲームでは、「Janken.fxml」「JankenController.java」「Janken.java」の3つのファイルを作ります。
Janken.fxmlの作成
Janken.fxmlでは、じゃんけんゲームの画面(GUI)を作成します。
SceneBuilderを使いながら、仕様に沿ってラベルとボタンを配置していきます。
ラベルとボタンの細かい部分は特に指定していませんので、自由に決めてもらって構いませんよ。
自分にとって分かりやすい画面になっていれば問題無いです。
とりあえず、私の場合は以下のような画面構成にしてあります。
ラベルとボタンのフォントサイズは20で、マージンも適宜設定しています。
参考までに、私が作成したJanken.fxmlのコードを載せておきますので…。
もし同じ画面にしたい場合には利用してくださいね。
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.text.Font?> <AnchorPane id="AnchorPane" prefHeight="300.0" prefWidth="480.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="jp.suzushin7.sample.janken.JankenController"> <children> <VBox alignment="CENTER" layoutX="90.0" layoutY="44.0"> <children> <Label fx:id="cpuHandLabel" alignment="CENTER" text="コンピュータの手: -"> <font> <Font size="20.0" /> </font> <VBox.margin> <Insets bottom="10.0" top="10.0" /> </VBox.margin> </Label> <Label fx:id="myHandLabel" alignment="CENTER" text="あなたの手: -"> <font> <Font size="20.0" /> </font> <VBox.margin> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </VBox.margin> </Label> <Label fx:id="resultLabel" alignment="CENTER" text="結果: -"> <font> <Font size="20.0" /> </font> <VBox.margin> <Insets bottom="30.0" left="10.0" right="10.0" top="10.0" /> </VBox.margin> </Label> <HBox alignment="CENTER" prefHeight="30.0" prefWidth="300.0"> <children> <Button mnemonicParsing="false" onAction="#putOutRockHand" text="グー"> <HBox.margin> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> </HBox.margin> <font> <Font size="20.0" /> </font> </Button> <Button mnemonicParsing="false" onAction="#putOutScissorsHand" text="チョキ"> <HBox.margin> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> </HBox.margin> <font> <Font size="20.0" /> </font> </Button> <Button mnemonicParsing="false" onAction="#putOutPaperHand" text="パー"> <HBox.margin> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> </HBox.margin> <font> <Font size="20.0" /> </font> </Button> </children> </HBox> </children> </VBox> </children> </AnchorPane>
JankenController.javaの作成
続いて、コントローラークラスとして「JankenController.java」を作成します。
cpuHandLabel・myHandLabel・resultLabelは、それぞれコンピュータの手・自分の手・じゃんけんの結果を表示するためのラベルです。
putOutRockHand()・putOutScissorsHand()・putOutPaperHand()は、それぞれ自分の手をグー・チョキ・パーとしてじゃんけんをするメソッドです。
これらはdoJanken()メソッドで処理しています。
doJanken()メソッドでは、まずランダムにコンピュータの手を選びます。
そして、じゃんけんの結果をresultに代入しておきます。
最後に、コンピュータの手・自分の手・じゃんけんの結果を各ラベルにセットしています。
やっていることは単純ですので、特に難しくはないですよね。
package jp.suzushin7.sample.janken; import java.net.URL; import java.util.Random; import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; public class JankenController implements Initializable { private final Random random = new Random(); private final String[] hands = { "グー", "チョキ", "パー" }; @FXML private Label cpuHandLabel; @FXML private Label myHandLabel; @FXML private Label resultLabel; @Override public void initialize(URL url, ResourceBundle rb) { } @FXML public void putOutRockHand() { doJanken(0); } @FXML public void putOutScissorsHand() { doJanken(1); } @FXML public void putOutPaperHand() { doJanken(2); } private void doJanken(int myHand) { String result; int cpuHand = random.nextInt(3); if((cpuHand == 0 && myHand == 2) || (cpuHand == 1 && myHand == 0) || (cpuHand == 2 && myHand == 1)) { result = "あなたの勝ち!"; } else if((cpuHand == 0 && myHand == 1) || (cpuHand == 1 && myHand == 2) || (cpuHand == 2 && myHand == 0)) { result = "あなたの負け!"; } else { result = "あいこ!"; } cpuHandLabel.setText("コンピュータの手: " + hands[cpuHand]); myHandLabel.setText("あなたの手: " + hands[myHand]); resultLabel.setText("結果: " + result); } }
Janken.javaの作成
最後に、メインクラスとなるJanken.javaの作成をします。
ここでは、単純にFXMLLoaderを使ってJanken.fxmlをロード、そしてSceneにセットするくらいです。
このアプリケーションのタイトルは「じゃんけん」としてみました。
…そのままですね!
package jp.suzushin7.sample.janken; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Janken extends Application { @Override public void start(Stage primaryStage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("Janken.fxml")); Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.setTitle("じゃんけん"); primaryStage.show(); } public static void main(String[] args) { Application.launch(args); } }
じゃんけんゲームの実行結果
それでは、早速プログラムを実行してみます。
プログラムが実行されると、まず以下のような画面が表示されます。
この画面上にある、グー・チョキ・パーのいずれかのボタンをクリックすると、コンピュータとじゃんけんができます。
じゃんけん後は、コンピュータの手・自分の手・じゃんけんの結果が画面上に表示されます。
ちなみに、コンピュータはランダムな手を選びますので、じゃんけんをする度に結果が変わります。
ひとこと
今回は、JavaFXを使って簡単なじゃんけんゲームを作成してみましたが…。
予想していたよりもサクッと作ることができましたよ。
JavaFX入門用の題材としては、このじゃんけんゲームはちょうど良いのではないでしょうか?
もし良かったら、あなたもじゃんけんゲームを作成して遊んでみてくださいね。