Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
 public RandomFieldGenerator(IGameFieldBuilder builder)
 {
     if ((this.builder = builder) == null)
     {
         throw new ArgumentNullException(nameof(builder));
     }
 }
Exemplo n.º 3
0
 private void GenerateRandomFieldHandle(object sender, MouseButtonEventArgs e)
 {
     builder = container.Get <IGameFieldBuilder>();
     //TODO Make with Ninject
     new RandomFieldGenerator(builder).Generate();
     FillSelfFieldUsingBuilder();
     UpdateShipsLeftCount();
 }
Exemplo n.º 4
0
        public MainWindow()
        {
            InitializeComponent();
            container = InitKernel();

            selfFieldCells     = SetUpField(SelfGrid, false);
            opponentFieldCells = SetUpField(OpponentGrid, true);

            builder = container.Get <IGameFieldBuilder>();
            InitShipImages();
            UpdateShipsLeftCount();
        }
Exemplo n.º 5
0
        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);
 }
Exemplo n.º 7
0
 private void ClearFieldHandle(object sender, MouseButtonEventArgs e)
 {
     builder = container.Get <IGameFieldBuilder>();
     FillSelfFieldUsingBuilder();
     UpdateShipsLeftCount();
 }