Skip to content

Commit 1344739

Browse files
committedJun 11, 2017
Add end-game display
1 parent 7ac037b commit 1344739

File tree

3 files changed

+67
-15
lines changed

3 files changed

+67
-15
lines changed
 

‎elm-package.json

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"elm-lang/mouse": "1.0.1 <= v < 2.0.0",
1515
"elm-lang/window": "1.0.1 <= v < 2.0.0",
1616
"evancz/elm-graphics": "1.0.1 <= v < 2.0.0",
17+
"rundis/elm-bootstrap": "3.0.0 <= v < 4.0.0",
1718
"seanhess/elm-style": "2.0.0 <= v < 3.0.0"
1819
},
1920
"elm-version": "0.18.0 <= v < 0.19.0"

‎src/Board.elm

+18-12
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ clickInfo mousePos board =
111111
tilePos =
112112
( mousePos.x // size, mousePos.y // size )
113113

114-
info =
114+
info =
115115
case (mousePos.x // (size // 2)) % 2 of
116116
0 ->
117117
( tilePos, RotateCW )
@@ -120,9 +120,14 @@ clickInfo mousePos board =
120120
( tilePos, RotateCCW )
121121

122122
inBounds =
123-
mousePos.x > 0 && mousePos.y > 0 &&
124-
mousePos.x < board.renderSize &&
125-
mousePos.y < board.renderSize
123+
mousePos.x
124+
> 0
125+
&& mousePos.y
126+
> 0
127+
&& mousePos.x
128+
< board.renderSize
129+
&& mousePos.y
130+
< board.renderSize
126131
in
127132
if inBounds then
128133
Just info
@@ -135,7 +140,7 @@ clickInfo mousePos board =
135140
lockTile : Mouse.Position -> Board -> Board
136141
lockTile mousePos board =
137142
let
138-
click =
143+
click =
139144
clickInfo mousePos board
140145

141146
lockFn =
@@ -149,7 +154,7 @@ lockTile mousePos board =
149154
)
150155
in
151156
case click of
152-
Just (pos, _) ->
157+
Just ( pos, _ ) ->
153158
{ board | tiles = Dict.update pos lockFn board.tiles }
154159

155160
Nothing ->
@@ -203,7 +208,8 @@ rotateTile mousePos board =
203208
clickInfo mousePos board
204209

205210
( tile, pos, dir ) =
206-
maybeCall click ( Nothing, (0, 0), RotateCW )
211+
maybeCall click
212+
( Nothing, ( 0, 0 ), RotateCW )
207213
(\( p, d ) -> ( getTile board p, p, d ))
208214

209215
move =
@@ -1108,10 +1114,10 @@ barrierRenderFunctions board pos =
11081114

11091115
upFn =
11101116
if Tuple.second pos == 0 then
1111-
Collage.move ( 0, edgeTranslate)
1117+
Collage.move ( 0, edgeTranslate )
11121118
(Collage.rotate (degrees 90) line)
11131119
else
1114-
Collage.move ( 0, size / 2)
1120+
Collage.move ( 0, size / 2 )
11151121
(Collage.rotate (degrees 90) line)
11161122

11171123
rightFn =
@@ -1123,18 +1129,18 @@ barrierRenderFunctions board pos =
11231129
downFn =
11241130
if Tuple.second pos == board.size - 1 then
11251131
Collage.move ( 0, -edgeTranslate )
1126-
(Collage.rotate (degrees 90) line)
1132+
(Collage.rotate (degrees 90) line)
11271133
else
11281134
Collage.move ( 0, -size / 2 )
1129-
(Collage.rotate (degrees 90) line)
1135+
(Collage.rotate (degrees 90) line)
11301136

11311137
leftFn =
11321138
if Tuple.first pos == 0 then
11331139
Collage.move ( -edgeTranslate, 0 ) line
11341140
else
11351141
Collage.move ( -size / 2, 0 ) line
11361142
in
1137-
[ upFn, rightFn, downFn, leftFn ]
1143+
[ upFn, rightFn, downFn, leftFn ]
11381144

11391145

11401146
renderBarriers : Board -> ( TilePos, Tile ) -> Collage.Form

‎src/Net.elm

+48-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ import Time
1414
import Keyboard
1515
import Char
1616
import Window
17+
import Bootstrap.Modal as Modal
18+
import Bootstrap.Button as Button
19+
import Bootstrap.CDN
1720

1821

1922
main =
@@ -46,6 +49,7 @@ type alias Model =
4649
, gameTime : Int
4750
, newBoardSize : Int
4851
, newBoardWrapping : Bool
52+
, endGameModalState : Modal.State
4953
}
5054

