예제 #1
0
        private ValueTuple <double, double> GetXYst()
        {
            int x    = gameboard.player.x;
            int y    = gameboard.player.y;
            int x_st = x - Form1.x / 2;

            if (x_st < 0)
            {
                x_st = 0;
            }
            int x_ed = x_st + Form1.x;

            if (x_ed > (gameboard.GetHeight()))
            {
                x_ed = gameboard.GetHeight(); x_st = x_ed - Form1.x;
            }
            int y_st = y - Form1.y / 2;

            if (y_st < 0)
            {
                y_st = 0;
            }
            int y_ed = y_st + Form1.y;

            if (y_ed > (gameboard.GetWidth()))
            {
                y_ed = gameboard.GetWidth(); y_st = y_ed - Form1.y;
            }
            return(x_st, y_st);
        }//计算动画结束位置的盘面位置
예제 #2
0
        public static Node GetNextStep(MoveableObject player, MoveableObject enemy, GameBoard board)
        {
            int h = board.GetHeight();
            int w = board.GetWidth();

            //int x = obj.x;
            vis   = new bool[h, w];
            reach = false;
            var st = new Node(player.x, player.y);

            parent = new Node[h, w];
            var queue = new Queue <Node>();

            queue.Enqueue(st);
            parent[st.x, st.y] = st;
            //Console.WriteLine("Begin BFS for Enemy: " + enemy.x + ", " + enemy.y + ": ");
            while (queue.Count > 0)
            {
                var v = queue.Dequeue();
                if (vis[v.x, v.y])
                {
                    continue;
                }
                vis[v.x, v.y] = true;
                if (v.x == enemy.x && v.y == enemy.y)
                {
                    break;
                }

                for (int i = 0; i < 4; i++)
                {
                    int nx = v.x + dir[i, 0];
                    int ny = v.y + dir[i, 1];
                    if ((nx > 0 && nx < board.GetWidth() - 1 && ny > 0 && ny < board.GetHeight() - 1) && !vis[nx, ny] && !board.status[nx, ny].isblocked &&
                        !((nx != enemy.x || ny != enemy.y) && board.HasEnemy(nx, ny)))
                    {
                        queue.Enqueue(new Node(nx, ny));
                        parent[nx, ny] = v;
                        //Console.WriteLine("Parent of [" + nx + ", " + ny + "] is [" + v.x + ", " + v.y + "] board has enemy: " + board.HasEnemy(nx, ny));
                    }
                }
            }
            //Console.WriteLine("BFS for Enemy: " + enemy.x + ", " + enemy.y + " End");

            if (!vis[enemy.x, enemy.y])
            {
                Console.WriteLine("Cannot Found Any Path!");
                return(new Node(enemy.x, enemy.y)); // remain stayed
            }

            //Console.WriteLine(path[path.Count - 2].x);
            if (parent[enemy.x, enemy.y] == st)
            {
                return(new Node(enemy.x, enemy.y));
            }


            return(parent[enemy.x, enemy.y]);
        }