private eGameState gameHasWinner(eTeam i_CurrentTeamMove) { eGameState gameStateResult = eGameState.GameIsInProgress; eTeam enemy = OpponentUtils.GetOpponent(i_CurrentTeamMove); int enenyCount = 0; for (int x = 0; x < this.r_Board.GetLength(1); x++) { for (int y = 0; y < this.r_Board.GetLength(1); y++) { if (this.r_Board[x, y].Team == enemy) { enenyCount++; } } } if (enenyCount == 0) { if (enemy == eTeam.Player1) { gameStateResult = eGameState.Player2Won; } else { gameStateResult = eGameState.Player1Won; } } return(gameStateResult); }
public override List <Position> GetAllSkipMoves(Position i_CurrentPosition, CheckersGameObject[,] i_GameBoard) { int toAddRow = i_GameBoard[i_CurrentPosition.Row, i_CurrentPosition.Col].Team == eTeam.Player2 ? 1 : -1; int[] colValues = { 1, -1 }; eTeam enemy = OpponentUtils.GetOpponent(this.Team); List <Position> skipPositions = new List <Position>(); for (int i = 0; i < 2; i++) { int rowsToSearchEnemy = i_CurrentPosition.Row + toAddRow; int colsToSearchEnemy = i_CurrentPosition.Col + colValues[i]; if (!isMoveInsideBoard(new Position(rowsToSearchEnemy, colsToSearchEnemy), i_GameBoard)) { continue; } if (i_GameBoard[rowsToSearchEnemy, colsToSearchEnemy].Team == enemy) { int rowsToSearchEmpty = i_CurrentPosition.Row + (toAddRow * 2); int colsToSearchEmpty = i_CurrentPosition.Col + (colValues[i] * 2); if (!isMoveInsideBoard(new Position(rowsToSearchEmpty, colsToSearchEmpty), i_GameBoard)) { continue; } if (i_GameBoard[rowsToSearchEmpty, colsToSearchEmpty].Team == eTeam.Empty) { skipPositions.Add(new Position(rowsToSearchEmpty, colsToSearchEmpty)); } } } return(skipPositions); }
public void MakeMove(int i_SourceRow, int i_SourceCol, int i_DestinationRow, int i_DestinationCol) { Position sourcePosition = new Position(i_SourceRow, i_SourceCol); Position destinationPosition = new Position(i_DestinationRow, i_DestinationCol); string error = string.Empty; if (this.r_GameBoard.CheckMoveIsValid(sourcePosition, destinationPosition, this.m_PlayerTurn, ref error)) { bool hasAvailableSkipMove = this.r_GameBoard.MoveSoldierInBoard(sourcePosition, destinationPosition, this.m_PlayerTurn); this.m_NewGame = false; getUpdatedGameState(); if (!hasAvailableSkipMove && this.m_GameState == eGameState.GameIsInProgress && this.m_NewGame == false) { this.m_PlayerTurn = OpponentUtils.GetOpponent(this.m_PlayerTurn); if (this.r_IsPlayer2Computer && this.m_PlayerTurn == eTeam.Player2) { this.r_GameBoard.RunComputerMove(this.m_PlayerTurn); this.m_PlayerTurn = OpponentUtils.GetOpponent(this.m_PlayerTurn); getUpdatedGameState(); } } } else { if (this.ReportGameError != null) { this.ReportGameError.Invoke(error); } } }
public List <string> GetCurrentPlayerSymbol() { List <string> symbols = new List <string>(); string basicSymbol = ((char)this.m_PlayerTurn).ToString(); symbols.Add(basicSymbol); symbols.Add(OpponentUtils.GetSecondTeamSymbol(basicSymbol)); return(symbols); }
public override bool IsMoveLegal(Position i_CurrentPosition, Position i_NextPosition, CheckersGameObject[,] i_GameBoard) { bool isMoveLegal = false; if (Math.Abs(i_CurrentPosition.Row - i_NextPosition.Row) == 2 && Math.Abs(i_CurrentPosition.Col - i_NextPosition.Col) == 2) { if (i_GameBoard[i_NextPosition.Row, i_NextPosition.Col].Team == eTeam.Empty && i_GameBoard[(i_CurrentPosition.Row + i_NextPosition.Row) / 2, (i_CurrentPosition.Col + i_NextPosition.Col) / 2].Team == OpponentUtils.GetOpponent(this.Team)) { isMoveLegal = true; } } else if (Math.Abs(i_CurrentPosition.Row - i_NextPosition.Row) == 1 && Math.Abs(i_CurrentPosition.Col - i_NextPosition.Col) == 1) { if (i_GameBoard[i_NextPosition.Row, i_NextPosition.Col].Team == eTeam.Empty) { isMoveLegal = true; } } return(isMoveLegal); }
private bool checkIfCurrentMoveIsSkip(Position i_Source, Position i_Destination, eTeam i_CurrentTeamMove) { bool isMoveLegal = r_Board[i_Source.Row, i_Source.Col].IsMoveLegal( new Position(i_Source.Row, i_Source.Col), new Position(i_Destination.Row, i_Destination.Col), this.r_Board); return(r_Board[i_Destination.Row, i_Destination.Col].Team == eTeam.Empty && r_Board[(i_Source.Row + i_Destination.Row) / 2, (i_Source.Col + i_Destination.Col) / 2].Team == OpponentUtils.GetOpponent(i_CurrentTeamMove) && isMoveLegal); }