質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Q&A

解決済

1回答

482閲覧

タイトルに戻るときに別のクラスの値を変更する。

AGUA_Channel

総合スコア14

Java

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

0グッド

0クリップ

投稿2020/01/27 18:50

編集2020/01/27 18:52

前提・実現したいこと

GamePaneの時にタイトルに戻った時に、GamePaneのsentcntの値を1にする方法が分かりません。
ご教授お願い致します。

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

コンパイルエラーはありません

該当のソースコード

java

1public class DaiceAndMancala extends Application { 2 //シーン 3 private Scene titleScene; 4 private Scene gameScene; 5 //シーンのルートになるパネル 6 private TitlePane title; 7 private GamePane game; 8 9 @Override 10 public void start(Stage stage) { 11 stage.setTitle("マンカラゲーム"); 12 stage.setWidth(800); 13 stage.setHeight(600); 14 stage.setResizable(false); 15 16 title = new TitlePane(); 17 title.gameButton.setOnAction(e -> { 18 game.init(title.p1 > title.p2); // 先手後手を与え初期化 19 stage.setScene(gameScene); 20 }); 21 titleScene = new Scene(title); 22 23 game = new GamePane(); 24 game.titleButton.setOnAction(e -> { 25 title.init(); // サイコロの振りなおし 26 stage.setScene(titleScene); 27 }); 28 gameScene = new Scene(game); 29 30 stage.setScene(titleScene); 31 stage.show(); 32 } 33 34 public static void main(String[] args) { 35 launch(); 36 } 37} 38 39class TitlePane extends VBox { 40 int p1; 41 int p2; 42 Button gameButton = new Button("ゲームへ"); 43 44 private Label pn1 = new Label(); 45 private Label pn2 = new Label(); 46 47 TitlePane() { 48 GridPane MainPane = new GridPane(); 49 Label lbl1 = new Label("1P"); 50 lbl1.setFont(new Font(25)); 51 Label lbl2 = new Label("2P"); 52 lbl2.setFont(new Font(25)); 53 54 pn1.setFont(new Font(25)); 55 pn1.setPrefSize(100, 30); 56 pn2.setFont(new Font(25)); 57 pn2.setPrefSize(100, 30); 58 59 GridPane.setConstraints(lbl1, 0, 0); 60 GridPane.setConstraints(lbl2, 1, 0); 61 GridPane.setConstraints(pn1, 0, 1); 62 GridPane.setConstraints(pn2, 1, 1); 63 64 MainPane.getChildren().addAll(lbl1, lbl2, pn1, pn2); 65 66 setSpacing(10); 67 68 gameButton.setFont(new Font(25)); 69 gameButton.setPrefSize(150, 50); 70 71 Label label = new Label("数値の大きいほうが先攻となります"); 72 label.setFont(new Font(30)); 73 Label rule = new Label("ルール"); 74 rule.setFont(new Font(30)); 75 Label rulesent = new Label("1.自分の番が来たら3つのマスの内から1つを選び、駒を総取りし、反時計回りに1つずつ置く\r\n" 76 + "2.もし、最後に置いた駒が左右の端にあるマスの場合はもう一度自分の番となる\r\n" 77 + "3.最終的に自陣の3マスが全て0になった人の勝利"); 78 rulesent.setFont(new Font(20)); 79 80 getChildren().addAll(label, MainPane,rule,rulesent,gameButton); 81 82 init();// 通常はこの後すぐinitが呼ばれるが、念のため 83 } 84 85 void init() { 86 p1 = 0; 87 p2 = 0; 88 89 while (p1 == p2) { 90 p1 = (int) (Math.random() * 6) + 1; 91 p2 = (int) (Math.random() * 6) + 1; 92 } 93 94 pn1.setText(" " + p1); 95 pn2.setText(" " + p2); 96 } 97} 98 99class GamePane extends Group { 100 Button titleButton = new Button("タイトルに戻る"); 101/*★★*/ 102 103 private int sentcnt=1; 104 private int[] BOXs = { 3, 3, 3, 0, 3, 3, 3, 0 }; 105 private boolean OneMore = false; 106 107 private ImageView p1t = new ImageView(new Image("file:1Pturn.png")); 108 private ImageView p2t = new ImageView(new Image("file:2Pturn.png")); 109 private ImageView p1w = new ImageView(new Image("file:1Pwin.png")); 110 private ImageView p2w = new ImageView(new Image("file:2Pwin.png")); 111 112 private Label label = new Label(); 113 private Label[] box = new Label[8]; 114 private Button[] btn = new Button[7]; 115 116 private Gamove gamove = new Gamove(); 117 118 119 private class Gamove { 120 void Game(int bn, int move) { 121 OneMore = false; 122 int i = bn; 123 i++; 124 125 do { 126 for (; move != 0 && i < 8; move--, i++) { 127 BOXs[i]++; 128 if (i == 3 && move == 1) { 129 OneMore = true; 130 } 131 if (i == 7 && move == 1) { 132 OneMore = true; 133 } 134 } 135 if (move >= 1) { 136 i = 0; 137 } 138 } while (move != 0); 139 140 BOXs[bn] = 0; 141 } 142 } 143 144 GamePane() { 145 label.setFont(new Font(30)); 146 label.setPrefSize(800, 30); 147 148 for (int i = 0; i < box.length; i++) { 149 box[i] = new Label(); 150 box[i].setFont(new Font(25)); 151 box[i].setPrefSize(150, 100); 152 box[i].setAlignment(Pos.CENTER); 153 } 154 155 for (int i = 0; i < btn.length; i++) { 156 if (i == 3) continue; 157 String s = i % 4 == 0 ? "左を動かす" : i % 4 == 1 ? "中央を動かす" : "右を動かす"; 158 btn[i] = new Button(s); 159 btn[i].setFont(new Font(15)); 160 btn[i].setPrefSize(150, 50); 161 btn[i].setOnAction(this::onButtonAction); 162 } 163 164 Control[][] controls = { 165 { null, btn[6], btn[5], btn[4], null, }, 166 { null, box[6], box[5], box[4], null, }, 167 { box[7], null, null, null, box[3], }, 168 { null, box[0], box[1], box[2], null, }, 169 { null, btn[0], btn[1], btn[2], null, }, 170 }; 171 for (int row = 0; row < controls.length; row++) { 172 for (int col = 0; col < controls[0].length; col++) { 173 if (controls[row][col] == null) continue; 174 GridPane.setConstraints(controls[row][col], col, row); 175 } 176 } 177 178 GridPane GamePane = new GridPane(); 179// GamePane.setPrefSize(1000, 700); 180 181 GamePane.getChildren().addAll(box); 182 GamePane.getChildren().addAll(btn[0], btn[1], btn[2], btn[4], btn[5], btn[6]); 183 184 titleButton.setFont(new Font(15)); 185 titleButton.setPrefSize(150, 50); 186 187 VBox Window = new VBox(10); 188 Window.getChildren().addAll(label, GamePane, titleButton); 189 getChildren().addAll(p1t,p2t,p1w,p2w, Window); 190 191 init(true); // 通常はこの後すぐinitが呼ばれるが、念のため 192 } 193 194 void init(boolean p1First) { 195 BOXs = new int[]{ 3, 3, 3, 0, 3, 3, 3, 0 }; 196 updateUI(); 197 198 if (p1First) p1Turn(); 199 else p2Turn(); 200 } 201 202 private void updateUI() { 203 for (int i = 0; i < box.length; i++) { 204 box[i].setText(String.valueOf(BOXs[i])); 205 } 206 207 for (int i = 0; i < btn.length; i++) { 208 if (i == 3) continue; 209 btn[i].setDisable(BOXs[i] == 0); 210 } 211 } 212 213 private void onButtonAction(ActionEvent actionEvent) { 214 Button b = (Button) actionEvent.getSource();//どのボタンが押されたかはgetSource()に 215 for (int i = 0; i < btn.length; i++) { 216 if (i == 3) continue; 217 if (b == btn[i]) gamove.Game(i, BOXs[i]); 218 } 219 220 updateUI(); 221 222 if (b == btn[0] || b == btn[1] || b == btn[2]) { 223 if (BOXs[0] == 0 && BOXs[1] == 0 && BOXs[2] == 0) { 224 p1Win(); 225 } else if (OneMore) { 226 //true 227 sentcnt++; 228 label.setText("1Pの番です(" + sentcnt + "回目)"); 229 } else { 230 sentcnt = 1; 231 p2Turn(); 232 } 233 } else if (b == btn[4] || b == btn[5] || b == btn[6]) { 234 if (BOXs[4] == 0 && BOXs[5] == 0 && BOXs[6] == 0) { 235 p2Win(); 236 } else if (OneMore) { 237 //true 238 sentcnt++; 239 label.setText("2Pの番です(" + sentcnt + "回目)"); 240 } else { 241 sentcnt = 1; 242 p1Turn(); 243 } 244 } 245 } 246 247 private void p1Win() { 248 label.setText("1Pが勝利しました"); 249 for (int i = 0; i < btn.length; i++) { 250 if (i == 3) continue; 251 btn[i].setDisable(true); 252 } 253 p1w.setVisible(true); 254 p2w.setVisible(false); 255 p1t.setVisible(false); 256 p2t.setVisible(false); 257 sentcnt = 1; 258 } 259 260 private void p2Win() { 261 label.setText("2Pが勝利しました"); 262 for (int i = 0; i < btn.length; i++) { 263 if (i == 3) continue; 264 btn[i].setDisable(true); 265 } 266 p1w.setVisible(false); 267 p2w.setVisible(true); 268 p1t.setVisible(false); 269 p2t.setVisible(false); 270 sentcnt = 1; 271 } 272 273 private void p1Turn() { 274 label.setText("1Pの番です"); 275 for (int i = 0; i < btn.length; i++) { 276 if (i == 3) continue; 277 btn[i].setVisible(i < 3); 278 } 279 p1w.setVisible(false); 280 p2w.setVisible(false); 281 p1t.setVisible(true); 282 p2t.setVisible(false); 283 } 284 285 private void p2Turn() { 286 label.setText("2Pの番です"); 287 for (int i = 0; i < btn.length; i++) { 288 if (i == 3) continue; 289 btn[i].setVisible(i > 3); 290 } 291 p1w.setVisible(false); 292 p2w.setVisible(false); 293 p1t.setVisible(false); 294 p2t.setVisible(true); 295 } 296} 297

試してみたこと

/*★★*/の場所にtitleButton.setOnAction(event->sentcnt=1);をしてみたが駄目でした

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/01/27 21:57

一つのクラスしか記載されてないようです。 もし一つのコードブロックにまとめてるなら、クラス毎、ファイル毎に分離してください。
TN8001

2020/01/27 23:08

試してませんが、 GamePane の void init に sentcnt=1 を入れればいいんじゃないですか
guest

回答1

0

自己解決

GamePane の void init に sentcnt=1 を入れることで成功しました。
TN8001さん、ありがとうございました。

java

1void init(boolean p1First) { 2     sentcnt=1; 3 BOXs = new int[]{ 3, 3, 3, 0, 3, 3, 3, 0 }; 4 updateUI(); 5 6 if (p1First) p1Turn(); 7 else p2Turn(); 8 } 9

投稿2020/01/28 12:38

AGUA_Channel

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問