I think I found the solution.

I still have to design the render function.

I have this :


; niet grafische constanten.

(define lengte-werkblad 200)
(define breedte-werkblad 1000)
(define move-animal 3)
(define move-gauge 0.1)

; grafische constanten

(define kat  .)
(define cham .)
(define workspace (empty-scene breedte-werkblad lengte-werkblad))
(define gauge-omtrek (rectangle 1000 20 "outline" "black"))


; berekende constanten
(define correctie-cat ( / (image-width kat)2))
(define ondergrens-cat ( - 0  correctie-cat))
(define bovengrens-cat ( + breedte-werkblad correctie-cat))

(define correctie-cham ( / (image-width cham)2))
(define ondergrens-cham ( - 0  correctie-cham))
(define bovengrens-cham ( + breedte-werkblad correctie-cham))

; Te gebruiken structs

; Design a world program that works with both cats and chameleons:
; A VAnimal is either
; -- a VCat
; -- a VCham

(define-struct Vcat (Xcat Hcat Richting))
; Vcat = (make-editor Number Number)
; interp. (make-editor x h r) where x is the x-coordinate of the cat and h is the happiness of the cat and r the way the cat walks.
; make-editor Number Number  String -> Vcat
; Vcat-Xcat Editor -> Number
; Vcat-Hcat Editor -> Number
; Vcat-Richting -> String
; Vcat? Editor Any -> Boolean


(define-struct Vcham (Xcham Hcham Richting))
; Vcham = (make-editor Number Number)
; interp. (make-editor x h r) where x is the x-coordinate of the cham and h is the happiness of the cham and r the way the cham walks.
; make-editor Number Number String  -> Vcat
; Vcham-Xcham Editor -> Number
; Vcham-Hcham Editor -> Number
; Vcham-Richting -> String
; Vcham? Editor Any -> Boolean


; Vcham -> Vcham
; Function who makes the image move to the left or turn to the right
(check-expect (links-of-draaien-cham (make-Vcham 20 100 "left")) (make-Vcham 17 99.9 "left")) (check-expect (links-of-draaien-cham (make-Vcham -39 100 "left")) (make-Vcham -39 99.9 "right")) (check-expect (links-of-draaien-cham (make-Vcham 1037 100 "left")) (make-Vcham 1034 99.9 "left"))
(define (links-of-draaien-cham s)
(if ( < (Vcham-Xcham Vcham) ondergrens-cham)
   (make-Vcham  (Vcham-Xcham s)  (- (Vcham-Hcham s) move-gauge) "right")
(make-Vcham (- (Vcham-Xcham s) move-animal) (- (Vcham-Hcham s) move-gauge) "left")))



; Vcat -> Vcat
; Function who makes the image move to the left or turn to the right
(check-expect (links-of-draaien-cat (make-Vcat 20 100 "left")) (make-Vcat 17 99.9 "left")) (check-expect (links-of-draaien-cat (make-Vcat -39 100 "left")) (make-Vcat -39 99.9 "right")) (check-expect (links-of-draaien-cat (make-Vcat 1037 100 "left")) (make-Vcat 1034 99.9 "left"))
(define (links-of-draaien-cat s)
(if ( < (Vcat-Xcat Vcat) ondergrens-cat)
   (make-Vcat  (Vcat-Xcat s)  (- (Vcat-Hcat s) move-gauge) "right")
(make-Vcat (- (Vcat-Xcat s) move-animal) (- (Vcat-Hcat s) move-gauge) "left"))
)

; Vcham -> Vcham
; Function who makes the image move to the right or turn to the left
(check-expect (rechts-of-draaien-cham (make-Vcham 20 100 "right")) (make-Vcham 23 99.9 "right")) (check-expect (rechts-of-draaien-cham (make-Vcham -39 100 "right")) (make-Vcham -36 99.9 "right")) (check-expect (rechts-of-draaien-cham (make-Vcham 1040 100 "right")) (make-Vcham 1040 99.9 "left"))
(define (rechts-of-draaien-cham s)
(if ( > (Vcham-Xcham Vcham) bovengrens-cham)
   (make-Vcham  (Vcham-Xcham s)  (- (Vcham-Hcham s) move-gauge) "left")
(make-Vcham (+ (Vcham-Xcham s) move-animal) (- (Vcham-Hcham s) move-gauge) "right")))


