From f4e4bed053784d796029093eb3ae7c6357358b72 Mon Sep 17 00:00:00 2001 From: Dominic Duffin Date: Sun, 29 Nov 2020 17:31:15 +0000 Subject: [PATCH] Add message when player clicks buttons out of turn. (#64) * feat(Game): Add message that appears when the player attempts to select a piece when it is not their turn to do so - I48 * Add status message reset to ComputerSelectedPiece piece, InPlay Computer ChoosingPiece --- src/Game.elm | 27 +++++++++++++++++++++++---- src/Pages/Top.elm | 10 ++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/Game.elm b/src/Game.elm index 61beb39..dae8b42 100644 --- a/src/Game.elm +++ b/src/Game.elm @@ -5,6 +5,7 @@ module Game exposing , Msg(..) , Player(..) , Turn(..) + , StatusMessage(..) , currentStatus , gameboard , init @@ -12,6 +13,7 @@ module Game exposing , pieceToString , playerToString , remainingPieces + , currentStatusMessage , update ) @@ -68,9 +70,13 @@ type GameStatus | Won Winner | Draw +type StatusMessage + = NoMessage + | SomePiecePlayedWhenNotPlayersTurn + type Model - = Model { board : Board, status : GameStatus } + = Model { board : Board, status : GameStatus, statusMessage : StatusMessage } @@ -82,9 +88,13 @@ initStatus = InPlay Human ChoosingPiece +initStatusMessage : StatusMessage +initStatusMessage = NoMessage + + init : Model init = - Model { board = Board.init, status = initStatus } + Model { board = Board.init, status = initStatus, statusMessage = initStatusMessage } @@ -113,6 +123,10 @@ update msg (Model model) = |> map (nextPlayerStartsPlaying Human piece) |> andThen (computerChooses ComputerSelectedCell Board.openCells) + ( HumanSelectedPiece piece, _ ) -> + Model { model | statusMessage = SomePiecePlayedWhenNotPlayersTurn } + |> noCmds + ( ComputerSelectedCell name, InPlay Computer (ChoosingCellToPlay piece) ) -> Model model |> noCmds @@ -127,12 +141,12 @@ update msg (Model model) = ) ( ComputerSelectedPiece piece, InPlay Computer ChoosingPiece ) -> - Model model + Model { model | statusMessage = NoMessage } |> noCmds |> map (nextPlayerStartsPlaying Computer piece) ( HumanSelectedCell name, InPlay Human (ChoosingCellToPlay piece) ) -> - Model model + Model { model | statusMessage = NoMessage } |> noCmds |> map (playerTryPlay name piece) |> (\( maybeModel, c ) -> @@ -270,6 +284,11 @@ currentStatus (Model model) = model.status +currentStatusMessage : Model -> StatusMessage +currentStatusMessage (Model model) = + model.statusMessage + + playerToString : Player -> String playerToString player = case player of diff --git a/src/Pages/Top.elm b/src/Pages/Top.elm index 374f623..2ccface 100644 --- a/src/Pages/Top.elm +++ b/src/Pages/Top.elm @@ -38,6 +38,7 @@ import Game , Msg(..) , Player(..) , Turn(..) + , StatusMessage(..) ) import Game.Core exposing @@ -154,6 +155,7 @@ view model = , viewRemainingPieces (Game.remainingPieces model.game) ] , viewGamestatus (Game.currentStatus model.game) model.dimensions + , viewStatusMessage (Game.currentStatusMessage model.game) ] ] } @@ -222,6 +224,14 @@ viewGamestatus gamestatus dimensions = [ script ] +viewStatusMessage : StatusMessage -> Element Msg +viewStatusMessage statusMessage = + case statusMessage of + NoMessage -> + Element.el [] (Element.text "") + SomePiecePlayedWhenNotPlayersTurn -> + Element.el [ centerX, Font.center, Region.announce ] (Element.text "It's not your turn to choose a piece!") + viewCell : Cell -> Element Msg viewCell { name, status } = case status of