data State = State { statePlayer :: !(Character Player)
, stateBox :: !(Character Box)
, stateEnemy :: ![Character Enemy]
+ , stateDifficulty :: !Int
, stateIsQuitting :: !Bool
, stateRandomGen :: !G.StdGen
, stateScreen :: !Screen
- , stateScore :: !Integer
+ , stateScore :: !Int
}
gameSettings :: G.StdGen -> G.Game State
initState stdgen = State { statePlayer = initPlayer
, stateBox = initBox
, stateEnemy = initEnemies
+ , stateDifficulty = 1
, stateIsQuitting = False
, stateRandomGen = stdgen
, stateScreen = TitleScreen
let oldPlayer = statePlayer state
let player = moveCharacter (entityDirection oldPlayer) oldPlayer
let box = handleCollision player (stateBox stateAfterEnemies)
+ let newScore = stateScore stateAfterEnemies + 1
if isOutOfBounds box then stateAfterEnemies { stateScreen = TitleScreen }
- else stateAfterEnemies { statePlayer = player, stateBox = box, stateScore = stateScore stateAfterEnemies + 1 }
+ else stateAfterEnemies { statePlayer = player, stateBox = box, stateScore = newScore, stateDifficulty = div newScore 200 + 1 }
handleTick state = state
handleEnemies :: State -> State
handleEnemies state = do
let oldEnemies = stateEnemy state
let randomGen1 = stateRandomGen state
- let maxEnemies = 5
+ let maxEnemies = stateDifficulty state
let (enemiesToCreate, randomGen2) = G.getRandom (0, maxEnemies - length oldEnemies) randomGen1
let (newRandomEnemies, randomGen3) = createEnemies enemiesToCreate (oldEnemies, randomGen2)
let updatedEnemies = moveEnemies newRandomEnemies
handleKeyPress :: State -> Char -> State
handleKeyPress state@(State { stateScreen = TitleScreen }) 'Q' = state { stateIsQuitting = True }
-handleKeyPress state@(State { stateScreen = TitleScreen }) 'P' = state { statePlayer = initPlayer, stateBox = initBox, stateEnemy = initEnemies, stateScreen = GameScreen, stateScore = 0 }
+handleKeyPress state@(State { stateScreen = TitleScreen }) 'P' = state { statePlayer = initPlayer, stateBox = initBox, stateEnemy = initEnemies, stateDifficulty = 1, stateScreen = GameScreen, stateScore = 0 }
handleKeyPress state@(State { stateScreen = TitleScreen }) 'H' = state { stateScreen = HelpScreen }
handleKeyPress state@(State { stateScreen = HelpScreen }) _ = state { stateScreen = TitleScreen }
handleKeyPress state@(State { stateScreen = GameScreen }) 'Q' = state { stateScreen = TitleScreen }