Added state #6, #7, #8

This commit is contained in:
Tibo De Peuter 2022-12-14 15:13:43 +01:00
parent f348a47281
commit 9e5f22458c
6 changed files with 93 additions and 30 deletions

View file

@ -6,10 +6,10 @@ module RPGEngine
) where
import Game
import RenderGame
import Render
import Graphics.Gloss (
Color(..)
, black
, white
, play
)
@ -25,7 +25,7 @@ winOffsets = (0, 0)
-- Game background color
bgColor :: Color
bgColor = black
bgColor = white
----------------------------------------------------------------------

View file

@ -2,21 +2,24 @@
module Game
( Game(..)
, initGame -- Initialize the game
-- Initialize the game
, initGame
) where
import State
----------------------------- Constants ------------------------------
-- TODO Add more
data Game = Game {
-- TODO Add more
playerName :: String
-- Current state of the game
state :: State
}
----------------------------------------------------------------------
-- Initialize the game
-- TODO Expand
initGame :: Game
initGame = Game {
playerName = "Tibo"
state = defaultState
}

32
lib/data/State.hs Normal file
View file

@ -0,0 +1,32 @@
-- Describes the current state of the game,
-- e.g. Main menu, game, pause, win or lose
-- Allows to easily go to a next state and change rendering accordingly
module State
( State(..)
-- Default state of the game, Menu
, defaultState
-- Get the next state based on the current state
, nextState
) where
----------------------------- Constants ------------------------------
-- Current state of the game.
data State = Menu
| Playing
| Pause
| Win
| Lose
----------------------------------------------------------------------
defaultState :: State
defaultState = Menu
nextState :: State -> State
nextState Menu = Playing
nextState Playing = Pause
nextState Pause = Playing
nextState _ = Menu

47
lib/render/Render.hs Normal file
View file

@ -0,0 +1,47 @@
-- Allows to render the played game
module Render
(
-- Initialize a window to play in
initWindow
-- Render the game
, render
) where
import Game(Game(..))
import State(State(..))
import Graphics.Gloss
----------------------------------------------------------------------
initWindow :: String -> (Int, Int) -> (Int, Int) -> Display
initWindow title dims offs = InWindow title dims offs
render :: Game -> Picture
render g@Game{ state = Menu } = renderMenu g
render g@Game{ state = Playing } = renderPlaying g
render g@Game{ state = Pause } = renderPause g
render g@Game{ state = Win } = renderWin g
render g@Game{ state = Lose } = renderLose g
-- TODO
renderMenu :: Game -> Picture
renderMenu _ = text "Menu"
-- TODO
renderPlaying :: Game -> Picture
renderPlaying _ = text "Playing"
-- TODO
renderPause :: Game -> Picture
renderPause _ = text "Pause"
-- TODO
renderWin :: Game -> Picture
renderWin _ = text "Win"
-- TODO
renderLose :: Game -> Picture
renderLose _ = text "Lose"

View file

@ -1,19 +0,0 @@
-- Allows to render the played game
module RenderGame
( initWindow -- Initialize a window to play in
, render -- Rener the game
) where
import Game
import Graphics.Gloss
----------------------------------------------------------------------
-- Render the game
render :: Game -> Picture
render _ = Blank
-- Initialize a window to play in
initWindow :: String -> (Int, Int) -> (Int, Int) -> Display
initWindow title dims offs = InWindow title dims offs

View file

@ -11,8 +11,8 @@ library
gloss >= 1.11 && < 1.14, gloss-juicy >= 0.2.3
exposed-modules:
RPGEngine,
Game,
RenderGame
Game, State,
Render
executable rpg-engine
main-is: Main.hs