5155

@@ -57,6 +61,7 @@ init =
5761
, gameTime = 0
5862
, newBoardSize = defaultBoardSize
5963
, newBoardWrapping = False
64+
, endGameModalState = Modal.hiddenState
6065
}
6166
, Task.perform WindowSizeMsg Window.size
6267
)
@@ -76,6 +81,7 @@ type Msg
7681
| TickMsg Time.Time
7782
| BoardSizeMsg String
7883
| ToggleWrappingMsg
84+
| EndGameModalMsg Modal.State
7985

8086

8187
toggleLock : Model -> ( Model, Cmd Msg )
@@ -103,7 +109,18 @@ playingUpdate msg model =
103109
else
104110
Playing
105111
in
106-
( { model | board = newBoard, mode = mode }, Cmd.none )
112+
case newBoard.state of
113+
Board.Complete ->
114+
( { model
115+
| board = newBoard
116+
, mode = GameOver
117+
, endGameModalState = Modal.visibleState
118+
}
119+
, Cmd.none
120+
)
121+
122+
_ ->
123+
( { model | board = newBoard }, Cmd.none )
107124

108125
KeyboardMsg keyCode ->
109126
case Char.fromCode keyCode of
@@ -127,7 +144,9 @@ update : Msg -> Model -> ( Model, Cmd Msg )
127144
update msg model =
128145
case msg of
129146
NewGameMsg ->
130-
( model, Task.perform NewBoardMsg Time.now )
147+
( { model | endGameModalState = Modal.hiddenState }
148+
, Task.perform NewBoardMsg Time.now
149+
)
131150

132151
WindowSizeMsg size ->
133152
let
@@ -172,6 +191,9 @@ update msg model =
172191
, Cmd.none
173192
)
174193

194+
EndGameModalMsg state ->
195+
( { model | endGameModalState = state }, Cmd.none )
196+
175197
_ ->
176198
case model.mode of
177199
Init ->
@@ -288,6 +310,27 @@ checkbox msg name =
288310
]
289311

290312

313+
314+
-- TODO: Make this look better, calculate score
315+
316+
317+
endGameModal : Model -> Html Msg
318+
endGameModal model =
319+
Modal.config EndGameModalMsg
320+
|> Modal.h4 [] [ Html.text "You Win!" ]
321+
|> Modal.body []
322+
[ Html.p [] [ Html.text <| "Moves: " ++ movesString model ]
323+
, Html.p [] [ Html.text <| "Time: " ++ gameTimeString model ]
324+
, Html.p [] [ Html.text "Score: 0" ]
325+
]
326+
|> Modal.footer []
327+
[ Button.button
328+
[ Button.attrs [ Html.Events.onClick NewGameMsg ] ]
329+
[ Html.text "Restart" ]
330+
]
331+
|> Modal.view model.endGameModalState
332+
333+
291334
view : Model -> Html Msg
292335
view model =
293336
let
@@ -300,7 +343,8 @@ view model =
300343
|> Element.toHtml
301344
in
302345
Html.div [ Html.Attributes.style container ]
303-
[ Html.div [ Html.Attributes.style menuColumn ]
346+
[ Bootstrap.CDN.stylesheet
347+
, Html.div [ Html.Attributes.style menuColumn ]
304348
[ Html.button [ Html.Events.onClick ToggleLockMsg ] [ Html.text "Toggle Lock" ]
305349
, Html.p [] [ Html.text (movesString model) ]
306350
, Html.p [] [ Html.text (gameTimeString model) ]
@@ -309,4 +353,5 @@ view model =
309353
, checkbox ToggleWrappingMsg "Wrapping"
310354
]
311355
, Html.div [ Html.Attributes.style gameColumn ] [ render ]
356+
, endGameModal model
312357
]

0 commit comments

Comments
 (0)
Please sign in to comment.