public GameState PickAMove(Move move) { if (!PossibleMoves.Contains(move)) { throw new System.Exception("Can't play an impossible move: " + move); } var newBoard = m_board.SetCellOwner(CurrentPlayer, move.Target); return(new GameState(CurrentPlayer.Other, newBoard)); }
public override void Update(GameManager gameManager, int deltaTime) { var realPoint = gameManager.Input.PointerPosition.ToVector2() + gameManager.Camera.Offset; Coordinate = GetCoordinate(realPoint); if (gameManager.Input.IsLeftButtonPressed) { if (!Hexes.ContainsKey(Coordinate)) { return; } var pawn = Hexes[Coordinate].Pawn; if (pawn == null) { if (_selectedPawn != null) { _selectedPawn.Selected = false; _selectedPawn = null; PossibleMoves.Clear(); } return; } pawn.Selected = true; _selectedPawn = pawn; var moveQueue = new Queue <Move>(); var openingMoves = GetNeighbours(Coordinate); foreach (var openingMove in openingMoves) { var hex = Hexes[openingMove]; if (!hex.Passable) { continue; } moveQueue.Enqueue(new Move(hex)); } var possibleMoves = new List <Coordinate>(); var visitedCoordinates = new HashSet <Coordinate>(); while (moveQueue.Count > 0) { var move = moveQueue.Dequeue(); if (visitedCoordinates.Contains(move.Hex.Coordinate)) { continue; } visitedCoordinates.Add(move.Hex.Coordinate); if (move.TotalMoveCost > pawn.MoveSpeed) { continue; } possibleMoves.Add(move.Hex.Coordinate); var newMoves = GetNeighbours(move.Hex.Coordinate); foreach (var newMove in newMoves) { if (visitedCoordinates.Contains(newMove)) { continue; } var hex = Hexes[newMove]; if (!hex.Passable) { continue; } moveQueue.Enqueue(new Move(move, hex)); } } PossibleMoves = possibleMoves; } if (gameManager.Input.IsRightButtonPressed && _selectedPawn != null) { if (PossibleMoves.Contains(Coordinate)) { _selectedPawn.Hex.Pawn = null; _selectedPawn.Hex = Hexes[Coordinate]; _selectedPawn.Hex.Pawn = _selectedPawn; _selectedPawn.Selected = false; PossibleMoves.Clear(); } } }
private static int CheckForTwoInARow(List <int> myMoves) { int index = 1; int count = 1; int runner = 1; foreach (var possibleMove in PossibleMoves) { while (myMoves.Contains(possibleMove + index)) { count += 1; index += 1; } while (myMoves.Contains(possibleMove - runner)) { count += 1; runner += 1; } if (count == 2 && ((PossibleMoves.Contains(possibleMove + index) && PossibleMoves.Contains(possibleMove - runner)) || (PossibleMoves.Contains(possibleMove + index) && (PossibleMoves.Contains(possibleMove + index + 1) || myMoves.Contains(possibleMove + index + 1))) || (PossibleMoves.Contains(possibleMove - runner) && (PossibleMoves.Contains(possibleMove - runner - 1) || myMoves.Contains(possibleMove - runner - 1))))) { return(possibleMove); } index = 1; count = 1; runner = 1; while (myMoves.Contains(possibleMove + 100 * index)) { count += 1; index += 1; } while (myMoves.Contains(possibleMove - 100 * runner)) { count += 1; runner += 1; } if (count == 2 && ((PossibleMoves.Contains(possibleMove + 100 * index) && PossibleMoves.Contains(possibleMove - 100 * runner)) || (PossibleMoves.Contains(possibleMove + 100 * index) && (PossibleMoves.Contains(possibleMove + 100 * (index + 1)) || myMoves.Contains(possibleMove + 100 * (index + 1)))) || (PossibleMoves.Contains(possibleMove - 100 * runner) && (PossibleMoves.Contains(possibleMove - 100 * (runner + 1)) || myMoves.Contains(possibleMove - 100 * (runner + 1)))))) { return(possibleMove); } index = 1; count = 1; runner = 1; while (myMoves.Contains(possibleMove + 100 * index + index)) { count += 1; index += 1; } while (myMoves.Contains(possibleMove - 100 * runner - runner)) { count += 1; runner += 1; } if (count == 2 && ((PossibleMoves.Contains(possibleMove + 100 * index + index) && PossibleMoves.Contains(possibleMove - 100 * runner - runner)) || (PossibleMoves.Contains(possibleMove + 100 * index + index) && (PossibleMoves.Contains(possibleMove + 100 * (index + 1) + index + 1) || myMoves.Contains(possibleMove + 100 * (index + 1) + index + 1))) || (PossibleMoves.Contains(possibleMove - 100 * runner - runner) && (PossibleMoves.Contains(possibleMove - 100 * (runner + 1) - (runner + 1)) || myMoves.Contains(possibleMove - 100 * (runner + 1) - (runner + 1)))))) { return(possibleMove); } index = 1; count = 1; runner = 1; while (myMoves.Contains(possibleMove + 100 * index - index)) { count += 1; index += 1; } while (myMoves.Contains(possibleMove - 100 * runner + runner)) { count += 1; runner += 1; } if (count == 2 && ((PossibleMoves.Contains(possibleMove + 100 * index - index) && PossibleMoves.Contains(possibleMove - 100 * runner + runner)) || (PossibleMoves.Contains(possibleMove + 100 * index - index) && (PossibleMoves.Contains(possibleMove + 100 * (index + 1) - (index + 1)) || myMoves.Contains(possibleMove + 100 * (index + 1) - (index + 1)))) || (PossibleMoves.Contains(possibleMove - 100 * runner + runner) && (PossibleMoves.Contains(possibleMove - 100 * (runner + 1) + runner + 1) || myMoves.Contains(possibleMove - 100 * (runner + 1) + runner + 1))))) { return(possibleMove); } } return(NoSuchMove); }
private static int CheckForFourInARow(List <int> moves) { int index = 1; int count = 1; int runner = 1; foreach (var possibleMove in PossibleMoves) { while (moves.Contains(possibleMove + index)) { count += 1; index += 1; } while (moves.Contains(possibleMove - runner)) { count += 1; runner += 1; } if (count == 4 && (PossibleMoves.Contains(possibleMove + index) || PossibleMoves.Contains(possibleMove - runner))) { return(possibleMove); } index = 1; count = 1; runner = 1; while (moves.Contains(possibleMove + 100 * index)) { count += 1; index += 1; } while (moves.Contains(possibleMove - 100 * runner)) { count += 1; runner += 1; } if (count == 4 && (PossibleMoves.Contains(possibleMove + 100 * index) || PossibleMoves.Contains(possibleMove - 100 * runner))) { return(possibleMove); } index = 1; count = 1; runner = 1; while (moves.Contains(possibleMove + 100 * index + index)) { count += 1; index += 1; } while (moves.Contains(possibleMove - 100 * runner - runner)) { count += 1; runner += 1; } if (count == 4 && (PossibleMoves.Contains(possibleMove + 100 * index + index) || PossibleMoves.Contains(possibleMove - 100 * runner - runner))) { return(possibleMove); } index = 1; count = 1; runner = 1; while (moves.Contains(possibleMove + 100 * index - index)) { count += 1; index += 1; } while (moves.Contains(possibleMove - 100 * runner + runner)) { count += 1; runner += 1; } if (count == 4 && (PossibleMoves.Contains(possibleMove + 100 * index - index) || PossibleMoves.Contains(possibleMove - 100 * runner + runner))) { return(possibleMove); } } return(NoSuchMove); }