Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }