Next: 13.3 インスタンスの生成
Up: 13 シミュレーション例
Previous: 13.1 クラスの定義
メソッド定義は以下のようにします.
浮遊物クラスの:initは関数instanceにより生成する際に
利用されるメソッドです.
(defvar *initial-height* 25)
(defvar *asteroid-width* 25)
(defmethod set-pname ((p particle) v)
(setf (pname p) v))
(defmethod set-mass ((p particle) v)
(setf (mass p) v))
(defmethod set-x-position ((p particle) v)
(setf (x-position p) v))
(defmethod set-y-position ((p particle) v)
(setf (y-position p) v))
(defmethod set-x-speed ((p particle) v)
(setf (x-speed p) v))
(defmethod set-y-speed ((p particle) v)
(setf (y-speed p) v))
(defmethod set-x-acceleration ((p particle) v)
(setf (x-acceleration p) v))
(defmethod set-y-acceleration ((p particle) v)
(setf (y-acceleration p) v))
;;;
(defmethod position-of ((p particle))
(list (x-position p) (y-position p)))
(defmethod velocity-of ((p particle))
(list (x-speed p) (y-speed p)))
(defmethod acceleration-of ((p particle))
(list (x-acceleration p) (y-acceleration p)))
;;;
(defmethod new-position ((p particle))
(setf (x-position p)
(+ (x-position p) (x-speed p)))
(setf (y-position p)
(+ (y-position p) (y-speed p))))
(defmethod new-velocity ((p particle))
(setf (x-speed p)
(+ (x-speed p) (x-acceleration p)))
(setf (y-speed p)
(+ (y-speed p) (y-acceleration p))))
(defmethod status ((p particle))
(format t "~%~a's Pos:~a Vel:~a Acc:~a"
(pname p)
(position-of p)
(velocity-of p)
(acceleration-of p)))
(defmethod crashed? ((p particle))
(and (> (y-position p) *initial-height*)
(not (< (x-position p) 0))
(< (x-position p) *asteroid-width*)))
pname,x-position,set-pnameなどがメソッド名です.
そのメソッド名の次にはそのメソッドへの引数がきます.
ロケットはパーティクルクラスのサブクラスなので,
パーティクルクラスのメソッドをすべて継承します.
そのため,ロケットのメソッドは以下のように
ロケットに特有のメソッドのみの定義となります.
(defvar *gravity* '(0 4))
(defmethod set-motor ((p rocket) force)
(setf (motor-force p) force)
(setf (x-acceleration p)
(+ (car *gravity*) (car force)))
(setf (y-acceleration p)
(+ (cadr *gravity*) (cadr force))))
(defmethod status ((p rocket))
(format t "~%~a's Pos:~a Vel:~a Acc:~a"
(pname p)
(position-of p)
(velocity-of p)
(acceleration-of p))
(format t " Motor:~a" (motor-force p)))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日