Esempio n. 1
0
    /// <summary>
    /// Завершаем шаг и проверяем выиграла ли одна из команд
    /// Команда выигрывает если все ее фигуры, которые могут двигаться
    /// достигли лагеря противоположенной команды
    /// </summary>
    public bool CompleteStep(PieceStrategy strategy)
    {
        bool hasAllPlayerPiecesReachedEnemyCamp = true;
        bool hasAllEnemyPiecesReachedPlayerCamp = true;

        bool playerIsBlocked = true;
        bool enemyIsBlocked  = true;

        foreach (Piece piece in pieces)
        {
            // Проверям может ли двигаться фигура
            List <Cell> availableCells = strategy.GetAvailableCells(piece.cellRef);

            if (piece.IsPlayer)
            {
                bool isInEnemyCamp = IsInEnemyCamp(piece.cellRef);
                if (!isInEnemyCamp)
                {
                    hasAllPlayerPiecesReachedEnemyCamp = false;
                }

                if (!isInEnemyCamp && availableCells.Count > 0)
                {
                    playerIsBlocked = false;
                }
            }
            else
            {
                bool isInPlayerCamp = IsInPlayerCamp(piece.cellRef);
                if (!isInPlayerCamp)
                {
                    hasAllEnemyPiecesReachedPlayerCamp = false;
                }

                if (availableCells.Count > 0)
                {
                    enemyIsBlocked = false;
                }
            }
        }

        bool hasPlayerWon = hasAllPlayerPiecesReachedEnemyCamp || playerIsBlocked;
        bool hasEnemyWon  = hasAllEnemyPiecesReachedPlayerCamp || enemyIsBlocked;

        // Все фишки игрока достигли вражеского лагеря либо заблокированы противником
        if (hasPlayerWon)
        {
            OnWin?.Invoke(true);
        }

        // Все фишки противника достигли лагеря игрока либо заблокированы игроком
        if (hasEnemyWon)
        {
            OnWin?.Invoke(false);
        }

        IsPlayerTurn = !IsPlayerTurn;

        return(hasPlayerWon || hasEnemyWon);
    }
Esempio n. 2
0
    public void SetData(Board board, PieceStrategy strategy)
    {
        this.board    = board;
        this.strategy = strategy;

        ai.Update(board, strategy);
    }
 public void Update(Board board, PieceStrategy strategy)
 {
     this.strategy = strategy;
     this.board    = board;
 }