From bdd12beff5a543b7e9cd47cee3c4e3c6b48cffd0 Mon Sep 17 00:00:00 2001 From: Peter Tillemans Date: Tue, 21 May 2024 09:08:01 +0200 Subject: [PATCH] update level introspection --- game/model/level.scm | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/game/model/level.scm b/game/model/level.scm index 13a59aa..84ccd3b 100644 --- a/game/model/level.scm +++ b/game/model/level.scm @@ -2,6 +2,7 @@ #:use-module (ice-9 match) #:use-module (ice-9 pretty-print) #:use-module (ice-9 textual-ports) + #:use-module (chickadee math vector) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-64) @@ -78,6 +79,33 @@ (define (level-tile-at level x y ) (level-tile-at-row-col level (coord->cell y) (coord->cell x))) +(define (gen-coords a b) + (for ((row (iota a))) + (for ((col (iota b))) + (list row col)) + ) + ) + +(define (level-find-tile level tile) + (let loop ((row 0)) + (if (= row (level-height level)) + #f + (let loop2 ((col 0)) + (if (= col (level-width level)) + (loop (+ row 1)) + (if (eq? (level-tile-at-row-col level row col) 'player) + (vec2 (* col cell-size) (* row cell-size)) + (loop2 (+ col 1)))))))) +(define (level-find-player level) + (let loop ((row 0)) + (if (= row (level-height level)) + #f + (let loop2 ((col 0)) + (if (= col (level-width level)) + (loop (+ row 1)) + (if (eq? (level-tile-at-row-col level row col) 'player) + (vec2 (* col cell-size) (* row cell-size)) + (loop2 (+ col 1)))))))) (test-begin "level") @@ -115,15 +143,15 @@ 'goal) (test-equal - (level-find-player (level-parse "WWWWW\nWP GW\nWWWWW\n") 1 3) + (level-find-player (level-parse "WWWWW\nWP GW\nWWWWW\n")) (vec2 16 16)) (test-equal - (level-find-goal (level-parse "WWWWW\nWP GW\nWWWWW\n") 1 3) + (level-find-goal (level-parse "WWWWW\nWP GW\nWWWWW\n")) (vec2 48 16)) (test-equal - (level-find-goal (level-parse "WWWWW\nWE EW\nWWWWW\n") 1 3) + (level-find-others (level-parse "WWWWW\nWE EW\nWWWWW\n")) (list (vec 16 16) (vec2 48 16))) (test-end "level")