質問するログイン新規登録

回答編集履歴

3

追記

2018/09/13 15:22

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -2,33 +2,35 @@
2
2
 
3
3
  > 永遠にループ
4
4
 
5
- 永久ループは**ループ終了条件を満たさない**時に発生するので、無限ループを作っていないか、ループが正しく終わるのかをSystem.out.println()で変数を出力してみたり、デバック実行をしてみてくださいな。
5
+ 永久ループは**ループ終了条件を満たさない**時に発生しまループが正しく終わるのかをSystem.out.println()で変数の内容を出力してみたり、デバック実行でステップ実行をしてみてくださいな。
6
6
 
7
- 1, まず、`paintComponent`に描画以外の処理を書かないようにします。
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
- `panitComponet`で呼び出して`putStoneJudge();`と`turnPass();`
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, は以下のような`enum`型を作ると便利です。
33
+ 5, コマは以下のような`enum`型を作ると便利です。
32
34
 
33
35
  ```Java
34
36
  public enum Stone {

2

追記

2018/09/13 15:22

投稿

umyu
umyu

スコア5846

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
- クリック時にクリック情報を元にして`ban`の置き換え処理を行います。
13
+ クリック時にクリック座標を元にして`ban`の置き換え処理を行います。
14
+ ■コマが置けるかの条件は
15
+ 1, 白、黒コマが設置されていない。
16
+ 2, 置くことで相手駒を反転できる。
13
17
 
14
- 2, 盤面情報は`Board`クラスとして、管理すると他クラスから使いやいかと
18
+ この2条件です。
15
19
 
20
+ 2, 盤面情報は`Board`クラスとして管理し`clone`を実装するとアシスト機能でも流用できるかと。
21
+
16
22
  3, `static`にするとクラス変数となるので、インスタンス間で共有されてしまいます。
17
23
  これも不具合を発生させやすいので、避けたほうがよいかと。
18
24
 

1

追記

2018/09/13 15:03

投稿

umyu
umyu

スコア5846

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
- クリック時にクリック情報を元にしてコマのbanの置き換え処理を行います。
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
- 難易度が高くなります。`ban`のマスの値が0かつコマを反転できるかどうかで判定した方が二重管理が防げます。
22
+ `ban`のマスの値が0:未設置かつ置いたことでコマを反転できるか判定した方が二重管理が防げます。
23
+ コマ反転に関しては白、黒、未配置以外に壁マスを作ると、縦、横、斜めの判定処理の使い回しが可能です。
23
24
 
24
25
  5, 石は以下のような`enum`型を作ると便利です。
25
26