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) }); } }
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); } } } } } }
public bool Match(TokenMove token) { return(token.Position.Equals(m_position)); }