/// <summary> /// Routine that changes the owner of a tile based on indices stored in TilesToTurn list. /// </summary> private void DoTurnTiles() { PlayerModel player = null;; bool playerFound = false; foreach (KeyValuePair <int, ClientModel> model in CurrentPlayersList) { ReversiClientModel reversiClientModel = (ReversiClientModel)model.Value; if (reversiClientModel.ClientPlayer.IdType == CurrentPlayer) { player = reversiClientModel.ClientPlayer; playerFound = true; } } // If we didnt find the player, return if (!playerFound) { return; } foreach (int index in TilesToTurn) { Gameboard.Squares[index].Piece.Owner = player; //// TODO: For each tile being flipped...play a sounds //ReversiSounds.PlaySounds(GameSounds.SOUND_FLIPTILE); } // Now clear the tiles to turn array since all the moves have been made TilesToTurn.Clear(); }
public override bool PlayTurn() { // Clear the tiles to turn array AvailableMovesList.Clear(); TilesToTurn.Clear(); return(MakePlayerMove(CurrentMoveIndex)); }
/// <summary> /// Determine if the new placement location is valid. /// </summary> /// <param name="index">The square index where they are placing the piece</param> /// <param name="p">The player placing the tile</param> /// <returns></returns> public override bool ValidateTilePlacement(int index, Players p) { // Determine our opponent Players player = p; Players opponent = (player == Players.Player1) ? Players.Player2 : Players.Player1; if (ValidateInitialPlacementPosition(index, p) == false) { return(false); } var tmp_index = index; // returns -1 if the neighbor is a boundary // 1 2 3 // 4 X 5 // 6 7 8 foreach (DirectionVectors dv in Enum.GetValues(typeof(DirectionVectors))) { List <int> result = new List <int>(); // stores the values of a valid placement if (ValidateDirectionFromIndex(index, player, opponent, dv, out result) == true) { foreach (int item in result) { Console.WriteLine("...VALID to " + dv); if (TilesToTurn.Contains(item) == false) { TilesToTurn.Add(item); } } } } // Print the Tiles to Turn list string str = string.Empty; foreach (int item in TilesToTurn) { str += item.ToString() + " "; } Console.WriteLine(index + ": -- " + str + "\n"); return(TilesToTurn.Count > 0); }
/// <summary> /// Primary routine for a player to make a move /// </summary> /// <param name="index">the index of the move being made</param> internal bool MakePlayerMove(int index) { PlayerModel player = null;; bool playerFound = false; foreach (KeyValuePair <int, ClientModel> model in CurrentPlayersList) { ReversiClientModel reversiClientModel = (ReversiClientModel)model.Value; if (reversiClientModel.ClientPlayer.IdType == CurrentPlayer) { player = reversiClientModel.ClientPlayer; playerFound = true; break; } } if ((player == null) || (playerFound == false)) { return(false); } bool placementIsValid = ValidateTilePlacement(index, CurrentPlayer); if (placementIsValid) { // Add a new game piece at the location GamePieceModel piece = new GamePieceModel(Pieceshapes.Ellipse, player); Gameboard.AddPiece(index, piece); // Capture the opponents tiles DoTurnTiles(); // Reset the tiles to be turned array TilesToTurn.Clear(); return(true); } return(false); //MessageBox.Show(Gameboard.DrawGameboard() + "\nCurrent Player: " + CurrentPlayer.IDType + " : " + CurrentPlayer.Name); }