72 lines
2.4 KiB
Racket
72 lines
2.4 KiB
Racket
(import (scheme base)
|
|
(scheme write)
|
|
(pp1 graphics))
|
|
|
|
;; 1. Configuration
|
|
#lang r7rs
|
|
(define tile-size 40)
|
|
(define wall-color "blue")
|
|
(define pellet-color "white")
|
|
(define pellet-size 10) ; Size of the dot
|
|
|
|
;; 2. Map Data (1 = Wall, 0 = Pellet)
|
|
(define map-data
|
|
'((1 1 1 1 1 1 1 1 1 1)
|
|
(1 0 0 0 0 0 0 0 0 1)
|
|
(1 0 1 1 0 0 1 1 0 1)
|
|
(1 0 1 1 0 0 1 1 0 1)
|
|
(1 0 0 0 0 0 0 0 0 1)
|
|
(1 0 1 1 1 1 1 1 0 1)
|
|
(1 0 0 0 0 0 0 0 0 1)
|
|
(1 1 1 1 1 1 1 1 1 1)))
|
|
|
|
;; 3. Setup Window
|
|
(define screen-width (* 10 tile-size))
|
|
(define screen-height (* 8 tile-size))
|
|
|
|
(define screen (make-window screen-width screen-height "PacMan"))
|
|
((screen 'set-background!) "black")
|
|
(define game-layer ((screen 'new-layer!)))
|
|
|
|
;; 4. Build Level Function
|
|
(define (build-level layer grid)
|
|
(let loop-y ((rows grid) (y 0))
|
|
(unless (null? rows)
|
|
(let loop-x ((cols (car rows)) (x 0))
|
|
(unless (null? cols)
|
|
(let ((val (car cols))
|
|
(tile (make-tile tile-size tile-size)[cite_start])) ; Create a fresh transparent tile [cite: 81]
|
|
|
|
(cond
|
|
;; CASE 1: WALL
|
|
((= val 1)
|
|
((tile 'draw-rectangle!) [cite_start]0 0 tile-size tile-size wall-color) [cite: 85]
|
|
((tile 'set-x!) (* x tile-size))
|
|
((tile 'set-y!) (* y tile-size))
|
|
((layer 'add-drawable!) [cite_start]tile)) [cite: 158]
|
|
|
|
;; CASE 2: PELLET (DOT)
|
|
((= val 0)
|
|
;; Calculate offset to center the dot
|
|
(let ((offset (/ (- tile-size pellet-size) 2)))
|
|
((tile 'draw-ellipse!) [cite_start]offset offset pellet-size pellet-size pellet-color) [cite: 86]
|
|
((tile 'set-x!) (* x tile-size))
|
|
((tile 'set-y!) (* y tile-size))
|
|
((layer 'add-drawable!) tile))))
|
|
|
|
(loop-x (cdr cols) (+ x 1))))
|
|
(loop-y (cdr rows) (+ y 1)))))
|
|
|
|
;; 5. Run it
|
|
(build-level game-layer map-data)
|
|
|
|
;; 6. Add Pacman (on top)
|
|
(generate-mask "/home/joren/Downloads/pp1/PacMan.bmp" "black") ; Ensure background color matches your image
|
|
(define pacman (make-bitmap-tile
|
|
"/home/joren/Downloads/pp1/PacMan.bmp"
|
|
"/home/joren/Downloads/pp1/PacMan_mask.png"))
|
|
|
|
;; Place Pacman at (1, 1)
|
|
((pacman 'set-x!) (* 1 tile-size))
|
|
((pacman 'set-y!) (* 1 tile-size))
|
|
((game-layer 'add-drawable!) pacman) |