Esempio n. 1
0
 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();
 }
Esempio n. 2
0
    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;
    }