Create user interractions

This commit is contained in:
Paul-Henri Froidmont 2019-12-07 02:51:12 +01:00 committed by Paul-Henri Froidmont
parent fd1aef44ef
commit 9a1cf149df
3 changed files with 58 additions and 45 deletions

View file

@ -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!"