/// <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); }
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; }