Esempio n. 1
0
        /// <summary>
        /// Updates game grid based on game rules
        /// </summary>
        /// <param name="game">Game object</param>
        public void Iterate(Game game)
        {
            var nextGrid = new CellEnum[game.Rows, game.Columns];

            for (var row = 1; row < game.Rows - 1; row++)
            {
                for (var column = 1; column < game.Columns - 1; column++)
                {
                    var aliveNeighbors = GetAliveNeighbors(game, row, column);
                    var currentCell    = game.Grid[row, column];

                    if (currentCell == CellEnum.Alive && aliveNeighbors < 2)
                    {
                        nextGrid[row, column] = CellEnum.Dead;
                    }
                    else if (currentCell == CellEnum.Alive && aliveNeighbors > 3)
                    {
                        nextGrid[row, column] = CellEnum.Dead;
                    }
                    else if (currentCell == CellEnum.Dead && aliveNeighbors == 3)
                    {
                        nextGrid[row, column] = CellEnum.Alive;
                    }
                    else
                    {
                        nextGrid[row, column] = currentCell;
                    }
                }
            }

            game.Grid      = nextGrid;
            game.CellCount = nextGrid.Cast <int>().Sum();
        }
    public GameObject GetObject(CellEnum cellEnum)
    {
        if (!_poolDic.TryGetValue(cellEnum, out var queue))
        {
            queue = new Queue <GameObject>();
            _poolDic.Add(cellEnum, queue);
        }

        var go = queue.Count != 0 ? queue.Dequeue() : CreateObject(cellEnum);

        go.SetActive(true);
        go.transform.SetParent(_contentTrans);
        go.transform.localScale = Vector3.one;
        go.transform.position   = Vector3.zero;
        return(go);
    }
Esempio n. 3
0
        /// <summary>
        /// Prepare a list of games for testing
        /// </summary>
        /// <returns>Returns a list of games</returns>
        private List <Game> InitTestList()
        {
            var grid = new CellEnum[4, 4];

            grid[1, 1] = CellEnum.Alive;
            grid[1, 2] = CellEnum.Alive;
            grid[2, 1] = CellEnum.Alive;
            grid[2, 2] = CellEnum.Alive;

            var games = new List <Game>
            {
                new Game {
                    Id = 0, Rows = 4, Columns = 4, Grid = grid
                }
            };

            return(games);
        }
    private GameObject CreateObject(CellEnum cellEnum)
    {
        GameObject prefab;

        if (_prefabDic.TryGetValue(cellEnum, out prefab))
        {
            var go = Object.Instantiate(prefab, _contentTrans, true);
            go.transform.localScale    = Vector3.one;
            go.transform.localPosition = Vector3.zero;
            var type = GetCellType(cellEnum);
            var cell = go.AddComponent(type) as BaseCell;
            cell.CellType = cellEnum;
            return(go);
        }

        Debug.LogError($"没有声明枚举类型为{cellEnum.ToString()}的预制");
        return(null);
    }
Esempio n. 5
0
        /// <summary>
        /// Updates game grid based on game rules
        /// </summary>
        /// <param name="game"></param>
        private void Iterate(Game game)
        {
            var nextGrid = new CellEnum[game.Rows, game.Columns];

            for (var row = 1; row < game.Rows - 1; row++)
            {
                for (var column = 1; column < game.Columns - 1; column++)
                {
                    var aliveNeighbors = 0;
                    for (var i = -1; i <= 1; i++)
                    {
                        for (var j = -1; j <= 1; j++)
                        {
                            if (i != 0 || j != 0)
                            {
                                aliveNeighbors += game.Grid[row + i, column + j] == CellEnum.Alive ? 1 : 0;
                            }
                        }
                    }

                    var currentCell = game.Grid[row, column];

                    if (currentCell == CellEnum.Alive && aliveNeighbors < 2)
                    {
                        nextGrid[row, column] = CellEnum.Dead;
                    }
                    else if (currentCell == CellEnum.Alive && aliveNeighbors > 3)
                    {
                        nextGrid[row, column] = CellEnum.Dead;
                    }
                    else if (currentCell == CellEnum.Dead && aliveNeighbors == 3)
                    {
                        nextGrid[row, column] = CellEnum.Alive;
                    }
                    else
                    {
                        nextGrid[row, column] = currentCell;
                    }
                }
            }

            game.Grid = nextGrid;
        }
 private Type GetCellType(CellEnum cellEnum)
 {
     if (_cellTypeDic.TryGetValue(cellEnum, out var type))
     {
         if (type.IsSubclassOf(typeof(BaseCell)))
         {
             return(type);
         }
         else
         {
             Debug.LogError($"所获取的cell类型非继承自BaseCell");
         }
     }
     else
     {
         Debug.LogError($"请求了没有声明的cell");
     }
     return(null);
 }
Esempio n. 7
0
    private ACell GenerateCell(CellEnum cellEnum, int index, Transform waypoint)
    {
        switch (cellEnum)
        {
        case CellEnum.BEGIN:
            return(new BeginCell(index, waypoint));

        case CellEnum.GOOZE:
            return(new GooseCell(index, waypoint));

        case CellEnum.BRIDGE:
            return(new BridgeCell(index, waypoint));

        case CellEnum.HOTEL:
            return(new HotelCell(index, waypoint));

        case CellEnum.WELL:
            return(new WellCell(index, waypoint));

        case CellEnum.MAZE:
            return(new MazeCell(index, waypoint));

        case CellEnum.PRISON:
            return(new PrisonCell(index, waypoint));

        case CellEnum.DEATH:
            return(new DeathCell(index, waypoint));

        case CellEnum.END:
            return(new EndCell(index, waypoint));

        case CellEnum.DEFAULT:
            return(new DefaultCell(index, waypoint));

        default:
            return(new DefaultCell(index, waypoint));
        }
    }
 public void RegisterCell(CellEnum cellEnum, GameObject gameObject, Type cellType)
 {
     _prefabDic.Add(cellEnum, gameObject);
     _cellTypeDic.Add(cellEnum, cellType);
 }