Carp/examples/updating.carp
2017-10-18 15:23:47 +02:00

46 lines
941 B
Plaintext

;; A slightly bigger example of how to work with structs and arrays that change
(use IO)
(deftype Pos
[x Float
y Float])
(defn incf [x]
(Float.+ x 1.0f))
(defmodule Pos
(defn move [pos]
(Pos.update-y (Pos.update-x pos incf) incf)) ;; Threading macro to the rescue!
)
(deftype Monster
[pos Pos
hp Int
name String])
(defmodule Monster
(defn init-random [name]
(Monster.init
(Pos.init (Float.random-between 0.0f 100.0f)
(Float.random-between 0.0f 100.0f))
100
@name))
(defn move [monster]
(Monster.update-pos monster Pos.move))
)
(defn main []
(do
(System.srand (System.time))
(let [monsters (Array.copy-map Monster.init-random &[@"Pegasus" @"Dragon" @"Devil"])]
(do
(println (ref (Array.str &monsters)))
(let [new-monsters (Array.endo-map Monster.move monsters)]
(println (ref (Array.str &new-monsters))))))))