私は古いものを再実装しようとしていますReversi board gameすてきなUIをもう少し書いて書きました。私はJens AlfkeのGeekGameBoardのインスピレーションのコードを見てきました.CALayersはUIを実装する方法のようです。モデルとコントローラをCALayerベースのUIとは別に保つにはどうすればいいですか?
しかし、GeekGameBoardコードでモデルとビューを明確に分離することはできません。モデルがであるため、AIプレーヤーのゲームツリー検索を実行するために、たとえばゲーム状態のコピーを作成することが難しくなります。しかし、私は、2つの平行なグリッドを維持するための絶え間ない戦いを伴わないモデルとビューの分離を可能にする構造への代替方法を考え出すことはできないように思われます(モデルとビュー)を同期させる。もちろん、これには独自の問題があります。
AIの検索フレンドリーなモデル構造とディスプレイに適した表示との関係を最もよく実装するにはどうすればよいですか?どんな提案や経験もありがとうございます。私は恐ろしい/半分の答えに期待している "良い答えはありません:あなたができる最高の"それを扱うが、私は驚くように準備ができています!
回答ありがとうございました。しかし、私はそれを完全に理解しているとは完全には分かっていません。私は、あなたが周りを移動し、削除さえする初期のセットを持っているだけで、新しいパーツを置くとどうなりますか?
- ビューでユーザーがクリックします。
- クリックするとボードの位置に変換され、コントローラに通知されます。
- コントローラは、後続の状態を持つ新しいボードを作成します(必要に応じて、合法的な動きです)。
- ビューはバインディングを介して新しいボードをピックアップし、既存のビュー/レイヤー階層を破棄し、現在の状態に置き換えます。
これは正しいですか?
PS:iPhone用かMac用かを指定できませんでした。私はiPhoneでうまくいくものに最も関心がありますが、最初にMacでうまく動作するようにすれば、自分でiPhone上で動作するようにソリューションを適応させることができます。
いいえ、新しいボードは作成しません。新しいピースを作成してボードに追加します。ボード上で両方のステップを行うかどうかを決定する必要があります(コントローラがボードに「x、yで新しいピースを作って追加する」ように指示する)か、別に(コントローラがピース自体を作成してから理事会にそれを渡す)。 –
あなたはまだiPhone上で私の提案を使用することができるかもしれませんが、Bindingsを持っていないので、KVOを直接使用する必要があります。ボード層はボードの特性を観察し、ピース層はそれぞれのピースの特性を観察する。あまりにも苦痛ではありませんが、私はそれを試していません。 –