/// <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); }
/// <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); }
/// <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); }
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); }