public void Init(bool[,] init_map) { if (_currentMap != null) { throw new InvalidOperationException("you can only init once."); } _currentMap = new Zerg[init_map.GetLength(0), init_map.GetLength(1)]; for (int y = 0; y < init_map.GetLength(1); y++) { for (int x = 0; x < init_map.GetLength(0); x++) { var zerg = new Zerg(init_map[x, y]); AsTimeGoesOn += zerg.Live; NextGeneration += zerg.Evolution; _currentMap[x, y] = zerg; var hasTop = false; if (y - 1 >= 0) { hasTop = true; this.Connect(zerg, _currentMap[x, y - 1]); } //Stupid if (x - 1 >= 0) { this.Connect(zerg, _currentMap[x - 1, y]); if (hasTop) { this.Connect(zerg, _currentMap[x - 1, y - 1]); } } if (x + 1 < _currentMap.GetLength(0) && hasTop) { this.Connect(zerg, _currentMap[x + 1, y - 1]); } } } }
private void Connect(Zerg a, Zerg b) { a.SendSingal += b.OnSignalReceived; b.SendSingal += a.OnSignalReceived; }