예제 #1
0
        public Field(int size, int mines, Random random)
        {
            if (size < 1)
            {
                throw new ArgumentException(nameof(size));
            }

            int count = Count(size);

            if (mines < 1 || mines * 2 >= count)
            {
                throw new ArgumentException(nameof(mines));
            }

            HexaGrid grid = new HexaGrid(size);

            if (grid.Count != count)
            {
                throw new Exception(nameof(count));
            }

            this.Grid    = grid;
            this.mapping = new GridMapping(grid);

            this.random = random;

            this.MineGenerates = mines;

            Initialize();
        }
예제 #2
0
    void TaskOnClick()
    {
        HexaGrid hexaGrid = hexGrid.GetComponent <HexaGrid>();

        hexaGrid.SetGap(float.Parse(input1.GetComponent <InputField>().text));
        hexaGrid.SetGridWidth(float.Parse(input2.GetComponent <InputField>().text));
        hexaGrid.SetGridHeight(float.Parse(input3.GetComponent <InputField>().text));
        hexaGrid.MakeGrid();
    }
예제 #3
0
        public void HexaGridTest()
        {
            for (int size = 1; size <= 16; size++)
            {
                Console.WriteLine($"size = {size}");

                HexaGrid grid = new HexaGrid(size);

                Console.WriteLine($"mapsize = {grid.MapWidth}, {grid.MapHeight}");

                Console.WriteLine("map :");

                Console.WriteLine(grid.ToString());

                Console.WriteLine("link :");

                foreach ((int index, var link) in grid.Link)
                {
                    Console.WriteLine($"{index} : {string.Join(',', link)}");
                }

                Assert.IsTrue(GridValidationUtil.IsValid(grid), $"{size}");
                Assert.AreEqual(1 + size * (size - 1) / 2 * 6, grid.Count, $"{size}");

                if (size >= 2)
                {
                    Assert.AreEqual(3, grid[0].Links);
                    Assert.AreEqual(3, grid[size - 1].Links);
                    Assert.AreEqual(3, grid[grid.Count / 2 - size + 1].Links);
                    Assert.AreEqual(3, grid[grid.Count / 2 + size - 1].Links);
                    Assert.AreEqual(3, grid[grid.Count - size].Links);
                    Assert.AreEqual(3, grid[grid.Count - 1].Links);

                    Assert.AreEqual(0, grid.Cells.Where((cell) => cell.Links < 3 || cell.Links == 5).Count());
                    Assert.AreEqual(6, grid.Cells.Where((cell) => cell.Links == 3).Count());
                    Assert.AreEqual((size - 2) * 6, grid.Cells.Where((cell) => cell.Links == 4).Count());
                }

                Console.WriteLine("---------------------------");
            }
        }
