前提・実現したいこと
Eclipseを用いてマンカラというゲームを作成しています。
しかし、1,2,4は問題ないのですが3を行う際に正しく動きません。
Gamove.Gameを修正すればいいとは思うのですがどのように修正すればいいかが分かりません。
どうかご教授お願い致します。
なお、3の判断はOneMoreがTrueの時にもう一度自分のターンになることを想定しています。
###マンカラのルール
0. 手前が1Pの自陣、奥に2Pの自陣、各々3マスずつあり、その左右に1マスある(俗にいう墓地のようなもの)
最初に各陣には各マスに3個ずつ駒が置かれる
0. 自分のターンの時、自陣のマスのうち1つを総取りし、反時計回りに1マス毎に1個ずつ置く。そして相手のターンに移る。
0. もし、1個ずつ置いたときに最後の1個を左右にあるマスに置く場合はもう一度自分のターンとなる。
(複数回自分のターンになる可能性もある)
0. 2と3を繰り返して自陣のマスの駒が全て0になった方の勝利
発生している問題・エラーメッセージ
コンパイルエラーは無し
OneMoreが毎回Trueになっている。(ifの条件が良くない?)
ソースコード
java
1import javafx.application.Application; 2import javafx.event.ActionEvent; 3import javafx.geometry.Pos; 4import javafx.scene.Parent; 5import javafx.scene.Scene; 6import javafx.scene.control.Button; 7import javafx.scene.control.Control; 8import javafx.scene.control.Label; 9import javafx.scene.layout.GridPane; 10import javafx.scene.layout.VBox; 11import javafx.scene.text.Font; 12import javafx.stage.Stage; 13 14public class JavaFXPlactice extends Application { 15 16 private int sentcnt; 17 private int[] BOXs = { 3, 3, 3, 0, 3, 3, 3, 0 }; 18 private boolean OneMore=false; 19 20 private Label label = new Label(); 21 22 private Label box0 = new Label(); 23 private Label box1 = new Label(); 24 private Label box2 = new Label(); 25 private Label box3 = new Label(); 26 private Label box4 = new Label(); 27 private Label box5 = new Label(); 28 private Label box6 = new Label(); 29 private Label box7 = new Label(); 30 31 private Button btn0 = new Button("左を動かす"); // 1P 32 private Button btn1 = new Button("中央を動かす"); 33 private Button btn2 = new Button("右を動かす"); 34 private Button btn4 = new Button("右を動かす"); // 2P 35 private Button btn5 = new Button("中央を動かす"); 36 private Button btn6 = new Button("左を動かす"); 37 38 private Gamove gamove = new Gamove(); 39 40 class Gamove { 41 void Game(int bn, int move) { 42 43 //初期値設定 44 OneMore=false; 45 int i = bn; 46 //1マス先から置くので 47 i++; 48 49 //駒を進める 50 do { 51 for (; move != 0 && i < 7; move--, i++) { 52 BOXs[i]++; 53 if (!(i == 2 && move == 1)) { 54 OneMore=true; 55 } 56 System.out.println("move:" + move); 57 System.out.println("i:" + i); 58 } 59 if (!(i == 7 && move == 0)) { 60 OneMore=true; 61 } 62 //一周するため 63 if (move >= 1) { 64 i = 0; 65 System.out.println("i,reset:" + i); 66 } 67 //もう一周? 68 } while (move != 0); 69 70 BOXs[bn] = 0; 71 72 //★テスト用★ 73 for (int j = 0; j < 8; j++) { 74 System.out.println("box" + j + "マス:" + BOXs[j]); 75 } 76 System.out.println("bn:" + bn); 77 System.out.println("★★OneMore:" + OneMore+"★★"); 78 79 } 80 } 81 82 83 @Override 84 public void start(Stage stage) { 85 86 stage.setTitle("マンカラゲーム"); 87 stage.setWidth(1000); 88 stage.setHeight(800); 89 90 stage.setScene(new Scene(getGamePane())); 91 stage.show(); 92 93 updateUI(); 94 p1Turn(); 95 } 96 97 //★ゲームパネル★ 98 private Parent getGamePane() { 99 100 label.setFont(new Font(30)); 101 label.setPrefSize(1000, 30); 102 103 Label[] boxes = { box0, box1, box2, box3, box4, box5, box6, box7 }; 104 for (Label l : boxes) { // 長くなるので一時的に配列に入れループでセット 105 l.setFont(new Font(25)); 106 l.setPrefSize(150, 100); 107 l.setAlignment(Pos.CENTER); 108 } 109 110 Button[] btns = { btn0, btn1, btn2, btn4, btn5, btn6 }; 111 for (Button b : btns) { 112 b.setFont(new Font(15)); 113 b.setPrefSize(150, 50); 114 b.setOnAction(this::onButtonAction); // b.setOnAction(e->onButtonAction(e)) 115 } 116 117 Control[][] controls = { // たいして短くなっていないが、場所の対応がわかりやすい 118 { null, btn6, btn5, btn4, null, }, 119 { null, box6, box5, box4, null, }, 120 { box7, null, null, null, box3, }, 121 { null, box0, box1, box2, null, }, 122 { null, btn0, btn1, btn2, null, }, 123 }; 124 for (int row = 0; row < controls.length; row++) { 125 for (int col = 0; col < controls[0].length; col++) { 126 if (controls[row][col] == null) continue; 127 GridPane.setConstraints(controls[row][col], col, row); 128 } 129 } 130 131 GridPane GamePane = new GridPane(); 132 GamePane.setPrefSize(1000, 700); 133 134 GamePane.getChildren().addAll(boxes); 135 GamePane.getChildren().addAll(btns); 136 137 VBox root = new VBox(10); 138 root.getChildren().addAll(label, GamePane); 139 140 return root; 141 } 142 143 private void updateUI() { 144 box0.setText(String.valueOf(BOXs[0])); 145 box1.setText(String.valueOf(BOXs[1])); 146 box2.setText(String.valueOf(BOXs[2])); 147 box3.setText(String.valueOf(BOXs[3])); 148 box4.setText(String.valueOf(BOXs[4])); 149 box5.setText(String.valueOf(BOXs[5])); 150 box6.setText(String.valueOf(BOXs[6])); 151 box7.setText(String.valueOf(BOXs[7])); 152 153 btn0.setDisable(BOXs[0] == 0); // 移動できないボタンは押せないようにする 154 btn1.setDisable(BOXs[1] == 0); 155 btn2.setDisable(BOXs[2] == 0); 156 btn4.setDisable(BOXs[4] == 0); 157 btn5.setDisable(BOXs[5] == 0); 158 btn6.setDisable(BOXs[6] == 0); 159 } 160 161 // ボタンを押したとき 全部共通 162 private void onButtonAction(ActionEvent actionEvent) { 163 Button b = (Button) actionEvent.getSource(); // 押されたボタン 164 if (b == btn0) gamove.Game(0, BOXs[0]); 165 if (b == btn1) gamove.Game(1, BOXs[1]); 166 if (b == btn2) gamove.Game(2, BOXs[2]); 167 if (b == btn4) gamove.Game(4, BOXs[4]); 168 if (b == btn5) gamove.Game(5, BOXs[5]); 169 if (b == btn6) gamove.Game(6, BOXs[6]); 170 updateUI(); 171 172 if (b == btn0 || b == btn1 || b == btn2) { // 1P 173 if (BOXs[0] == 0 && BOXs[1] == 0 && BOXs[2] == 0) { 174 p1Win(); 175 } else if (OneMore==true) { 176 sentcnt++; 177 label.setText("1Pの番です(" + sentcnt + "回目)"); 178 } else { 179 sentcnt = 1; 180 p2Turn(); 181 } 182 } else if (b == btn4 || b == btn5 || b == btn6) { // 2P 183 if (BOXs[4] == 0 && BOXs[5] == 0 && BOXs[6] == 0) { 184 p2Win(); 185 } else if (OneMore==true) { 186 sentcnt++; 187 label.setText("2Pの番です(" + sentcnt + "回目)"); 188 } else { 189 sentcnt = 1; 190 p1Turn(); 191 } 192 } 193 } 194 195 // 1Pの勝利 196 private void p1Win() { 197 label.setText("1Pが勝利しました"); 198 btn0.setDisable(true); 199 btn1.setDisable(true); 200 btn2.setDisable(true); 201 btn4.setDisable(true); 202 btn5.setDisable(true); 203 btn6.setDisable(true); 204 } 205 206 // 2Pの勝利 207 private void p2Win() { 208 label.setText("2Pが勝利しました"); 209 btn0.setDisable(true); 210 btn1.setDisable(true); 211 btn2.setDisable(true); 212 btn4.setDisable(true); 213 btn5.setDisable(true); 214 btn6.setDisable(true); 215 } 216 217 // 1Pのターン 218 private void p1Turn() { 219 label.setText("1Pの番です"); 220 btn0.setVisible(true); 221 btn1.setVisible(true); 222 btn2.setVisible(true); 223 btn4.setVisible(false); 224 btn5.setVisible(false); 225 btn6.setVisible(false); 226 } 227 228 // 2Pのターン 229 private void p2Turn() { 230 label.setText("2Pの番です"); 231 btn0.setVisible(false); 232 btn1.setVisible(false); 233 btn2.setVisible(false); 234 btn4.setVisible(true); 235 btn5.setVisible(true); 236 btn6.setVisible(true); 237 } 238 239// public static void setScene(Stage stage, Scene changeScene) { 240// stage.setScene(changeScene); 241// stage.show(); 242// } 243 244 public static void main(String[] args) { 245 launch(); 246 } 247}
回答3件
あなたの回答
tips
プレビュー