Установить currentPoint для ArrayList точек в Java - PullRequest
0 голосов
/ 19 октября 2018

Я новичок в Java и в настоящее время пытаюсь создать простую текстовую игру.Используя 4 класса: Main, Character, World и Constructor, я настроил систему карт, в которой 5 ArrayList<Point> s определены как:

public class Constructor {
    //Make Worlds
    World desktopSize = new World(15, 15);
    World laptopSize = new World(10,10);
    World routerSize = new World(10, 5);
    World dlTravelSpace = new World(3,1);
    World dlrTravelSpace = new World(1, 3);
}

И World s создается как:

public class World {
    private int x, y;
    private String direction;
    private int index;
    ArrayList<Point> mapSize = new ArrayList();
    Scanner scan = new Scanner(System.in);

    public World(int x, int y){
        this.x = x;
        this.y = y;
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                mapSize.add(new Point(i + 1, j + 1));
            }
        }
    }
}

В классе Character я устанавливаю все атрибуты, используя метод:

 public void setCharacter(String charClass, Point currentPoint) {
    if (charClass.equals("warrior")) {
        setName("Sparky");
        setLevel(1);
        setHp(100);
        setAttack(50);
        setDefense(20);
        setSpeed(10);
        //setSkills();
        setBackPackSpace(15);
        //setInventory();
        setCredits(1000);
        setCurrentPoint(10, 8);
    } else if (charClass.equals("ranged")) {
        setName("Sparky");
        setLevel(1);
        setHp(90);
        setAttack(60);
        setDefense(10);
        setSpeed(12);
        //setSkills();
        setBackPackSpace(14);
        //setInventory();
        setCredits(950);
        setCurrentPoint(10, 8);
    } else if (charClass.equals("tank")) {
        setName("Sparky");
        setLevel(1);
        setHp(110);
        setAttack(40);
        setDefense(30);
        setSpeed(9);
        //setSkills();
        setBackPackSpace(16);
        //setInventory();
        setCredits(1050);
        setCurrentPoint(10, 8);
    }
}

Когда я вызываю метод setCharacter, я использую:

if (player.getCharClass().equals("warrior") || 
    player.getCharClass().equals("ranged") || 
    player.getCharClass().equals("tank")) {
  System.out.println("Class " + player.getCharClass() + " selected!");
  System.out.println("");
  player.setCharacter(player.getCharClass(), 
  player.getCurrentPoint());
} else {
  System.out.println("Invalid class selected. Please restart and try 
again.");
  System.exit(0);
}

Однако, когда я запускаю код, он возвращает следующую ошибку:

Error:(34, 13) java: method setCurrentPoint in class Character cannot be 
applied to given types;
required: java.awt.Point
found: int,int
reason: actual and formal argument lists differ in length

Ошибка, кажется, происходит в

 public void setCharacter(String charClass, Point currentPoint) {
    if (charClass.equals("warrior")) {
        setName("Sparky");
        setLevel(1);
        setHp(100);
        setAttack(50);
        setDefense(20);
        setSpeed(10);
        //setSkills();
        setBackPackSpace(15);
        //setInventory();
        setCredits(1000);
        setCurrentPoint(10, 8);

В

setCurrentPoint(10, 8);

Метод setCurrentPoint имеет вид

public void setCurrentPoint(Point currentPoint) {
    this.currentPoint = currentPoint;
}

Моя проблема заключается в следующем: как установить атрибут точки персонажа, чтобы он был в (10, 8) в мире desktopSize.На создание

1 Ответ

0 голосов
/ 19 октября 2018

Ваш метод setCurrentPoint здесь не показан, но из-за ошибки я предполагаю, что это что-то вроде

public void setCurrentPoint(Point somePoint) {...}

Вы пытаетесь вызвать метод с двумя целыми числами (10 и 8), поэтомуошибка брошена.Вам передается объект Point в методе setCharacter с именем currentPoint.Это Point объект, который вы хотите установить в качестве текущей точки?Если это так, вы должны вызвать setCurrentPoint следующим образом:

setCurrentPoint(currentPoint);

Если вы хотите, чтобы 10 и 8 были жестко закодированы как координаты, вы можете создать новый объект Point с этими значениями и отправить его на setCurrentPoint method:

setCurrentPoint(new Point(10,8));

Надеюсь, это поможет.

...