aboutsummaryrefslogtreecommitdiff
path: root/src/View/Game.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/View/Game.elm')
-rw-r--r--src/View/Game.elm99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/View/Game.elm b/src/View/Game.elm
new file mode 100644
index 0000000..25b519c
--- /dev/null
+++ b/src/View/Game.elm
@@ -0,0 +1,99 @@
+module View.Game
+ ( gameView
+ ) where
+
+import List
+
+import Graphics.Collage (..)
+import Graphics.Element (Element)
+import Color (..)
+import Text (..)
+import Text
+
+import Model.Vec2 (Vec2)
+import Model.Player (..)
+import Model.Game (Game)
+import Model.Point (..)
+import Model.Board (boardSize)
+import Model.Config (..)
+
+gameView : Game -> Element
+gameView {time, score, player, cloud, bestScore} =
+ let whitePointForms = List.map (pointForm time (configColor White)) (cloud.points White)
+ blackPointForms = List.map (pointForm time (configColor Black)) (cloud.points Black)
+ forms = boardForms
+ ++ playerForms player
+ ++ whitePointForms
+ ++ blackPointForms
+ ++ scoreForms score
+ ++ bestScoreForms bestScore
+ in collage (truncate boardSize.x) (truncate boardSize.y) forms
+
+boardForms : List Form
+boardForms = [filled boardColor (rect boardSize.x boardSize.y)]
+
+boardColor : Color
+boardColor = rgb 103 123 244
+
+playerForms : Player -> List Form
+playerForms player =
+ let playerColor = configColor player.config
+ in [circleForm player.pos playerSize playerColor]
+
+playerColor : Color
+playerColor = rgb 224 224 224
+
+pointForm : Float -> Color -> Point -> Form
+pointForm time color point =
+ let pos = pointMove point time
+ in circleForm pos pointSize color
+
+configColor : Config -> Color
+configColor config =
+ case config of
+ White -> rgb 240 240 240
+ Black -> rgb 14 17 33
+
+circleForm : Vec2 -> Float -> Color -> Form
+circleForm pos size color =
+ let outline = circle size
+ |> filled outlineColor
+ inside = circle (size - 1)
+ |> filled color
+ in group [outline, inside]
+ |> move (pos.x, pos.y)
+
+outlineColor : Color
+outlineColor = rgb 34 34 34
+
+scoreForms : Int -> List Form
+scoreForms score =
+ let text = (toString score)
+ scorePos = { x = 0.0, y = boardSize.y / 2 - 30 }
+ in [textForm text scorePos centered]
+
+bestScoreForms : Int -> List Form
+bestScoreForms bestScore =
+ if(bestScore > 0) then
+ let text = "Record: " ++ (toString bestScore)
+ pos =
+ { x = -boardSize.x / 2 + 100
+ , y = -boardSize.y / 2 + 30
+ }
+ in [textForm text pos leftAligned]
+ else []
+
+textForm : String -> Vec2 -> (Text -> Element) -> Form
+textForm content pos alignment =
+ let textElement = fromString content
+ |> Text.height 30
+ |> typeface ["calibri", "arial"]
+ |> Text.color textColor
+ |> bold
+ |> alignment
+ in textElement
+ |> toForm
+ |> move (pos.x, pos.y)
+
+textColor : Color
+textColor = rgb 14 17 33