TopPage > 最終課題に向けて > 演習4-1 オセロの基礎1
オセロの基礎 †
はじめに †
まずは,最終課題を確認してください.
演習4は任意の課題です.やらなくてもかまいません!
ここでは,「ひとまずオセロを作りたいんだけど,何をしたらいいか分からない!」方向けに解説を行います.
ネットワーク通信とマス目アルゴリズムの詳しい説明もしているので,既に作りたい作品を想定している方も,参考になると思います.
※クライアントは,演習3-2のMyClient.javaを引き続き利用します.
※サーバは,演習3-1-1で作成したMyServer2.javaを使います.
やりたいことを考える †
- オセロといっても,単純ではありません.やることはいっぱいですね!
- まず,どんなプログラムを書けばいいかの想定と順序を組み立てましょう.
- まず,コマを自由に置ける空間を作りましょう.それからターン制,置ける判定という順に制限をかけていく,という実装順序が良さそうです.
細かな準備
クライアントごとに置けるコマの色を決定する
ターン制にする
判定を行う
置けるかどうか
ひっくり返すかどうか
ターンをパスするかどうか
勝敗はどうか
etc ...
課題1・細かな準備 †
- 使用するマウスイベントを限定する
- 余計な出力や,マス目をドラッグできる機能はいりませんよね.
- コメントアウト(// や /* */)しておくと,その行を無効化できます.
- 前にも説明しましたが,public void mouseEntered(MouseEvent e)など,マウスイベント受け取る関数全体を削除してはいけません.
- これらは,マウスイベントを受け取るMouseListener,MouseMotionListenerを使ってる場合に,必ず必要なるものです.
- この関数の中身だけをコメントアウト(// や /* */)してください.
- ウインドウのタイトルやサイズを設定する
- ボタンを8x8にする
- 初期のコマを配置する
課題2・クライアントごとに置けるコマの色を決定する †
- 受信部分は両方のクライアントで実行される,という話はしましたね.
- 送信した「自分のmyColor」と,「相手のmyColor」は異なるはずです.
- したがって,この2つの情報を比較することで,受信部分の中で
- 両方のクライアントで行いたい処理
- 送信元のみで行いたい処理
- 送信先のみで行いたい処理
- を場合分けすることができます.ここがポイント!
- あとは,送信元はmyIcon,送信先はyourIconを置く処理を書きましょう.
- 「自分のmyIcon」と「相手のyourIcon」は同じ色のはずなので,両者とも同じ画面になります.
課題3・ターン制にする †
- myColorと同じように,myTurnという変数を作ります.
- 宣言するところは,myColorと同じところですね.
- この場所で宣言すると,どこでもこの変数(ここでは,myTurn)を見る(アクセス)ことができます.
- ターンの判定方法は様々です.ここでは,例を4つぐらい挙げておきますが,1番目か2番目が分かりやすいですね.これ以降では,1番目で説明をしていきます.
- myTurnを「0」と「1」に限定し,一方を1,他方を0で初期化する場合
- 両者とも0から始めて,自分のターンが済んだら自分だけ+1する場合
- 自分と相手のターン数を比較し,一致したら先攻のターン
- 両者とも0から始めて,自分のターンが済んだら両者とも+1する場合
- myTurnの初期化は,myColorの決まった後などのタイミングで行うと良いです.
- 「0なら黒のターン,1なら白のターン」 とした場合, myTurn = 0 をmyColorがきまったところにあとに書くと自分の色(MyColor)に応じて,順番が決まりますね.
- 「0なら相手のターン,1なら自分のターン」とした場合は,myColorによって,1か0かを変える必要がありますね.
- クリックした時に,myTurnによって処理を行う・行わないを分けてください.
- これは,mouseClickedの部分を書き換える必要があります.
- つまり,自分のターンのときにはクリック(コマをおける)けど,それ以外はおけないというプログラムを書いて下さい.
- 次に,クリックしたときに,myTurnを入れ替える必要があります.
- これは,受信時に変更する必要があります.
- つまり,コマをおいた処理をする受信部分に, myTurn = 1 - myTurn; を書く必要があります.
- ここまでが全てできると,黒の人は黒の番のときだけにおけますし,白の人は白の番の時だけにおけます.
- これがうまくいったら,演習4-2に進みましょう.
myTurnのよくある間違い
- myTurn == myColorのときに自分の番と判定すると,うまく動かない可能性があります
- なぜ,そうなるか,考えてみましょう!以下の例はよくある間違いの例です
- 例えば,myColorを決めるときに,myColor=0の人がmyTurn=0,myColor=1の人がmyTurn=1にしているとします
- 「myTurn == myColorのときに自分の番」と判定すると,初回はどちらとも動きます
- 2手目は,どちらもmyTurnが異なるため,動かなくなります
- 例えば,myTurn=1の時が自分の番ときめます
- myColorの設定時に,黒の人には,myTurn=1,白の人は,myTurn=0とします
- 自分の番は,myTurn == 1などで判定するとうまくいくとおもいます
演習4-2へ