阵列路径中的NPC

时间:2011-11-24 13:33:42

标签: java arrays multidimensional-array coordinates

我要创建一个在终端中工作的游戏(没有GUI),我能够使用键在整个数组中移动我的角色,现在我需要创建将在12,12点生成的NPC(猎人)数组,并使用随机的预定义路径移动到0,0(必须使用12x12阵列中的所有路径)有人可以点亮这个吗?

package hunters;
import java.io.*;
import java.util.*; 
import java.awt.*;
import javax.swing.*;

public class Hunters {
    private static int score;
    private static String player = "P";
    private static String move;
    private static   String emptyfield = "X";
    private static   String [][]a2 = new String [12][12];
    private static int pr,pc;
    private static String hunter = "H";
    private static int hr=11,hc=11;

    public static void paint_board(){

        for (int r = 0 ; r < a2.length; r++){
            for (int c= 0; c <a2[r].length; c++){
                a2 [r][c] = emptyfield;
                a2[pr][pc] = player;
                a2[hr][hc]= hunter;
                System.out.print(" "+a2[r][c]);
            }
            System.out.println(""); 
        }

    }
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        score = 0;

        paint_board();
        do{
            ystem.out.println("Input your move");
            move = in.nextLine();
            if (move.equalsIgnoreCase("w")){
             //move up
               pr = pr -1;
                //repaint
               paint_board();
                //check for collision
                //check for health

            }else if(move.equalsIgnoreCase("s")){
                //move down
                pr = pr +1;
                 for (int i = 0; i <20; i++) System.out.println();
                //repaint
                paint_board();
                  //check for collision
                //check for health

            }else if(move.equalsIgnoreCase("d")){
                //move right
                pc = pc +1;
                //repaint
                paint_board();
                  //check for collision
                //check for health

            }else if(move.equalsIgnoreCase("a")){
                //move left
                pc = pc -1;
               for (int i = 0; i < 20; i++) System.out.println("");
                //repaint
                paint_board();
                  //check for collision
                //check for health

            }
        }while(score !=5);
    }   
}  

1 个答案:

答案 0 :(得分:0)

只需使用广度优先搜索(BFS)。

这会为您提供一张地图,显示至少从(12,12)到达地图上的每个自由字段所需的步数。

然后你可以让你的NPC在一个字段的方向上从(0,0)向后逐字段向后移动,其中一个字段的数字小于它们当前所在字段的数字,基于一个随机的决定。

通过这种方式,您将获得最短路径之一,然后您必须让NPC一起走。

然后你可以添加进一步的随机化,让他们现在绕道而行,如果你想要更多不可预测的行为 - 即让他们有时根据随机决定选择一个非最佳的下一个字段。

然后去那里花一些时间在众多游戏开发博客之一 - 即谷歌

游戏开发广度优先

游戏开发明星

(a-star是一种更加狡辩的寻路算法)

这样你就可以学到很多关于这些东西的东西 - 如果没有必要的数学背景,维基百科文章有时候很难理解,因此我建议寻找特定于游戏开发的内容。