71 lines
2.0 KiB
Racket
71 lines
2.0 KiB
Racket
#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!)))))))))))
|