public GameState(GameState gs) : this(gs.map, gs.Width(), gs.Height(), new Point(gs.MyX(), gs.MyY()), new Point(gs.OpponentX(), gs.OpponentY())) { this.map = (bool[,])gs.map.Clone(); }
private static int FloodFill(GameState gs, int x, int y) { Queue<Point> q = new Queue<Point>(); int total = 0; // shallow copy array bool[,] map = (bool[,])gs.map.Clone(); q.Enqueue(new Point(x,y)); map[x,y] = false; //Console.Error.WriteLine(x + " " + y); while(q.Count > 0) { Point n = q.Dequeue(); if (n.X < 0 || n.Y < 0 || n.X >= gs.Width() || n.Y >= gs.Height()) continue; // process neighbours, mark as visited and increment count if (!map[n.X, n.Y]) { q.Enqueue(new Point(n.X+1, n.Y)); q.Enqueue(new Point(n.X-1, n.Y)); q.Enqueue(new Point(n.X, n.Y-1)); q.Enqueue(new Point(n.X, n.Y+1)); map[n.X,n.Y] = true; total++; } } return total; }