[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: オセロのクラス構造




>・AWT以外の実装もあるかも知れないので、ひとつのインプリメン
>  トとして、インタフェースの陰に隠します(だったら名前にAWTを
>  入れるべきか?)。

将来 Swing とかに拡張するなら、そうした方が良いかも。

>  Action getEvent() ... Actionは、int x, int yをメンバとする
>    クラスです。どこがクリックされたかしら、という情報を返します。
>    これを呼び出すスレッドは、Judgeのスレッドなので、アプレッ
>    トのイベントドリブンなスレッドと、wait()/notify()を使っ
>    て待ち合わせます。

java.util.EventObject を拡張したイベントクラスを書いて、
これを受け取れる Listener を書いた方が良いです。

この場合、OthelloPanel とかいう名前の、JavaBeans として
書く事になると思います。

>  # setBoard()メソッドは、OthelloWindowインタフェースに含める
>  # べきでしょうか? それとも、OthelloWindowImplでいい?

OthelloPanel インターフェースかな。

>・put(int x, int y, int senteOrGote) にて、石が置けます(どう
>  してもenumが欲しい!!).

boolean isSente でもオーケー?

>・Boardと、ふたつのPlayerに対してポインタを保持します。

「Boardのインスタンスと、ふたつのPlayerインスタンスを保持します」
の方が分かりやすいです。

>・Boardに対してポインタを持ちます。

「Boardのインスタンスを保持します」かな。

>◎HumanPlayerクラス
>・人間のプレイヤを代行するクラスです。

これは将来通信対戦したりできるように拡張するんですか?

(そうすると、
OthelloサーバーとOthelloクライアントとして実装する必要が..)

>・OthelloWindowへのポインタを保持しています。

なぜこのインスタンスを保持する必要があるのでしょうか。

>・requestAction()がコールされたら、OthelloWindowのgetEvent()
>  メソッドを呼んでどこがクリックされたかを取得し、Boardの
>  put()をコールします。
>・noticePass()がコールされたら、OthelloWindowにお願いして、
>  ダイアログを出してもらいます。

この辺が良く分からないです。HumanPlayerがイベントを中継してやる
のでしょうか?

>◎OthelloConstantsクラス
>・定数を定義します。BOARD_SIZE(8)とか、SENTEとか、GOTEとか、
>  SENTE_CELLとかGOTE_CELLとかBLANK_CELLとか...

BOARD_SIZE は Board が知っているべき定数なので、
Board に含めるべきだと思います。
他の定数値も同様で、
それぞれ収めるべきクラス(またはインターフェース)が
あるはずです。

SENTE、GOTE については、私なら boolean を使ってしまいます。


>設計関連の本を買うことはあっても、真ん中辺からナナメ読みになっ
>たり、積ん読に移行することが多いので、シロートの設計ですが...

やはりオブジェクトの気持ちになることが重要でしょう。:}

# ↑エラソーに言ってますが、私も最近知ったばかりの発想法です。
-- 
えんどう やすゆき <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)