回答編集履歴
3
追記
answer
CHANGED
|
@@ -2,33 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
> 永遠にループ
|
|
4
4
|
|
|
5
|
-
永久ループは**ループ終了条件を満たさない**時に発生す
|
|
5
|
+
永久ループは**ループ終了条件を満たさない**時に発生します。ループが正しく終わるのかをSystem.out.println()で変数の内容を出力してみたり、デバック実行でステップ実行をしてみてくださいな。
|
|
6
6
|
|
|
7
|
-
1,
|
|
7
|
+
1, `paintComponent`に描画以外の処理を書かないようにします。
|
|
8
|
-
`panitComponet`がすることは盤面
|
|
8
|
+
`panitComponet`が担当することは、現在の盤面表示/手番表示などの画面表示に関わる事のみです。
|
|
9
|
-
一定時間後に処理を行いたい場合(例えばCPUの思考ルーチンなど)は、[javax.swing.timer](https://docs.oracle.com/javase/jp/10/docs/api/javax/swing/Timer.html)を使います。
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
一定時間後に処理を行いたい場合(例えばCPUの思考ルーチン)は、[javax.swing.timer](https://docs.oracle.com/javase/jp/10/docs/api/javax/swing/Timer.html)や[CompletableFuture](https://docs.oracle.com/javase/jp/10/docs/api/java/util/concurrent/CompletableFuture.html)を使います。
|
|
11
|
+
|
|
12
|
+
`panitComponet`で呼び出している、`putStoneJudge();`と`turnPass();`は
|
|
13
|
+
マウスクリック時のイベントに移動してクリック時に判定をする方にします。
|
|
13
14
|
クリック時にクリック座標を元にして`ban`の置き換え処理を行います。
|
|
14
|
-
■コマが置けるかの条件は
|
|
15
|
-
1, 白、黒コマが設置されていない。
|
|
16
|
-
2, 置くことで相手駒を反転できる。
|
|
17
15
|
|
|
16
|
+
■コマが置けるかの判断条件は
|
|
17
|
+
1, 白、黒コマが置かれていない。
|
|
18
|
+
2, その位置に置くことで敵ゴマを反転できる。
|
|
19
|
+
参考:[オセロ(リバーシー)で駒をひっくり返す処理がわからない。](https://teratail.com/questions/81087)
|
|
20
|
+
|
|
18
21
|
この2つの条件です。
|
|
19
22
|
|
|
20
23
|
2, 盤面情報は`Board`クラスとして管理し`clone`を実装するとアシスト機能でも流用できるかと。
|
|
21
|
-
|
|
22
24
|
3, `static`にするとクラス変数となるので、インスタンス間で共有されてしまいます。
|
|
23
25
|
これも不具合を発生させやすいので、避けたほうがよいかと。
|
|
26
|
+
4, 変数:`ban`と変数:`putStone`と同じ盤面情報を2つの変数で管理していますが、
|
|
27
|
+
どちらの変数の値も正しく更新する必要が発生するため。難易度が高くなります。
|
|
28
|
+
banの全要素に対して駒が置けるかどうかをループでチェックし、
|
|
29
|
+
置ける座標(x,y)をArrayListに格納すると二重管理が防げます。
|
|
24
30
|
|
|
25
|
-
4, 変数:`ban`と変数:`putStone`と同じ盤面情報を2つの変数で管理していますが、
|
|
26
|
-
どちらの変数の値も正しく更新する必要が発生するため。
|
|
27
|
-
難易度が高くなります。
|
|
28
|
-
`ban`のマスの値が0:未設置かつ置いたことでコマを反転できるか判定した方が二重管理が防げます。
|
|
29
31
|
コマ反転に関しては白、黒、未配置以外に壁マスを作ると、縦、横、斜めの判定処理の使い回しが可能です。
|
|
30
32
|
|
|
31
|
-
5,
|
|
33
|
+
5, コマは以下のような`enum`型を作ると便利です。
|
|
32
34
|
|
|
33
35
|
```Java
|
|
34
36
|
public enum Stone {
|
2
追記
answer
CHANGED
|
@@ -6,13 +6,19 @@
|
|
|
6
6
|
|
|
7
7
|
1, まず、`paintComponent`に描画以外の処理を書かないようにします。
|
|
8
8
|
`panitComponet`がすることは盤面の表示とどちらの手番かの表示などです。
|
|
9
|
+
一定時間後に処理を行いたい場合(例えばCPUの思考ルーチンなど)は、[javax.swing.timer](https://docs.oracle.com/javase/jp/10/docs/api/javax/swing/Timer.html)を使います。
|
|
9
10
|
|
|
10
11
|
`panitComponet`で呼び出している、`putStoneJudge();`と`turnPass();`を
|
|
11
12
|
どこに移動するですがマウスクリック時のイベントです。
|
|
12
|
-
クリック時にクリック
|
|
13
|
+
クリック時にクリック座標を元にして`ban`の置き換え処理を行います。
|
|
14
|
+
■コマが置けるかの条件は
|
|
15
|
+
1, 白、黒コマが設置されていない。
|
|
16
|
+
2, 置くことで相手駒を反転できる。
|
|
13
17
|
|
|
14
|
-
2
|
|
18
|
+
この2つの条件です。
|
|
15
19
|
|
|
20
|
+
2, 盤面情報は`Board`クラスとして管理し`clone`を実装するとアシスト機能でも流用できるかと。
|
|
21
|
+
|
|
16
22
|
3, `static`にするとクラス変数となるので、インスタンス間で共有されてしまいます。
|
|
17
23
|
これも不具合を発生させやすいので、避けたほうがよいかと。
|
|
18
24
|
|
1
追記
answer
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
質問文の編集ありがとうございました。
|
|
2
2
|
|
|
3
3
|
> 永遠にループ
|
|
4
|
+
|
|
4
5
|
永久ループは**ループ終了条件を満たさない**時に発生するので、無限ループを作っていないか、ループが正しく終わるのかをSystem.out.println()で変数を出力してみたり、デバック実行をしてみてくださいな。
|
|
5
6
|
|
|
6
|
-
|
|
7
7
|
1, まず、`paintComponent`に描画以外の処理を書かないようにします。
|
|
8
8
|
`panitComponet`がすることは盤面の表示とどちらの手番かの表示などです。
|
|
9
9
|
|
|
10
|
+
`panitComponet`で呼び出している、`putStoneJudge();`と`turnPass();`を
|
|
10
|
-
どこに
|
|
11
|
+
どこに移動するですがマウスクリック時のイベントです。
|
|
11
|
-
クリック時にクリック情報を元にして
|
|
12
|
+
クリック時にクリック情報を元にして`ban`の置き換え処理を行います。
|
|
12
13
|
|
|
14
|
+
2, 盤面情報は`Board`クラスとして、管理すると他のクラスから使いやすいかと。
|
|
13
15
|
|
|
14
|
-
2, 盤面情報はBoardクラスとして、管理すると他のクラスから使いやすいかと。
|
|
15
|
-
|
|
16
|
-
3, staticにするとクラス変数となるので、インスタンス間で共有されてしまいます。
|
|
16
|
+
3, `static`にするとクラス変数となるので、インスタンス間で共有されてしまいます。
|
|
17
17
|
これも不具合を発生させやすいので、避けたほうがよいかと。
|
|
18
18
|
|
|
19
|
-
|
|
20
19
|
4, 変数:`ban`と変数:`putStone`と同じ盤面情報を2つの変数で管理していますが、
|
|
21
|
-
|
|
20
|
+
どちらの変数の値も正しく更新する必要が発生するため。
|
|
21
|
+
難易度が高くなります。
|
|
22
|
-
|
|
22
|
+
`ban`のマスの値が0:未設置かつ置いたことでコマを反転できるか判定した方が二重管理が防げます。
|
|
23
|
+
コマ反転に関しては白、黒、未配置以外に壁マスを作ると、縦、横、斜めの判定処理の使い回しが可能です。
|
|
23
24
|
|
|
24
25
|
5, 石は以下のような`enum`型を作ると便利です。
|
|
25
26
|
|