我要创建一个游戏在终端工作(没有GUI),我能够移动我的角色在整个数组使用键,现在我需要创建npc(猎人),将在12,12点的数组,并移动到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);
}
}
只需使用广度优先搜索(BFS)。
这将给出一个地图,显示从(12,12)到地图上的每个空闲字段至少需要多少步。
然后你可以让你的npc从(0,0)场逐场向后移动,在一个最大的场的方向上,小于他们目前站在的场,基于随机决定。
这样,你会得到一条最短的路径,然后你只需要让你的npc沿着这条路径走。
如果你想要更多不可预测的行为,你可以添加进一步的随机化,让他们偶尔绕道而行,即让他们有时根据随机决策选择一个非最佳的下一个字段。
然后花点时间在游戏开发博客上——比如google
游戏开发宽度优先
游戏开发a-star
(a-star是更复杂的寻路算法)
这样你就能学到很多关于这些东西的知识——如果没有必要的数学背景,维基百科的文章有时很难理解,因此我建议你寻找游戏开发的特定内容。