NPC в Массив пути - PullRequest
       24

NPC в Массив пути

0 голосов
/ 24 ноября 2011

Я должен создать игру для работы в терминале (без графического интерфейса), я могу перемещать своего персонажа по всему массиву, используя ключи, теперь мне нужно создать 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);
    }   
}  

1 Ответ

0 голосов
/ 25 ноября 2011

Просто используйте поиск в ширину (BFS).

Это дает вам карту, показывающую, сколько шагов требуется, по крайней мере, чтобы добраться до каждого свободного поля на вашей карте из (12,12).

Затем вы можете заставить своих NPC перемещаться назад на поле за полем назад от (0,0) в направлении одного из полей с наибольшим номером, меньшим, чем у поля, на котором они в данный момент стоят, на основе случайное решение.

Таким образом, вы получите один из самых коротких путей, по которому вам нужно будет просто пропустить своих неигровых персонажей.

Затем вы можете добавить дополнительную рандомизацию, чтобы они время от времени совершали обход, если вы хотите более непредсказуемого поведения - то есть заставляете их иногда выбирать неоптимальное следующее поле на основе случайного решения.

А потом пойти и потратить некоторое время на один из многочисленных блогов по разработке игр - например, google

.

разработка игр в ширину

разработка игр a-star

(a-star - более сложный алгоритм поиска пути)

Таким образом, вы сможете многое узнать об этих вещах - статьи в Википедии иногда довольно трудно понять без необходимого математического образования, поэтому я предлагаю поискать специфический контент для разработки игр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...