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); }//计算动画结束位置的盘面位置
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]); }