예제 #4
0
    static public void ClientInitialize(List <Forest> trees, Player plyr)
    {
        Tile tile = new Tile();

        GameData.Player    = plyr;
        GameData.LevelGrid = new HexaGrid(30, 40, tile.Width, tile.Height, true, "levelGrid");
        for (int i = 0; i < LevelGrid.Columns; i++)
        {
            for (int j = 0; j < LevelGrid.Rows; j++)
            {
                if (i > (int)(LevelGrid.Columns * .25) && i < (int)(LevelGrid.Columns * .75))
                {
                    bool   ftile = false;
                    string id    = "";
                    foreach (Forest f in trees)
                    {
                        if (f.forestPoint.X == i && f.forestPoint.Y == j)
                        {
                            id    = f.ID;
                            ftile = true;
                            break;
                        }
                    }
                    if (ftile)
                    {
                        Forest f = new Forest(new Point(i, j));
                        f.gridPosition = new Point(i, j);
                        f.ID           = id;
                        GameData.LevelGrid.Add(f, i, j);
                        GameData.Buildings.Add(f);
                        forests.Add(f);
                    }
                    else
                    {
                        int  type = 1 + (int)(GameWorld.Random.NextDouble() * 7);
                        Tile t    = new Tile("environment" + type);
                        t.gridPosition = new Point(i, j);
                        GameData.LevelGrid.Add(t, i, j);
                    }
                }

                else
                {
                    int  type = 1 + (int)(GameWorld.Random.NextDouble() * 7);
                    Tile t    = new Tile("environment" + type);
                    t.gridPosition = new Point(i, j);
                    GameData.LevelGrid.Add(t, i, j);
                }
            }
        }
        Mine mine = new Mine();

        mine.gridPosition = new Point(4, 8);
        GameData.LevelGrid.replaceTile((Tile)GameData.LevelGrid.Objects[4, 8], mine, false);
        HumanityBase hBase = new HumanityBase();

        hBase.gridPosition = new Point(2, 11);
        hBase.Position     = GameData.LevelGrid.Objects[2, 11].Position;
        GameData.LevelGrid.Objects[2, 11] = hBase;
        GameData.Buildings.Add(hBase);
        GameData.Buildings.Add(mine);
        mine.HasBeenBuiltAction();

        SunlightTree sunlightTree = new SunlightTree();
        NatureBase   nBase        = new NatureBase();

        nBase.gridPosition        = new Point(GameData.LevelGrid.Columns - 2, GameData.LevelGrid.Rows - 11);
        sunlightTree.gridPosition = new Point(GameData.LevelGrid.Columns - 4, GameData.LevelGrid.Rows - 8);
        GameData.LevelGrid.replaceTile((Tile)GameData.LevelGrid.Objects[GameData.LevelGrid.Columns - 4, GameData.LevelGrid.Rows - 8], sunlightTree, false);
        nBase.Position = GameData.LevelGrid.Objects[GameData.LevelGrid.Columns - 2, GameData.LevelGrid.Rows - 11].Position;
        GameData.LevelGrid.Objects[GameData.LevelGrid.Columns - 2, GameData.LevelGrid.Rows - 11] = nBase;
        GameData.Buildings.Add(nBase);
        GameData.Buildings.Add(sunlightTree);
        sunlightTree.HasBeenBuiltAction();

        GameData.LevelObjects.Add(GameData.LevelGrid);

        if (GameData.Cursor != null)
        {
            GameData.LevelObjects.Remove(GameData.Cursor);
        }
        if (GameData.player.GetFaction == Player.Faction.humanity)
        {
            GameData.Cursor = new Cursor("humanityCursor");
            GameWorld.AssetLoader.PlayMusic("hMusic");
        }
        else
        {
            GameData.Cursor = new Cursor("natureCursor");
            GameWorld.AssetLoader.PlayMusic("nMusic");
        }
        GameData.LevelObjects.Add(GameData.Cursor);

        GameWorld.Camera.Bounds = new Rectangle(0 - (int)tile.Sprite.Center.X - (int)(0.5 * GameWorld.Screen.X), -(int)tile.Sprite.Center.Y -
                                                (int)(0.5 * GameWorld.Screen.Y), GameData.LevelGrid.GetWidth(), GameData.LevelGrid.GetHeight());
        GameWorld.Camera.Bounds = new Rectangle(0 - (int)tile.Sprite.Center.X, -(int)tile.Sprite.Center.Y,
                                                GameData.LevelGrid.GetWidth(), (GameData.LevelGrid.GetHeight()));
        if (plyr.GetFaction == Player.Faction.humanity)
        {
            //GameWorld.Camera.Pos = new Vector2(0, 0);
            GameWorld.Camera.Pos = new Vector2(-(int)tile.Sprite.Center.X, -(int)tile.Sprite.Center.Y);
        }
        else
        {
            GameWorld.Camera.Pos = new Vector2(-(int)tile.Sprite.Center.X, -(int)tile.Sprite.Center.Y);
            int y = GameData.LevelGrid.GetHeight();
            int x = GameData.LevelGrid.GetWidth();
            GameWorld.Camera.Pos = new Vector2(3380, 85);
        }

        selectedTile          = new SpriteGameObject("selectedTile", 0, "selectedTile", 1);
        selectedTile.Origin   = selectedTile.Sprite.Center;
        selectedTile.Position = new Vector2(-3000, -3000);
        GameData.LevelObjects.Add(selectedTile);



        //naturePlayer = new Player(Player.Faction.nature);
        //GameData.LevelObjects.Add(naturePlayer);
        GameData.LevelObjects.Add(player);
        //ResourceController = new ResourceController(1, 10, 10);
        //GameData.LevelObjects.Add(ResourceController);

        foreach (Unit u in GameData.Units.Objects)
        {
            if (u.Faction == Player.Faction.humanity)
            {
                u.Sprite.Color = Color.Red;
            }
            else
            {
                u.Sprite.Color = Color.Green;
            }
        }
    }
