#lang r7rs ; Game-logic ; (define-library (pacman-project game-logic) (import (scheme base) (pacman-project maze) (pacman-project pacman) (pacman-project coin) (pacman-project key) (pacman-project score) (pacman-project time-limit)) (export move-pacman!) (begin (define key-taken? #f) ;muntje opeten (define (eat-coin! row col) (cell-set! row col 2) (remove-coin! row col)) ;sleutel oppakem (define (take-key! row col) (cell-set! row col 2) (set! key-taken? #t) (remove-key!)) ;beweegt pacman en checkt voor muren, muntjes, sleutels etc. (define (move-pacman! x y) (when (not (time-up?)) (let* ((cur-x (pacman-x)) (cur-y (pacman-y)) (next-x (+ cur-x x)) (next-y (+ cur-y y)) (grid-col (quotient next-x cell-size)) (grid-row (quotient (- next-y maze-offset-y) cell-size))) (cond ;van links naar rechts ((< grid-col 0) (set-pacman-x! (* (- maze-cols 1) cell-size)) (set-pacman-y! next-y)) ;van rechts naar links ((>= grid-col maze-cols) (set-pacman-x! 0) (set-pacman-y! next-y)) ;als het een deur is openen we de deur ((cell-door? grid-row grid-col) (when key-taken? (remove-door! grid-row grid-col))) ;normale beweging (else (when (not (cell-wall? grid-row grid-col)) (set-pacman-x! next-x) (set-pacman-y! next-y) ;om te zien wat er op de volgende pos staat (cond ((cell-key? grid-row grid-col) (take-key! grid-row grid-col)) ((cell-coin? grid-row grid-col) (eat-coin! grid-row grid-col) (update-time-limit!) (update-score!)))))))))))