powerpoint

2004年度JAVAゼミコンテスト作品
「Othello」
2ADM3110
田中 貴之
 この作品をつくった動機
・ 菊池研HPにあるサーブレットのテキストペー
ジの課題の所にある並木さんがつくったオセ
ロに刺激を受けてしまったため。
→挑戦したくなった!!
・ アプレットで何かしらゲームを作ってみたかっ
たため。
<Othelloの簡単な説明>
 ネット内においてあるオセロゲームとほとんど
変わりありません。(ただ単に挑戦したかった
だけなんで、ネタ要素やひねりとかほとんど存
在しません)
 コンピュータがお相手しますが、乱数で石を置
くところを決定しているのではっきりいってか
なり弱いです。
<主な変数>





int turn;
順番を表す(1=黒、2=白)
boolean place;
石が置ける場所の判定(true=置ける,false=置けない)
int stone[64]
石の状態を表す(0=なし、1=黒、2=白)
boolean flag;
ゲームの終了判定(盤面が石で埋まってるかどうか)
nw=白石、nb=黒石 で石の数を数えて勝負を判定する。
※booleanとは、「true」と「false」のみの結果を返す変数です。
要するに、「OK」なのか「だめ」なのかの判定に使用。
<オセロの表示>
石は、drawOvalメソッドを使用して描きました。
 オセロ盤は、あらかじめマス目の幅squareと盤面外の余白
marginを設定しておき、8*8のマス目になるよう、for文で幅
を足していきながら、drawLine()で線を引きました。
 PASSボタンとRESETボタンはmousePressedメソッドを使用し
て、ある座標の範囲に押されたら実行するようになっていま
す。
PASS・・・順番を管理するturnの値を変更して、相手に順番を
回す(turn = 3 - turn と設定することで相手に回る)
RESET・・・初期設定のinit()メソッドを呼び、石の配置を初期
値に戻す。

<勝負の判定>
 黒石と白石の数は、それぞれblack()メソッドと
white()メソッドで数を数えて、先ほどでたnw
(白石),nb(黒石)に入れていく。
 ゲームの終了の判定は、boolean変数の
isNotEndメソッドで調べて、flagに結果を入れ
る。(flagが「false」なら終了で、このときnw,nb
の値を比較して判定結果を表示します)
オセロ盤の座標の設定
→→→ col
↓
↓
↓
row
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15
16 … … … … … … …
…
56 … … … 60 61 62 63
座標位置はnx か ny(反転のとき使用)という形で表す。
<どのマスに押されたか>

石が置かれた場所のマスの番号nxの計算
ixとiyはマウスが押されたマス座標(ix,iy)を表して
いる。
rx = (ix-margin) / square; //colの値
ry = (iy-margin) / square; //rowの値
nx = ry * n + rx;
盤面上に押されれば、押された座標(ix,iy)からマス
目の幅で割って,colとrowとマス目の数nを使って位
置を計算します。
<石が置けるかどうか?>





Checkメソッドで行います。
まず、石を置いて、そこから8方向を調べて、石が置いてある
か&隣が同じ石でないかを判定する(周りに石がない&すべ
て同じ石だと置けない)
違う色の石があった場合、その石がある方向に自分の色の
石を見つけるまで1個ずつ進める。(なければ戻って他の方
向を判定し直す)
同じ色の石が見つかった場合、その石と置いた石に挟まれ
た全ての違う色の石をひっくり返しながら、置いた石の位置
まで戻っていく。
そして、8方向すべて判定するまで続けます。
<その他>
huntenスレッド
一気にひっくり返るのではなく、1個ずつ戻っていくような感じ
でひっくり返るように設定。
 updateメソッド
石が置かれるごとに表示を更新していくメソッド
どっちの石がユーザーかコンピュータかが分かるように、表
示するように設定。

<感想>


マス目やら現在の石の個数など、うまく表示されなかったの
がかなり辛かった。直すだけでもかなりの時間がかかった。
コンピュータがかなり弱いと感じるので、暇があればもう少し
強いコンピュータの設定をつくってみたい。
<参考文献>
・JAVA言語(入門ソフトウェアシリーズ) ナツメ社
・JAVAゲーム・アプレット
I/OBooks社
他2冊とWEBページあちらこちら参照
河西朝雄
村山要司