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