[[TopPage]] > 最終課題に向けて > 演習4-2 オセロの基礎2

* オセロの基礎2 [#rc5dd636]

** コマを置ける条件 [#z3f06a7b]

- オセロのコマを置ける条件についてまとめてみます.

+ 自分のターンである
+ 置く場所にコマがない
+ &color(red){置く場所から隣8方向のどこかに相手のコマがある};
+ &color(red){置くと,必ず相手のコマが1コ以上裏返る};

- 1は[[演習4-1>演習4-1 オセロの基礎1]]で,できました.
- 2も,押したボタンがboardIconかどうかを判断するだけなので,すぐできますね.
- 以降の3,4のプログラムは人それぞれです.
-- 難しいと思う人は,ここでその一例をご紹介します.
-- できそうな部分で参考をやめて,自分で書いていくのが良いですよ.

** 課題4・隣8方向の判定 [#n4f1df21]

- それでは,3の条件を追加してみましょう.
-- 押されたボタンがboardIconだと分かった後に,theArrayIndexをint型に変換します.
-- 変換した変数(下記ではindex)を使って,以下のように書いてください.
 if(judgeButton(index)){
   //置ける
   CLICK送信の処理
 } else {
   //置けない
   System.out.println("そこには配置できません");
 }

- judgeButton()は,これから新しく作る関数の名前です.
-- この関数の返り値はBoolean型です.置けたらtrue,置けないならfalseを返す関数です.

- では,mouseMovedの下に,新しい関数を追加します.
 public boolean judgeButton(int index){
   boolean flag = false;
   
   //色々な条件からflagをtrueにするか判断する
   
   return flag;
 }

- flagをtrueにする手順は,こうでしょうか.
++ 隣8方向に相手のコマがあるか,ひとつずつ見ていく
++ ひとつでもあれば,flagをtrueにする
- ここで,隣8方向の参照のしかたを下図に示します.

#ref(direction.png,nolink,center)~
CENTER:図1. 隣8方向の求め方(クリックで拡大)

- indexをx,y成分に分解できれば,buttonArray[y][x]の情報が参照できます.
-- このy,xをそれぞれ±1することで,まわりのボタンの情報も取ることができますね.
-- 効率の良いプログラムを作成するには,%%%iとjの二重for文で%%%自分(i=0,j=0)以外のコマを見ていく手順が良さそうです.
-- for文の中で,buttonArray[y+i][x+j]のアイコンがyourIconならばflagをtrueにします.

- あとは,端っこのボタンの処理です.端は8方向の範囲が場外に出るため,クリックするとエラーが出ると思います.
-- そこで,for文の中で増加するiとjの最小値または最大値を変えてあげればOKです.


** 課題5・ひっくり返す判定 [#x140b7ee]

トップ   一覧 単語検索 最終更新     最終更新のRSS