Create user interractions
This commit is contained in:
parent
fd1aef44ef
commit
9a1cf149df
3 changed files with 58 additions and 45 deletions
35
app/Main.hs
35
app/Main.hs
|
|
@ -3,6 +3,7 @@ module Main where
|
|||
import Lib
|
||||
import System.Environment
|
||||
import System.Random
|
||||
import Text.Read
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
|
|
@ -11,5 +12,35 @@ main = do
|
|||
boardLength = read (args !! 1)
|
||||
bombs = read (args !! 2)
|
||||
generator <- newStdGen
|
||||
putStrLn . printBoard . revealAll . createBoard boardWidth boardLength $
|
||||
generateRandomCoordinates (boardWidth-1) (boardLength-1) bombs generator
|
||||
gameStep . createBoard boardWidth boardLength $
|
||||
generateRandomCoordinates (boardWidth - 1) (boardLength - 1) bombs generator
|
||||
|
||||
gameStep :: Board -> IO ()
|
||||
gameStep board = do
|
||||
putStrLn . convertBoardToString $ board
|
||||
coordinates <- getCoordinates
|
||||
let nextBoard = revealTile coordinates board
|
||||
if isGameLost nextBoard
|
||||
then gameLost nextBoard
|
||||
else if isGameWon nextBoard
|
||||
then gameWon nextBoard
|
||||
else gameStep nextBoard
|
||||
|
||||
getCoordinates :: IO (Int, Int)
|
||||
getCoordinates = do
|
||||
putStrLn "Enter the coordinates of the tile to reveal (X then Y, zero indexed):"
|
||||
xString <- getLine
|
||||
yString <- getLine
|
||||
case (readMaybe xString, readMaybe yString) of
|
||||
(Just x, Just y) -> return (x,y)
|
||||
_ -> putStrLn "Invalid coordinates!" >> getCoordinates
|
||||
|
||||
gameLost :: Board -> IO ()
|
||||
gameLost board = do
|
||||
putStrLn . convertBoardToString . revealAll $ board
|
||||
putStrLn "Boom! You lost!"
|
||||
|
||||
gameWon :: Board -> IO ()
|
||||
gameWon board = do
|
||||
putStrLn . convertBoardToString $ board
|
||||
putStrLn "You won! All the bombs were found!"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue