我要创建一个在终端中工作的游戏(没有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);
}
}
答案 0 :(得分:0)
只需使用广度优先搜索(BFS)。
这会为您提供一张地图,显示至少从(12,12)到达地图上的每个自由字段所需的步数。
然后你可以让你的NPC在一个字段的方向上从(0,0)向后逐字段向后移动,其中一个字段的数字小于它们当前所在字段的数字,基于一个随机的决定。
通过这种方式,您将获得最短路径之一,然后您必须让NPC一起走。
然后你可以添加进一步的随机化,让他们现在绕道而行,如果你想要更多不可预测的行为 - 即让他们有时根据随机决定选择一个非最佳的下一个字段。
然后去那里花一些时间在众多游戏开发博客之一 - 即谷歌
游戏开发广度优先
游戏开发明星
(a-star是一种更加狡辩的寻路算法)
这样你就可以学到很多关于这些东西的东西 - 如果没有必要的数学背景,维基百科文章有时候很难理解,因此我建议寻找特定于游戏开发的内容。