on master help sign in
just rely on the geo array for collision
a1038b2Corey O'Connor
test/Rouge.hs+12−10
@@ -60,12 +60,12 @@ mkLevel _difficulty = do
60
60
61add_room (center_x, center_y) geo level_width level_height = do
61add_room (center_x, center_y) geo level_width level_height = do
62 size <- randomRIO (5,15)
62 size <- randomRIO (5,15)
63− let x_min = max 0 (center_x - size)
63+ let x_min = max 1 (center_x - size)
64− x_max = min level_width (center_x + size)
64+ x_max = min (level_width - 1) (center_x + size)
65− y_min = max 0 (center_y - size)
65+ y_min = max 1 (center_y - size)
66− y_max = min level_height (center_y + size)
66+ y_max = min (level_height - 1) (center_y + size)
67− let room = [((x,y), EmptySpace) | x <- [x_min..x_max], y <- [y_min..y_max]]
67+ let room = [((x,y), EmptySpace) | x <- [x_min..x_max - 1], y <- [y_min..y_max - 1]]
68− return $ accum (\_ v -> v) geo room
68+ return (geo // room)
69
69
70image_for_geo EmptySpace = char (def_attr `with_back_color` green) ' '
70image_for_geo EmptySpace = char (def_attr `with_back_color` green) ' '
71image_for_geo Rock = char (def_attr `with_fore_color` white) 'X'
71image_for_geo Rock = char (def_attr `with_fore_color` white) 'X'
@@ -96,10 +96,12 @@ move_dude dx dy = do
96 vty <- ask
96 vty <- ask
97 world <- get
97 world <- get
98 let Dude x y = dude world
98 let Dude x y = dude world
99− (w, h) <- gets (snd . bounds . geo . level)
99+ let x' = x + dx
100+ y' = y + dy
101+ -- this is only valid because the level generation assures the border is always Rock
102+ case geo (level world) ! (x',y') of
100− put $ world { dude = Dude (min (w - 2) $ max 1 (x + dx))
103+ EmptySpace -> put $ world { dude = Dude x' y' }
101− (min (h - 2) $ max 1 (y + dy))
104+ _ -> return ()
102− }
103
105
104view :: Game ()
106view :: Game ()
105view = do
107view = do