#lang r7rs ; Pacman ADT ; (define-library (pacman-project pacman) (import (scheme base) (pp1 graphics) (pacman-project screen) (pacman-project maze)) (export pacman-x pacman-y set-pacman-x! set-pacman-y! animate-pacman! rotate-pacman!) (begin (define time-since-last-animation 0) (define animation-interval 100) (define pacman-layer (make-new-layer!)) ;bitmap-sequence voor pacman (define pacman-bitmap-tiles (list (make-bitmap-tile "pacman-sprites/pacman-death-1.png") (make-bitmap-tile "pacman-sprites/pacman-closed.png") (make-bitmap-tile "pacman-sprites/pacman-open.png"))) (define pacman-sprite (make-tile-sequence pacman-bitmap-tiles)) ((pacman-sprite 'set-scale!) 1.5) ((pacman-layer 'add-drawable!) pacman-sprite) ;start-positie van pacman ((pacman-sprite 'set-x!) (* 2 cell-size)) ((pacman-sprite 'set-y!) (+ (* 5 cell-size) maze-offset-y)) ;geeft x-waarde terug (define (pacman-x) ((pacman-sprite 'get-x))) ;geeft y-waarde terug (define (pacman-y) ((pacman-sprite 'get-y))) ;past de x-waarde aan (define (set-pacman-x! x) ((pacman-sprite 'set-x!) x)) ;past de y-waarde aan (define (set-pacman-y! y) ((pacman-sprite 'set-y!) y)) ;pacman roteren obv zijn direction (define (rotate-pacman! direction) (cond ((eq? direction 'right) ((pacman-sprite 'rotate!) 0)) ((eq? direction 'left) ((pacman-sprite 'rotate!) 180)) ((eq? direction 'up) ((pacman-sprite 'rotate!) 90)) ((eq? direction 'down) ((pacman-sprite 'rotate!) -90)))) ;pacman animaten door langs de bitmap sequence te gaan (define (animate-pacman! ms) (set! time-since-last-animation (+ time-since-last-animation ms)) (when (>= time-since-last-animation animation-interval) ((pacman-sprite 'set-next!)) (set! time-since-last-animation 0)))))