; Vcat -> Vcat
; Function who makes the image move to the right or turn to the left
(check-expect (rechts-of-draaien-cat (make-Vcat 20 100 "right")) (make-Vcat 23 99.9 "right")) (check-expect (rechts-of-draaien-cat (make-Vcat -39 100 "right")) (make-Vcat -36 99.9 "right")) (check-expect (rechts-of-draaien-cat (make-Vcat 1040 100 "right")) (make-Vcat 1040 99.9 "left"))
(define (rechts-of-draaien-cat s)
(if ( > (Vcat-Xcat Vcat) bovengrens-cat)
   (make-Vcat  (Vcat-Xcat s)  (- (Vcat-Hcat s) move-gauge) "left")
(make-Vcat (+ (Vcat-Xcat s) move-animal) (- (Vcat-Hcat s) move-gauge) "right"))
)

; Vanimal -> Vanimal
; Function which change the world on clock ticks.
; On every tick the X-coordinate changes 3 pixels and the happiness decrease with 0.1.
  (define (tock s)
    (cond
[(Vcat? s)(if(equal? (Vcat-Richting s) "left") (links-of-draaien-cat Vcat) (rechts-of-draaien-cat Vcat))] [(Vcham? s) (if(equal? (Vcham-Richting s) "left") (links-of-draaien-cham Vcham) (rechts-of-draaien-cat Vcham))]
))

(define (render s)s)

(define (main s)
  (cond
[(Vcat? s) (big-bang s (check-with Vcat?) (on-tick tock) (on-draw render) )] [(Vcham? s) (big-bang s (check-with Vcham?) (on-tick tock) (on-draw render) )]
    ))

(main (make-Vcat 12 100 "left"))

Is this better ?

Roelof


Op 30-6-2012 9:03, Roelof Wobben schreef:
Op 30-6-2012 1:38, Neil Van Dyke schreef:
Stephen Bloch wrote at 06/29/2012 06:01 PM:
Either you introduce this stuff much better than I do, or your students are much sharper.

For the possible benefit of any students reading, I think someone say it, rather than leave it implied: Or the difference could be an isolated effect of, say, some subtle difference in how one concept was first introduced in their respective educations, not a reflection on the instruction or students overall.

Aside: I think students are much the same everywhere, and most all students have potential to be good at this stuff. But learning this stuff well requires a lot of work, and I think students generally do need to have sufficient sense that they're ``sharp,'' so that they stick with it and put in the necessary work. Or, there is another category of person, who sees themself as slow but determined; that will also lead to learning the stuff, if the self image gets them to put in the necessary work. (However, the ones who are self-assured and yet who don't do the learning work... they are doomed to be dim and to have few job options other than some kind of politician.)

Neil V.

____________________
 Racket Users list:
http://lists.racket-lang.org/users



Im rereading the chapter and I think I found a piece of the puzzle.

In the chapter there is a mention of this :

;A SIGS(short for "space invader game state") is one of:
;--(make-aimUFO <#%28tech._mix._ufo%29>Tank <#%28tech._mix._tank%29>)
;--(make-firedUFO <#%28tech._mix._ufo%29>Tank <#%28tech._mix._tank%29>Missile <#%28tech._mix._missile%29>)



I can do the same for my problem.

; A Vanimal is one of :
; - (make-Vcat ( x happiness)
;   (make-Vcham ( x happiness)

So Vanimal is not a struct but strictly a name.

Am I on the right track.

Roelof




____________________
   Racket Users list:
   http://lists.racket-lang.org/users


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to