on master help sign in
Rogue: use a type alias for the array type used for level geo data
7838789Jonathan Daugherty
test/Rogue.hs+4−4
@@ -26,7 +26,7 @@ data World = World
26data Level = Level
26data Level = Level
27 { levelStart :: (Int, Int)
27 { levelStart :: (Int, Int)
28 , levelEnd :: (Int, Int)
28 , levelEnd :: (Int, Int)
29− , levelGeo :: Array (Int, Int) LevelPiece
29+ , levelGeo :: Geo
30 -- building the geo image is expensive. Cache it. Though VTY should go through greater lengths
30 -- building the geo image is expensive. Cache it. Though VTY should go through greater lengths
31 -- to avoid the need to cache images.
31 -- to avoid the need to cache images.
32 , levelGeoImage :: Image
32 , levelGeoImage :: Image
@@ -39,6 +39,7 @@ data LevelPiece
39 deriving (Show, Eq)
39 deriving (Show, Eq)
40
40
41type Game = RWST Vty () World IO
41type Game = RWST Vty () World IO
42+type Geo = Array (Int, Int) LevelPiece
42
43
43main :: IO ()
44main :: IO ()
44main = do
45main = do
@@ -65,8 +66,7 @@ mkLevel difficulty = do
65 geo <- foldM (addRoom levelWidth levelHeight) baseGeo (start : end : centers)
66 geo <- foldM (addRoom levelWidth levelHeight) baseGeo (start : end : centers)
66 return $ Level start end geo (buildGeoImage geo)
67 return $ Level start end geo (buildGeoImage geo)
67
68
68−addRoom :: Int -> Int -> Array (Int, Int) LevelPiece -> (Int, Int)
69+addRoom :: Int -> Int -> Geo -> (Int, Int) -> IO Geo
69− -> IO (Array (Int, Int) LevelPiece)
70addRoom levelWidth levelHeight geo (centerX, centerY) = do
70addRoom levelWidth levelHeight geo (centerX, centerY) = do
71 size <- randomRIO (5,15)
71 size <- randomRIO (5,15)
72 let xMin = max 1 (centerX - size)
72 let xMin = max 1 (centerX - size)
@@ -137,7 +137,7 @@ worldImages = do
137 let dudeImage = translate (dudeX theDude) (dudeY theDude) (char pieceA '@')
137 let dudeImage = translate (dudeX theDude) (dudeY theDude) (char pieceA '@')
138 return [dudeImage, levelGeoImage theLevel]
138 return [dudeImage, levelGeoImage theLevel]
139
139
140−buildGeoImage :: Array (Int, Int) LevelPiece -> Image
140+buildGeoImage :: Geo -> Image
141buildGeoImage geo =
141buildGeoImage geo =
142 let (geoWidth, geoHeight) = snd $ bounds geo
142 let (geoWidth, geoHeight) = snd $ bounds geo
143 -- seems like a the repeated index operation should be removable. This is not performing random
143 -- seems like a the repeated index operation should be removable. This is not performing random