/** * This method check for valid input from the player. */ private static bool checkForValidInput(string i_PlayerInput) { bool isValid = (i_PlayerInput.Length == 2); int row = 0; StringBuilder errorMessage = new StringBuilder(""); if (!isValid) { errorMessage.Append("Not a co-ordinate! please refer to given example"); } else if (int.TryParse(i_PlayerInput[0].ToString(), out row)) { errorMessage.Append("Illegal column input"); isValid = false; } else { eColumnIndex col = 0; bool validCol = Enum.TryParse(i_PlayerInput[0].ToString(), false, out col); bool validRow = int.TryParse(i_PlayerInput[1].ToString(), out row); bool isHidden = true; //if the inputed letter is an option check if it is bigger than the max option if (!validCol || (validCol && (int)col > s_Board.Col)) { errorMessage.Append("Illegal column input"); validCol = false; } //checks row validity if (row < 1 || row > s_Board.Row) { if (errorMessage.Length != 0) { errorMessage.Append(" and "); } errorMessage.Append("Illegal row input"); validRow = false; } //checks if card is shown already if (validRow && validCol) { isHidden = !s_Board.IsShown(row, (int)col); } if (!isHidden && s_PlayerTurn != 3) { errorMessage.Append("Card already chosen, pick a different card"); } isValid = isHidden && validRow && validCol; } boardClearAndReBuild(""); errorMessage.AppendLine(); Console.Write(errorMessage.AppendLine().ToString()); return(isValid); }
/** * This method help for quick rebuilding the board after the pick. */ private static bool isMatch(string i_Card1, string i_Card2) { bool hasMatched = true; int row1 = int.Parse(i_Card1[1].ToString()); eColumnIndex col1 = (eColumnIndex)Enum.Parse(typeof(eColumnIndex), i_Card1[0].ToString()); int row2 = int.Parse(i_Card2[1].ToString()); eColumnIndex col2 = (eColumnIndex)Enum.Parse(typeof(eColumnIndex), i_Card2[0].ToString()); boardClearAndReBuild(i_Card2); if (s_Board.GetShownCard(row1, (int)col1).Equals(s_Board.GetShownCard(row2, (int)col2))) { string pointMessage = ""; if (s_PlayerTurn == 1) { s_Player1.Score++; pointMessage = s_Player1.Name; } else if (s_PlayerTurn == 2) { s_Player2H.Score++; pointMessage = s_Player2H.Name; } else { s_Player2C.Score++; pointMessage = s_Player2C.Name; } if (!s_IsHuman) { s_Player2C.RemoveFromBoardMemory(i_Card1, i_Card2); } Console.WriteLine("{0} got a point!\n", pointMessage); } else { hasMatched = false; System.Threading.Thread.Sleep(2000); //hides first card s_Board.Hide(row1, (int)col1); //hides second card s_Board.Hide(row2, (int)col2); boardClearAndReBuild(""); } return(hasMatched); }
/** * This method help for quick rebuilding the board after the pick. */ private static void boardClearAndReBuild(string i_PlayerInput) { Screen.Clear(); if (!i_PlayerInput.Equals("")) { int row = int.Parse(i_PlayerInput[1].ToString()); eColumnIndex col = (eColumnIndex)Enum.Parse(typeof(eColumnIndex), i_PlayerInput[0].ToString()); string cardValue = s_Board.Reveal(row, (int)col); if (!s_IsHuman) { s_Player2C.AddToMemory(i_PlayerInput, cardValue); } } s_Board.PrintBoard(); }