private IEnumerable <Tuple <ShipType, CellPosition, bool> > GenerateContinuesForDamagedShip( IList <CellPosition> damagedShipCells, IGameFieldBuilder builder, bool vertical, ShipType ship) { if (builder.ShipsLeft[ship] == 0) { yield break; } var topLeftCell = damagedShipCells.Min(); var delta = vertical ? CellPosition.DeltaDown : CellPosition.DeltaRight; var start = vertical ? new CellPosition(0, topLeftCell.Column) : new CellPosition(topLeftCell.Row, 0); for (; builder.Contains(start); start += delta) { if (!builder.CanBeAddedSafely(ship, start, vertical, x => OpponentFieldKnowledge[x] != false)) { continue; } var newShipCells = Enumerable.Range(0, ship.GetLength()).Select(x => start + delta * x).ToList(); if (damagedShipCells.Any(x => !newShipCells.Contains(x))) { continue; } yield return(Tuple.Create(ship, start, vertical)); } }
public RandomFieldGenerator(IGameFieldBuilder builder) { if ((this.builder = builder) == null) { throw new ArgumentNullException(nameof(builder)); } }
private void GenerateRandomFieldHandle(object sender, MouseButtonEventArgs e) { builder = container.Get <IGameFieldBuilder>(); //TODO Make with Ninject new RandomFieldGenerator(builder).Generate(); FillSelfFieldUsingBuilder(); UpdateShipsLeftCount(); }
public MainWindow() { InitializeComponent(); container = InitKernel(); selfFieldCells = SetUpField(SelfGrid, false); opponentFieldCells = SetUpField(OpponentGrid, true); builder = container.Get <IGameFieldBuilder>(); InitShipImages(); UpdateShipsLeftCount(); }
private void StartGameHandle(object sender, RoutedEventArgs e) { var me = builder.Build(); if (me == null) { MessageBox.Show(this, "Поле заполнено некорректно!"); return; } builder = null; //TODO Make with Ninject controller = new GameController(new RandomPlayer(me), container.Get <IPlayer>()); HideGroup(BuilderElements); ShowGroup(GameFieldElements); UpdateGameFields(); UpdateCurrentPlayerStatus(); }
public void SetUp() { builder = FromLines(Rules, SampleField); generator = new RandomFieldGenerator(builder); }
private void ClearFieldHandle(object sender, MouseButtonEventArgs e) { builder = container.Get <IGameFieldBuilder>(); FillSelfFieldUsingBuilder(); UpdateShipsLeftCount(); }