Пример #1
0
        public PostMoveResponse PostMove(string gameId, string playerId, [FromBody] PostMoveRequest request)
        {
            try
            {
                var move       = new TokenMove(playerId, request.column);
                var moveNumber = GameKeeper.RegisterMove(gameId, move);

                return(new PostMoveResponse()
                {
                    move = String.Format("{0}/moves/{1}", gameId, moveNumber)
                });
            }
            catch (KeyNotFoundException ex)
            {
                // game not found
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)
                {
                    Content = new StringContent(ex.Message)
                });
            }
            catch (InvalidPlayerException ex)
            {
                // player not part of the game
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)
                {
                    Content = new StringContent(ex.Message)
                });
            }
            catch (IllegalMoveException ex)
            {
                // game is done, or column is full
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content = new StringContent(ex.Message)
                });
            }
            catch (OutOfTurnException ex)
            {
                // not the player's turn
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Conflict)
                {
                    Content = new StringContent(ex.Message)
                });
            }
        }
Пример #2
0
        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            if (m_playerTurn)
            {
                var element = Mouse.DirectlyOver;
                if (element != null)
                {
                    // Si un pion est déjà selectionné
                    if (m_selectedToken != null && m_playerPossibleMove.ContainsKey(m_selectedToken))
                    {
                        // On recupere la cellule selctionner et on recupere le mouvement associe
                        Vector2   selectedCell = new Vector2(Grid.GetColumn((UIElement)element), Grid.GetRow((UIElement)element));
                        FindMove  move         = new FindMove(selectedCell);
                        TokenMove tokenMove    = m_selectedTokenPossibleMove.Find(move.Match);

                        // Si la cellule correspond a un deplacement l'effectuer
                        if (tokenMove != null)
                        {
                            // Move the token and reset the colors of the board
                            ChangeColorOfCells(m_selectedTokenPossibleMove, Colors.Khaki);
                            if (m_selectedToken != null)
                            {
                                m_board.ExecuteTokenMove(m_selectedToken, tokenMove);
                                DisplayBoard();
                                //Calcul les captures possible restante
                                if (m_sequenceEngaged.Count > 0)
                                {
                                    List <TokenMoveSequence> toRemove = new List <TokenMoveSequence>();
                                    foreach (TokenMoveSequence sequence in m_sequenceEngaged)
                                    {
                                        TokenMove movePlayed = sequence.PlayMove();
                                        if (sequence.Empty() || !movePlayed.Equals(tokenMove))
                                        {
                                            toRemove.Add(sequence);
                                        }
                                    }
                                    foreach (TokenMoveSequence sequence in toRemove)
                                    {
                                        m_sequenceEngaged.Remove(sequence);
                                    }
                                }
                                else
                                {
                                    foreach (TokenMoveSequence sequence in m_playerPossibleMove[m_selectedToken])
                                    {
                                        TokenMove movePlayed = sequence.PlayMove();
                                        if (!sequence.Empty() && movePlayed.Equals(tokenMove))
                                        {
                                            m_sequenceEngaged.Add(sequence);
                                        }
                                    }
                                }


                                // Fini le tour du joueur ou affiche les prochains mouvement possible
                                if (m_sequenceEngaged.Count == 0)
                                {
                                    if (m_selectedToken.Position.Y == 0)
                                    {
                                        m_board.Crown(m_selectedToken);
                                    }
                                    DisplayBoard();
                                    m_playerTurn                = false;
                                    m_selectedToken             = null;
                                    m_selectedTokenPossibleMove = null;
                                    m_sequenceEngaged           = null;
                                }
                                else
                                {
                                    m_selectedTokenPossibleMove = ComputeCells(m_sequenceEngaged);
                                    ChangeColorOfCells(m_selectedTokenPossibleMove, Colors.CadetBlue);
                                }
                            }
                        }
                        // Sinon on deselectionne le pion
                        else if (m_sequenceEngaged.Count == 0)
                        {
                            if (m_selectedTokenPossibleMove == null)
                            {
                                return;
                            }
                            // Reset selected token
                            ChangeColorOfCells(m_selectedTokenPossibleMove, Colors.Khaki);
                            m_selectedToken = null;
                        }
                    }
                    else
                    {
                        // Si on a pas deja commence une sequence de mouvement
                        if (m_sequenceEngaged != null && m_sequenceEngaged.Count == 0)
                        {
                            // Select the token and mark the possible destinations with a color
                            m_selectedToken = m_board.Tokens[Grid.GetRow((UIElement)element), Grid.GetColumn((UIElement)element)];
                            if (m_selectedToken != null && m_playerPossibleMove.ContainsKey(m_selectedToken))
                            {
                                m_selectedTokenPossibleMove = ComputeCells(m_playerPossibleMove[m_selectedToken]);
                                ChangeColorOfCells(m_selectedTokenPossibleMove, Colors.CadetBlue);
                            }
                        }
                        else
                        {
                            if (m_board.Tokens[Grid.GetRow((UIElement)element), Grid.GetColumn((UIElement)element)] == m_selectedToken)
                            {
                                ChangeColorOfCells(m_selectedTokenPossibleMove, Colors.CadetBlue);
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
 public bool Match(TokenMove token)
 {
     return(token.Position.Equals(m_position));
 }