🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

2702閲覧

無限ループ?になってしまいプログラムを実行できません。理由を教えていただけませんか?

nemo3002

総合スコア3

RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/12/13 17:52

編集2020/12/14 02:17

前提・実現したいこと

javaとjavafxを用いて、ドラクエのようなRPGを作っています。戦闘画面でお互いの攻撃ターンが進んでいくのをwhile文の繰り返しで表現しようとしたのですが、実行がうまくいきませんでした。

Mainクラスの真ん中あたりのwhile文のとこだけを消すと実行できるので、もしかしたら無限ループになってるのかなとも思ったのですが、そうだとしてもループになってしまう理由も分かりませんでした。

実行がうまくいかない理由を教えていただけませんでしょうか。よろしくお願いします。

発生している問題・エラーメッセージ

ウインドウだけは表示されるのですが、中身は何もなくエラーメッセージすら表示されず、ウインドウを閉じようとすると「OpenJDK Platform binaryは応答していません」と表示され強制終了するしかなくなります。

該当のソースコード

Java

1package application; 2 3import javafx.application.Application; 4import javafx.fxml.FXMLLoader; 5import javafx.scene.Scene; 6import javafx.scene.input.KeyEvent; 7import javafx.scene.layout.Pane; 8import javafx.scene.layout.VBox; 9import javafx.stage.Stage; 10 11public class Main extends Application { 12 public static void main(String[] args) { 13 launch(args); 14 } 15 16 private Scene sc1, sc2, sc3; 17 BattleScreenController bsc = new BattleScreenController();// = new BattleScreenController(); 18 ClearScreenController csc = new ClearScreenController(); 19 Hero hero = new Hero(); 20 Enemy enemy = new Enemy(); 21 boolean fin = false; 22 23 @Override 24 public void start(Stage primaryStage) { 25 26 try { 27 VBox root1 = (VBox) FXMLLoader.load(getClass().getResource("Sample.fxml")); 28 sc1 = new Scene(root1); 29 30// Pane root2 = (Pane)FXMLLoader.load(getClass().getResource("BattleScreen.fxml")); 31 FXMLLoader fxmlLoader1 = new FXMLLoader(getClass().getResource("BattleScreen.fxml")); 32 Pane root2 = (Pane) fxmlLoader1.load(); 33 sc2 = new Scene(root2); 34 bsc = (BattleScreenController) fxmlLoader1.getController(); 35 36 FXMLLoader fxmlLoader2 = new FXMLLoader(getClass().getResource("ClearScreen.fxml")); 37 VBox root3 = (VBox) fxmlLoader2.load(); 38 sc3 = new Scene(root3); 39 csc = (ClearScreenController) fxmlLoader2.getController(); 40 41 primaryStage.setScene(sc1); 42 primaryStage.show(); 43 sc1.setOnKeyPressed(e -> primaryStage.setScene(sc2)); 44 bsc.textSet1(); 45 46 while (!fin) { 47 sc2.setOnKeyPressed(e -> keyPressed1(e)); 48 if (enemy.getHp() <= 0 || hero.getHp() <= 0) { 49 fin = true; 50 } 51 52 } 53 54 if (enemy.getHp() <= 0) { 55 primaryStage.setScene(sc3); 56 csc.textSet1(); 57 } else if (hero.getHp() <= 0) { 58 primaryStage.setScene(sc3); 59 csc.textSet2(); 60 } 61 62 } catch (Exception exception) { 63 exception.printStackTrace(); 64 } 65 } 66 67 private void keyPressed1(KeyEvent e) { 68 switch (e.getCode()) { 69 case ENTER: 70 bsc.turn(); 71 break; 72 case BACK_SPACE: 73 bsc.textSet2(); 74 break; 75 default: 76 bsc.textSet0(); 77 break; 78 } 79 } 80}

Java

1package application; 2 3import java.net.URL; 4import java.util.InputMismatchException; 5import java.util.ResourceBundle; 6 7import javax.management.StringValueExp; 8 9import javafx.fxml.FXML; 10import javafx.scene.control.Label; 11import javafx.scene.layout.VBox; 12 13public class BattleScreenController { 14 Hero hero = new Hero(); 15 Enemy enemy = new Enemy(); 16 @FXML 17 private ResourceBundle resources; 18 19 @FXML 20 private URL location; 21 22 @FXML 23 private VBox textA; 24 25 @FXML 26 private Label sentence3; 27 28 @FXML 29 private Label sentence4; 30 31 @FXML 32 private Label name; 33 34 @FXML 35 private Label hp; 36 37 @FXML 38 private Label sentence1; 39 40 @FXML 41 private Label sentence2; 42 43 @FXML 44 private Label enemyHp; 45 46 @FXML 47 private Label sentence5; 48 49 public void error(InputMismatchException e) { 50 sentence1.setText("型が違います:" + e); 51 } 52 53 public void textReset() { 54 sentence1.setText(" "); 55 sentence2.setText(" "); 56 sentence3.setText(" "); 57 sentence4.setText(" "); 58 } 59 60 public void textSet0() { 61 sentence1.setText("EnterかBackSpaceを押してください"); 62 sentence2.setText(" "); 63 sentence3.setText(" "); 64 sentence4.setText(" "); 65 } 66 67 public void textSet1() { 68 name.setText(hero.getName()); 69 hp.setText(" " + String.valueOf(hero.getHp()) + "/500"); 70 } 71 72 public void turn() { 73 enemy.damageC(hero.getAttack(), enemy.getDefence()); 74 sentence1.setText(String.valueOf(hero.getName()) + "の攻撃!!" + String.valueOf(hero.getName()) + "はマスターソードを天にかざした"); 75 sentence2.setText(String.valueOf(enemy.getName()) + "に" + String.valueOf(enemy.getRcvDamage()) + "ダメージ!!"); 76 hero.damageC(enemy.getAttack(), hero.getDefence()); 77 sentence3.setText(String.valueOf(enemy.getName()) + "の攻撃!!" + String.valueOf(enemy.getName()) + "は燃えさかる火炎をはいた"); 78 sentence4.setText(String.valueOf(hero.getName()) + "に" + String.valueOf(hero.getRcvDamage()) + "ダメージ!!"); 79 hp.setText(String.valueOf(hero.getHp()) + "/500"); 80 sentence5.setText("EnterかBackSpaceを押してください"); 81 } 82 83 public void textSet2() { 84 sentence1.setText(String.valueOf(hero.getName()) + "は逃げ出した"); 85 sentence2.setText("しかしまわりこまれてしまった!!"); 86 sentence3.setText(String.valueOf(hero.getName()) + "は" + String.valueOf(enemy.getName()) + "のかぎづめで背中を一突きされた"); 87 hero.setHp(0); 88 hp.setText(String.valueOf(hero.getHp()) + "/500"); 89 sentence4.setText("GAME OVER!!"); 90 } 91 92 @FXML 93 void initialize() { 94 assert sentence3 != null : "fx:id=\"sentence3\" was not injected: check your FXML file 'BattleScreen.fxml'."; 95 assert sentence4 != null : "fx:id=\"sentence4\" was not injected: check your FXML file 'BattleScreen.fxml'."; 96 assert name != null : "fx:id=\"name\" was not injected: check your FXML file 'BattleScreen.fxml'."; 97 assert hp != null : "fx:id=\"hp\" was not injected: check your FXML file 'BattleScreen.fxml'."; 98 assert sentence1 != null : "fx:id=\"sentence1\" was not injected: check your FXML file 'BattleScreen.fxml'."; 99 assert sentence2 != null : "fx:id=\"sentence2\" was not injected: check your FXML file 'BattleScreen.fxml'."; 100 } 101} 102

Java

1package application; 2 3public class Hero { 4 private String name = "ゆうしゃ"; 5 private int hp = 500; 6 private int attack = 100; 7 private int defence = 50; 8 9 private int rcvDamage; 10 11 public void damageC(int attack, int defence) { 12 if (attack - defence > 0) { 13 rcvDamage = attack - defence; 14 } else if (attack - defence <= 0) { 15 rcvDamage = 1; 16 } 17 this.hp -= rcvDamage; 18 } 19 20 public String getName() { 21 return this.name; 22 } 23 24 public int getHp() { 25 return this.hp; 26 } 27 28 public void setHp(int hp) { 29 this.hp = hp; 30 } 31 32 public int getAttack() { 33 return this.attack; 34 } 35 36 public int getDefence() { 37 return this.defence; 38 } 39 40 public int getRcvDamage() { 41 return this.rcvDamage; 42 } 43 44} 45

Java

1package application; 2 3public class Enemy extends Object { 4 private String name = "魔王"; 5 private int hp = 300; 6 private int attack = 100; 7 private int defence = 50; 8 9 private int rcvDamage; 10 11 public void damageC(int attack, int defence) { 12 if (attack - defence > 0) { 13 rcvDamage = attack - defence; 14 } else if (attack - defence <= 0) { 15 rcvDamage = 1; 16 } 17 this.hp -= rcvDamage; 18 } 19 20 public String getName() { 21 return this.name; 22 } 23 24 public int getHp() { 25 return this.hp; 26 } 27 28 public void setHp(int hp) { 29 this.hp = hp; 30 } 31 32 public int getAttack() { 33 return this.attack; 34 } 35 36 public int getDefence() { 37 return this.defence; 38 } 39 40 public int getRcvDamage() { 41 return this.rcvDamage; 42 } 43 44} 45 46

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

テキストエディタとしてEclipse、GUIビルダーとしてscene builderを用いています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/12/13 20:34

コードブロック冒頭はファイル名ではなく言語名です。 ```ここに言語を入力 コード ```
nemo3002

2020/12/14 02:18

勘違いしていました!修正しました。ありがとうございます。
guest

回答1

0

コンソールでの経験とGUIを作成した時の挙動の違いで迷っているようにお見受け致しました。
もう少し導入ライブラリであるFXMLを学ばれた方が良いと思います。

こちらのようなボタンの動きを制御することも出来る関数等があります。
プレイヤーの行動と敵の行動をオブジェクト指向チックに分けて考えると分かりやすいと思います。

投稿2020/12/14 01:21

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nemo3002

2020/12/14 02:21

返信ありがとうございます!!まさにコンソールで実行するときと、GUIを作成して実行するときの違いにすごく戸惑っています。 こちらのページはまさに環境構築の時に私も参考にさせていただきました。1つうかがいたいのですが、ボタンの動きを制御できる関数というのはどこの部分を指しているのですか?
stdio

2020/12/14 02:36

そのページ内で「ボタン押下時のアクション」と検索してみて下さい。 その下に書かれているプログラムの事です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問