tinker a little with Map generation and display
This commit is contained in:
parent
13045c4ba9
commit
9b164e4f65
5 changed files with 31 additions and 12 deletions
18
src-lib/Library/Map.hs
Normal file
18
src-lib/Library/Map.hs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
module Library.Map where
|
||||||
|
|
||||||
|
import Data.Matrix
|
||||||
|
|
||||||
|
import Library.Types
|
||||||
|
|
||||||
|
prettyPrintMap
|
||||||
|
:: ServerMap
|
||||||
|
-> IO ()
|
||||||
|
prettyPrintMap tilemap = do
|
||||||
|
mapM_
|
||||||
|
(\row -> do
|
||||||
|
mapM_
|
||||||
|
(putStr . show)
|
||||||
|
row
|
||||||
|
putStr "\n"
|
||||||
|
)
|
||||||
|
(toLists tilemap)
|
|
@ -31,7 +31,11 @@ instance FromJSON ClientMap
|
||||||
data Tile
|
data Tile
|
||||||
= Air -- ^ walkable area
|
= Air -- ^ walkable area
|
||||||
| Wall -- ^ obstacle
|
| Wall -- ^ obstacle
|
||||||
deriving (Show, Eq, Generic)
|
deriving (Eq, Generic)
|
||||||
|
|
||||||
|
instance Show Tile where
|
||||||
|
show Air = " "
|
||||||
|
show Wall = "█"
|
||||||
|
|
||||||
instance ToJSON Tile
|
instance ToJSON Tile
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import Options.Applicative
|
||||||
|
|
||||||
-- internal imports
|
-- internal imports
|
||||||
|
|
||||||
|
import Library.Map
|
||||||
import Library.Types
|
import Library.Types
|
||||||
|
|
||||||
import Server.Communication
|
import Server.Communication
|
||||||
|
@ -48,7 +49,7 @@ main = do
|
||||||
putStrLn "-----------------------------------------------------------------------------------"
|
putStrLn "-----------------------------------------------------------------------------------"
|
||||||
arena <- generateArena setMapRows setMapColumns setSpawnerProbability
|
arena <- generateArena setMapRows setMapColumns setSpawnerProbability
|
||||||
putStrLn "generated arena:"
|
putStrLn "generated arena:"
|
||||||
print (arenaMap arena)
|
prettyPrintMap (arenaMap arena)
|
||||||
putStrLn "-----------------------------------------------------------------------------------"
|
putStrLn "-----------------------------------------------------------------------------------"
|
||||||
putStrLn "starting game…"
|
putStrLn "starting game…"
|
||||||
now <- getCurrentTime
|
now <- getCurrentTime
|
||||||
|
|
|
@ -61,11 +61,11 @@ generateMap mapRows mapColumns = do
|
||||||
where
|
where
|
||||||
divide :: Int -> Int -> Int -> Int -> ServerMap -> IO ServerMap
|
divide :: Int -> Int -> Int -> Int -> ServerMap -> IO ServerMap
|
||||||
divide rowOffset colOffset rowSize colSize tilemap
|
divide rowOffset colOffset rowSize colSize tilemap
|
||||||
| rowSize <= 3 || colSize <= 3 = pure tilemap
|
| rowSize <= 4 || colSize <= 4 = pure tilemap
|
||||||
| otherwise = do
|
| otherwise = do
|
||||||
-- position wall intersection at random
|
-- position wall intersection at random
|
||||||
crossRow <- randomRIO (2, rowSize - 1)
|
crossRow <- randomRIO (2, rowSize - 2)
|
||||||
crossCol <- randomRIO (2, colSize - 1)
|
crossCol <- randomRIO (2, colSize - 2)
|
||||||
|
|
||||||
-- position wall passages at random wall tiles
|
-- position wall passages at random wall tiles
|
||||||
rowHole1 <- randomRIO (1, crossRow - 1)
|
rowHole1 <- randomRIO (1, crossRow - 1)
|
||||||
|
@ -74,18 +74,13 @@ generateMap mapRows mapColumns = do
|
||||||
colHole2 <- randomRIO (crossCol + 1, colSize - 1)
|
colHole2 <- randomRIO (crossCol + 1, colSize - 1)
|
||||||
|
|
||||||
-- determine all possible passages
|
-- determine all possible passages
|
||||||
let allHoles =
|
let holes =
|
||||||
[ (rowHole1, crossCol)
|
[ (rowHole1, crossCol)
|
||||||
, (rowHole2, crossCol)
|
, (rowHole2, crossCol)
|
||||||
, (crossRow, colHole1)
|
, (crossRow, colHole1)
|
||||||
, (crossRow, colHole2)
|
, (crossRow, colHole2)
|
||||||
]
|
]
|
||||||
|
|
||||||
-- drop one of the passages randomly
|
|
||||||
randomDropIndex <- randomRIO (0, length allHoles - 1)
|
|
||||||
let randomDrop = allHoles !! randomDropIndex
|
|
||||||
holes = filter (/= randomDrop) allHoles
|
|
||||||
|
|
||||||
crossedMap = M.mapPos
|
crossedMap = M.mapPos
|
||||||
(\(r, c) tile ->
|
(\(r, c) tile ->
|
||||||
if (r - rowOffset == crossRow && c - colOffset > 0 && c - colOffset <= colSize) ||
|
if (r - rowOffset == crossRow && c - colOffset > 0 && c - colOffset <= colSize) ||
|
||||||
|
|
|
@ -18,7 +18,8 @@ common warnings
|
||||||
|
|
||||||
library
|
library
|
||||||
import: warnings
|
import: warnings
|
||||||
exposed-modules: Library.Types
|
exposed-modules: Library.Map
|
||||||
|
Library.Types
|
||||||
Library.Types.Communication
|
Library.Types.Communication
|
||||||
Library.Types.Map
|
Library.Types.Map
|
||||||
Library.Types.Player
|
Library.Types.Player
|
||||||
|
|
Loading…
Reference in a new issue