first commit
This commit is contained in:
72
pp1/main.rkt
Normal file
72
pp1/main.rkt
Normal file
@@ -0,0 +1,72 @@
|
||||
(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)
|
||||
Reference in New Issue
Block a user