예제 #5
0
    public static void HostInitialize()
    {
        Tile tile = new Tile();
        //GameData.player.GetFaction = Player.Faction.nature;

        int idIndex = 0;

        GameData.LevelGrid = new HexaGrid(30, 40, tile.Width, tile.Height, true, "levelGrid");
        for (int i = 0; i < LevelGrid.Columns; i++)
        {
            for (int j = 0; j < LevelGrid.Rows; j++)
            {
                if (i > (int)(LevelGrid.Columns * .25) && i < (int)(LevelGrid.Columns * .75))
                {
                    switch (GameWorld.Random.Next(12))
                    {
                    case 0:
                        Forest f = new Forest(new Point(i, j));
                        f.gridPosition = new Point(i, j);
                        f.ID           = f.ID + idIndex.ToString();
                        idIndex++;
                        GameData.LevelGrid.Add(f, i, j);
                        forests.Add(f);
                        GameData.Buildings.Add(f);
                        break;

                    default:
                        int  type = 1 + (int)(GameWorld.Random.NextDouble() * 7);
                        Tile t    = new Tile("environment" + type);
                        t.gridPosition = new Point(i, j);
                        GameData.LevelGrid.Add(t, i, j);
                        break;
                    }
                }
                else
                {
                    int  type = 1 + (int)(GameWorld.Random.NextDouble() * 7);
                    Tile t    = new Tile("environment" + type);
                    t.gridPosition = new Point(i, j);
                    GameData.LevelGrid.Add(t, i, j);
                }
            }
        }
        Mine mine = new Mine();

        mine.gridPosition = new Point(4, 8);
        GameData.LevelGrid.replaceTile((Tile)GameData.LevelGrid.Objects[4, 8], mine, false);
        HumanityBase hBase = new HumanityBase();

        hBase.gridPosition = new Point(2, 11);
        hBase.Position     = GameData.LevelGrid.Objects[2, 11].Position;
        GameData.LevelGrid.Objects[2, 11] = hBase;
        hBase.AddQuadCoTiles();
        GameData.Buildings.Add(hBase);
        GameData.Buildings.Add(mine);
        mine.HasBeenBuiltAction();
        SunlightTree sunlightTree = new SunlightTree();
        NatureBase   nBase        = new NatureBase();

        nBase.gridPosition        = new Point(GameData.LevelGrid.Columns - 2, GameData.LevelGrid.Rows - 11);
        sunlightTree.gridPosition = new Point(GameData.LevelGrid.Columns - 4, GameData.LevelGrid.Rows - 8);
        GameData.LevelGrid.replaceTile((Tile)GameData.LevelGrid.Objects[GameData.LevelGrid.Columns - 4, GameData.LevelGrid.Rows - 8], sunlightTree, false);
        nBase.Position = GameData.LevelGrid.Objects[GameData.LevelGrid.Columns - 2, GameData.LevelGrid.Rows - 11].Position;
        GameData.LevelGrid.Objects[GameData.LevelGrid.Columns - 2, GameData.LevelGrid.Rows - 11] = nBase;
        nBase.AddQuadCoTiles();
        GameData.Buildings.Add(nBase);
        GameData.Buildings.Add(sunlightTree);
        sunlightTree.HasBeenBuiltAction();
        GameData.LevelObjects.Add(GameData.LevelGrid);

        GameWorld.Camera.Bounds = new Rectangle(0 - (int)tile.Sprite.Center.X, -(int)tile.Sprite.Center.Y,
                                                GameData.LevelGrid.GetWidth(), GameData.LevelGrid.GetHeight());
        GameWorld.Camera.Pos = new Vector2(-(int)tile.Sprite.Center.X, -(int)tile.Sprite.Center.Y);
        if (player.GetFaction == Player.Faction.humanity)
        {
            GameWorld.Camera.Pos = new Vector2(0, 0);
        }
        else
        {
            //GameWorld.Camera.Pos = new Vector2(-(int)tile.Sprite.Center.X, -(int)tile.Sprite.Center.Y);
            int y = GameData.LevelGrid.GetHeight();
            int x = GameData.LevelGrid.GetWidth();
            GameWorld.Camera.Pos = new Vector2(3380, 85);
        }

        selectedTile          = new SpriteGameObject("selectedTile", 0, "selectedTile", 1);
        selectedTile.Origin   = selectedTile.Sprite.Center;
        selectedTile.Position = new Vector2(-3000, -3000);
        GameData.LevelObjects.Add(selectedTile);

        if (GameData.Cursor != null)
        {
            GameData.LevelObjects.Remove(GameData.Cursor);
        }
        if (GameData.player.GetFaction == Player.Faction.humanity)
        {
            GameData.Cursor = new Cursor("humanityCursor");
            GameWorld.AssetLoader.PlayMusic("hMusic");
        }
        else
        {
            GameData.Cursor = new Cursor("natureCursor");
            GameWorld.AssetLoader.PlayMusic("nMusic");
        }



        GameData.LevelObjects.Add(GameData.Cursor);



        //naturePlayer = new Player(Player.Faction.nature);
        //GameData.LevelObjects.Add(naturePlayer);
        GameData.LevelObjects.Add(player);
        //ResourceController = new ResourceController(1, 10, 10) ;
        //GameData.LevelObjects.Add(ResourceController)
    }
예제 #6
0
 public StationHexaGrid(IHexaGridItem rootPlatform)
 {
     _grid = new HexaGrid <IHexaGridItem>(Offset.Q * 2 + 1, Offset.R * 2 + 1)
     {