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

[jfriends] Boardインスタンスの使い方(Re: staticの使い方(メソッド))



in [jfriends] Re: staticの使い方(メソッド)
前橋 和弥  <PXU00211@xxxxxxxxxx> wrote:

> 前橋です。
> 
> 小薮さん:
> >> (Playerの説明)
> >> >>・Boardに対してポインタを持ちます。
> >> >「Boardのインスタンスを保持します」かな。
> >>
> >> Playerが、それぞれにBoardを抱え込んでいたりしていたら、ゲー
> >> ムになりませんってば。(^^;
> >
> >コンピュータの思考ルーチンには、先読みのために、
> >自分自身のBoardインスタンスを持たせたくないですか?
> 
> そうですね。
> 
> ただ、それは、「次、君の番ね」と言われた時点でBoardからコピー
> すればいい話ですから、ComputerPlayerのインスタンスメンバに持
> つのではなくて、ローカル変数に生成して、引数で持って回る形に
> なるような。

おっしゃる通りです。
ということは、各Playerは、自分自身のBoardのインスタンスを
抱え込めるんですよね?
単に、上の書き方が、
  Boardクラスは「正式盤面」クラスであり、
  したがってインスタンスは一つしか持たない
と読めてしまったもので。
# 細かいつっこみになってしまいました。ゴメンナサイ


> そういや、C++では、盤面の状態を表現する構造体を、引数として
> スタックに積んで先読みしましたが、Javaだと、呼び出しの度に
> clone()かな(遅そう)。

手番毎に一回の実行であればさほど気にする必要は
ないと思います。



> 真剣にチューニングするなら、(略)

とりあえずチューニングはしないという方針は
いかがでしょうか。^_^


> >Judgeのインスタンスが「正式盤面」としてBoardのインスタンスを
> >一つ持ち、各プレイヤーはそのコピーの取得が許されている、
> >とかそんな形になるかと思いますが。
> 
> その場合、Playerさんは、「正式盤面」へのポインタを保持するこ
> とは許されていないのでしょうか。Boardの内容をコピーするのは
> もちろん、「コマを置く」メソッドをコールするのも、全てJudge
> 経由で行なう、と。
> 
> それはそれで正しい設計だと思います。ちょっと面倒そうではあり
> ますが。

思考ルーチンを公募して互いに戦わせたりするなら、必須ですよね。
そうでない場合にも、assertion代わりにJudgeが
「そこに置けるのか?」判定をした方がいいと思います。


ちなみに、Judgeではなく、Gameという名前にして、ゲームの
流れ全体をあらわすオブジェクト、という位置づけにした方が私の好み。


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