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

オセロの基礎2

コマを置ける条件

  1. 自分のターンである
  2. 置く場所にコマがない
  3. 置くと,必ず相手のコマが1コ以上裏返る

課題4・隣8方向の判定

if(judgeButton(y, x)){
  //置ける
  <<PLACE命令の送信>>
} else {
  //置けない
  System.out.println("そこには配置できません");
}
関数 judgeButton
裏返りの発生するボタンであるかどうかを判定する
引数1 y ボタンのy位置(0-7)
引数2 x ボタンのx位置(0-7)
返り値 判定(TF)
direction.png
図1. 隣8方向の求め方

課題5・ひっくり返す判定

関数 flipButtons
一方向にあるコマ群を裏返す命令を送る
引数1 y ボタンのy位置(0-7)
引数2 x ボタンのx位置(0-7)
引数3 j y成分ベクトル(-1,0,1)
引数4 i x成分ベクトル(-1,0,1)
返り値 裏返ったコマの数
 
flipothello.png
図2. 隣8方向の先の求め方
 
  1. y+dy,x+dxの位置が場外なら,この関数は0を返す(判定終了)
  2. この位置のアイコンを取得する
  3. アイコンの種類を見る
    1. boardIconなら,この関数は0を返す(判定終了)
    2. myIconなら,この関数はflipNumを返す(連鎖ストップ)
    3. yourIconなら,flipNumを1増やす(連鎖が続く)
 
for(int dy=j, dx=i, k=0; k<flipNum; k++, dy+=j, dx+=i){
  //ボタンの位置情報を作る
  int msgy = y + dy;
  int msgx = x + dx;
  int theArrayIndex = msgy*8 + msgx;
  
  //サーバに情報を送る
  String msg = "FLIP"+" "+theArrayIndex+" "+myColor;
  out.println(msg);
  out.flush();
}

課題6・ゲームの終了と勝敗判定

おわりに

 

next.gif 最終課題へ


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