added boundary checking for spitOut and friends
This commit is contained in:
parent
7b29bcb20a
commit
81c350a1f6
53
Dirty.hs
53
Dirty.hs
|
@ -40,31 +40,52 @@ printFactory :: Factory -> [Element] -> IO ()
|
|||
printFactory f es = mapM_ (print . snd) lines
|
||||
where lines = putElements es $ indexCharFactory f
|
||||
|
||||
-- get tiles safely (boundary checks)
|
||||
eastTile :: Factory -> Element -> Maybe Tile
|
||||
eastTile f elem
|
||||
| length (f !! yPos elem) < xPos elem + 2 = Nothing
|
||||
| otherwise = Just $ (f !! yPos elem) !! (xPos elem + 1)
|
||||
|
||||
southTile :: Factory -> Element -> Maybe Tile
|
||||
southTile f elem
|
||||
| length f < yPos elem + 2 = Nothing
|
||||
| otherwise = Just $ (f !! (yPos elem + 1)) !! xPos elem
|
||||
|
||||
westTile :: Factory -> Element -> Maybe Tile
|
||||
westTile f elem
|
||||
| xPos elem - 1 < 0 = Nothing
|
||||
| otherwise = Just $ (f !! yPos elem) !! (xPos elem - 1)
|
||||
|
||||
northTile :: Factory -> Element -> Maybe Tile
|
||||
northTile f elem
|
||||
| yPos elem - 1 < 0 = Nothing
|
||||
| otherwise = Just $ (f !! (yPos elem - 1)) !! xPos elem
|
||||
|
||||
-- AAAAAAAA
|
||||
spitOutEast :: Factory -> Element -> Element
|
||||
spitOutEast f elem
|
||||
| (f !! yPos elem) !! (xPos elem + 1) == Track East = incXPos elem
|
||||
| (f !! (yPos elem + 1)) !! xPos elem == Track South = incYPos elem
|
||||
| (f !! yPos elem) !! (xPos elem - 1) == Track West = decXPos elem
|
||||
| (f !! (yPos elem - 1)) !! xPos elem == Track North = decYPos elem
|
||||
| eastTile f elem == Just (Track East) = incXPos elem
|
||||
| southTile f elem == Just (Track South) = incYPos elem
|
||||
| westTile f elem == Just (Track West) = decXPos elem
|
||||
| northTile f elem == Just (Track North) = decYPos elem
|
||||
|
||||
spitOutSouth :: Factory -> Element -> Element
|
||||
spitOutSouth f elem
|
||||
| (f !! (yPos elem + 1)) !! xPos elem == Track South = incYPos elem
|
||||
| (f !! yPos elem) !! (xPos elem - 1) == Track West = decXPos elem
|
||||
| (f !! (yPos elem - 1)) !! xPos elem == Track North = decYPos elem
|
||||
| (f !! yPos elem) !! (xPos elem + 1) == Track East = incXPos elem
|
||||
| southTile f elem == Just (Track South) = incYPos elem
|
||||
| westTile f elem == Just (Track West) = decXPos elem
|
||||
| northTile f elem == Just (Track North) = decYPos elem
|
||||
| eastTile f elem == Just (Track East) = incXPos elem
|
||||
|
||||
spitOutWest :: Factory -> Element -> Element
|
||||
spitOutWest f elem
|
||||
| (f !! yPos elem) !! (xPos elem - 1) == Track West = decXPos elem
|
||||
| (f !! (yPos elem - 1)) !! xPos elem == Track North = decYPos elem
|
||||
| (f !! yPos elem) !! (xPos elem + 1) == Track East = incXPos elem
|
||||
| (f !! (yPos elem + 1)) !! xPos elem == Track South = incYPos elem
|
||||
| westTile f elem == Just (Track West) = decXPos elem
|
||||
| northTile f elem == Just (Track North) = decYPos elem
|
||||
| eastTile f elem == Just (Track East) = incXPos elem
|
||||
| southTile f elem == Just (Track South) = incYPos elem
|
||||
|
||||
spitOutNorth :: Factory -> Element -> Element
|
||||
spitOutNorth f elem
|
||||
| (f !! (yPos elem - 1)) !! xPos elem == Track North = decYPos elem
|
||||
| (f !! yPos elem) !! (xPos elem + 1) == Track East = incXPos elem
|
||||
| (f !! (yPos elem + 1)) !! xPos elem == Track South = incYPos elem
|
||||
| (f !! yPos elem) !! (xPos elem - 1) == Track West = decXPos elem
|
||||
| northTile f elem == Just (Track North) = decYPos elem
|
||||
| eastTile f elem == Just (Track East) = incXPos elem
|
||||
| southTile f elem == Just (Track South) = incYPos elem
|
||||
| westTile f elem == Just (Track West) = decXPos elem
|
||||
|
|
Loading…
Reference in New Issue