0

Quilを使用して Clojure でゲームを作成しようとしています。

(qc/defsketch sketch
  :title "My Game"
  :size [800 600]
  :setup #(qc/smooth)
  :draw draw
  :mouse-pressed mouse-pressed
  :key-pressed key-pressed)

((def position (atom 0))(swap! position inc)@positionを使って動くボールを作ることはできますが、これを拡大縮小する方法がわかりません。)

描画用の関数 (および入力ハンドラー) をスケッチに提供していることに注意してください。簡単なスケッチをするだけなら、1 つのdraw機能で十分です。

しかし、私のゲームでは、メイン メニュー、指示、レベル セレクター、またはゲームがアクティブ ビューであるかどうかに応じて、さまざまなものを描画する必要があります。これらの一部 (主にゲーム ビュー) には、描画ごとに更新されるデータを関連付ける必要があります。

これについてどうすればよいですか?Clojure について読めば読むほど、混乱していきます。(各ビューはプロトコルを満たすレコードである必要がありますか?それらはアトムとして保存する必要がありますか?それとも、それらの内部状態をアトムとして保存する必要がありますか?または、ゲーム シミュレーションの状態を別のアトムにする必要があります。ただし、メモリを占有したくない場合を除きます)ゲーム ビューがアクティブになるまで...) これは OOP ではとても簡単ですが、関数型プログラミングを学びたいと思っています。

アップデート

私が最終的に何をしたかに興味がある場合は、Mini Pinionsを参照してください。

4

1 に答える 1

1

ブログ投稿http://stevelosh.com/blog/2012/07/caves-of-clojure-02/では、ここでうまく機能すると思われる設計について説明しています。ゲーム UI は、レコードのスタック (ベクトル) です。そのブログ投稿では、プロトコルを実装していません。代わりに、UI の種類 (メイン画面、指示など) で draw-ui マルチメソッドがディスパッチされます。ただし、これは自由に変更できます。この設計では、レコードを使用して状態をモデル化します。

Clojure で状態をモデル化するために参照型 (var、atom、ref、agent) にアクセスする必要があるとは限らないことに注意してください。

于 2013-10-19T05:14:02.927 に答える