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

[jfriends] Re: Boardインスタンスの使い方




小薮です。
引用は前後してます。

On Thu, 06 May 1999 17:11:58 +0900
in [jfriends] Re: Boardインスタンスの使い方
Kazuya Maebashi <maebashi@xxxxxxxxxx> wrote:

> >思考ルーチンを公募して互いに戦わせたりするなら、必須ですよね。
> >そうでない場合にも、assertion代わりにJudgeが
> >「そこに置けるのか?」判定をした方がいいと思います。
> 
> 私は、「そこに置けるのか?」判定は、Boardがやるべきじゃないか
> なあ、と思っています。自動置ける置けない判定/コマ反転機能付
> きのインテリジェンスなオセロ盤、ということで。

いやごもっとも。
なんでそう思わなかったんだろう > 俺


> >> そういや、C++では、盤面の状態を表現する構造体を、引数として
> >> スタックに積んで先読みしましたが、Javaだと、呼び出しの度に
> >> clone()かな(遅そう)。
> >
> >手番毎に一回の実行であればさほど気にする必要は
> >ないと思います。
> 
> この手のゲームだと、ある盤面の状態について、可能な手を全てリ
> ストアップし、それぞれの手を実際に打ってみて、何手か先で盤面
> の評価値を求めるのですよね。で、「実際に打ってみる」ときに、
> スタック上に新たな盤を作り出すわけですから、手番毎にウン万回
> 実行されるはず...

Boardオブジェクトの内部に、ここまでのヒストリーをすべて
持たせたらいかがでしょう。
幸いオセロはパスを除くと最大60手しかかかりませんので、スタックを
固定長配列で実装しても、8×8×61の要素数しか必要ありません。

パスを除くので、ある時点での盤面がどちらの手番かを保持する
スタックもあった方がいいかな。

「相手Playerの代わりに試しにここに打ってみる」
「一手戻す」といったメソッドをBoardオブジェクトに持たせられます。

人間向けに「待った」機能をつけるなら、Judgeにとっても
「一手戻す」メソッドは便利なはず。



> >ちなみに、Judgeではなく、Gameという名前にして、ゲームの
> >流れ全体をあらわすオブジェクト、という位置づけにした方が私の好み。
> 
> Judgeというクラス名には実は私も抵抗がありまして...
> 
> 私の設計では、Judgeって単なる進行役なんですけど、英語で何て
> 言うんでしょう? (^^;

「進行係」で辞書を引いたらmaster of celemonies、略してM.C.と
出てました^_^

「司会」でひくと、chairpersonとかmoderatorとか出てます。
この場合プレイヤー同士は敵対しているので、調停者という
ニュアンスのmoderatorがいいのかな。

でも、私ならオセロゲームの一局、という意味で
OthelloGameまたは単にGameと名づけると思います。
# Gameという名前はパッケージ名にothelloと書いてあるのが前提

ちなみにGame(またはJudge)は必ずしもシングルトンじゃあないですよね。
例えばネットワーク越し対戦のためのRemotePlayerを作って
オセロサーバに仕立てるなら何局でも同時に動いた方がいいし、
過去の対局を研究するために複数盤面を同時にならべて
検討したりとかも・・


-----------------------------------
koyabu@xxxxxxxxxx