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ページあちらこちら参照 河西朝雄 村山要司
© Copyright 2024 ExpyDoc