示例#1
0
 public bool TryConstruct(UnitModel model, out IUnit unit)
 {
     if (model.type.Equals("infantry"))
     {
         unit = new InfantryUnit(model.health);
         return(true);
     }
     else
     {
         unit = null;
         return(false);
     }
 }
示例#2
0
        internal static void CreateUnits()
        {
            int    Upperbound = 3;
            int    Lowerbound = 0;
            Random rnd        = new Random();

            for (int x = 0; x < 2; x++)
            {
                _players.Add(new Player("Player" + (x + 1)));
            }
            List <HexField> usedTiles = new List <HexField>();

            foreach (Player player in _players)
            {
                player.Units.Clear();
                if (player == _players[0])
                {
                    Upperbound = 3;
                    Lowerbound = 0;
                }
                else if (player == _players[1])
                {
                    Upperbound = Board.BoardHeight - 1;
                    Lowerbound = Board.BoardHeight - 4;
                }
                else
                {
                    break;
                }
                if (_config.UseInfantry)
                {
                    //List<HexField> usedTiles = new List<HexField>();
                    for (int unitnum = 0; unitnum < _config.NumberOfInfantry; unitnum++)
                    {
                        bool placed = false;
                        Unit unit   = new InfantryUnit(player);

                        while (!placed)
                        {
                            HexField selectedTile = null;
                            int      x            = 0;
                            int      y            = 0;
                            while (selectedTile == null || selectedTile.TerrainType == TerrainTypes.Mountain || usedTiles.Contains(selectedTile))
                            {
                                x            = rnd.Next(Lowerbound, Upperbound);
                                y            = rnd.Next(_board.getFirstTile(x), _board.GetRowSize(x) - 1);
                                selectedTile = _board.getTile(x, y);
                            }
                            unit.Center = selectedTile.Center;
                            _overLayTiles[x][y].Unit = unit;
                            usedTiles.Add(selectedTile);
                            player.Units.Add(unit);
                        }
                    }
                }

                if (_config.UseArmoredCar)
                {
                    for (int unitnum = 0; unitnum < _config.NumberOfArmoredCar; unitnum++)
                    {
                        bool placed = false;
                        Unit unit   = new ArmoredCarUnit(player);
                        int  x      = 0;
                        int  y      = 0;
                        while (!placed)
                        {
                            HexField selectedTile = null;
                            while (selectedTile == null || selectedTile.TerrainType == TerrainTypes.Mountain || usedTiles.Contains(selectedTile))
                            {
                                x            = rnd.Next(Lowerbound, Upperbound);
                                y            = rnd.Next(_board.getFirstTile(x), _board.GetRowSize(x) - 1);
                                selectedTile = _board.getTile(x, y);
                            }
                            unit.Center              = selectedTile.Center;
                            unit.Tile                = selectedTile;
                            selectedTile.Unit        = unit;
                            selectedTile.IsOccupied  = true;
                            _overLayTiles[x][y].Unit = unit;
                            player.Units.Add(unit);
                            usedTiles.Add(selectedTile);

                            UnitControl uc = new UnitControl();
                            uc.DataContext = unit;
                            _unitControls.Add(uc);

                            placed = true;
                        }
                    }
                }
                if (_config.UseArtillery)
                {
                    for (int unitnum = 0; unitnum < _config.NumberOfArtillery; unitnum++)
                    {
                        throw (new NotImplementedException());

                        /*
                         * bool placed = false;
                         * Unit unit = new ArtileryUnit();
                         *
                         * while (!placed)
                         * {
                         *  HexField selectedTile = null;
                         *  while (selectedTile == null || selectedTile.TerrainType == TerrainTypes.Mountain || selectedTile.CurrentUnit != null)
                         *  {
                         *      int x = rnd.Next(player1Lowerbound, player1Upperbound);
                         *      int y = rnd.Next(_board.getFirstTile(x), _board.GetRowSize(x) - 1);
                         *      selectedTile = _board.getTile(x, y);
                         *  }
                         *  unit.Center = selectedTile.Center;
                         *  selectedTile.CurrentUnit = unit;
                         *  _units.Add(unit);
                         * }*/
                    }
                }
                //player.Units = _units;
                _units.Clear();
            }
        }