Java - возникли трудности с перемещением объекта для моего семестрового проекта - PullRequest
0 голосов
/ 28 октября 2018

Я занимаюсь этим проектом для этого семестрового класса, и это в основном очень простая игра типа Rogue Like.У меня возникают проблемы с остановкой движения этого объекта (летучей мыши), когда он пытается прыгнуть в локацию игроков (героев) и атаковать вместо этого, но он все еще пересекается со спрайтом игроков.Первый код принадлежит классу Bat, а второй - основной класс Rogue, запускающий игру.Есть также класс ImageMatrixGUI, который реализует игровое окно и спрайты.Заранее спасибо.

private static final int HP=3;
private static final int DAMAGE=1;

public Bat(Point2D position) {
    super(position);
    setHP(HP);
    setDamage(DAMAGE);
    // TODO Auto-generated constructor stub
}

@Override
public int getLayer() {
    // TODO Auto-generated method stub
    return 1;
}

@Override
public void move() {
    Random ran = new Random();
    int i = ran.nextInt(2);
    if(i==0) {
        Vector2D v = Vector2D.movementVector(getPosition(), Rogue.getInstance().getHeroPosition());
        if(getPosition().plus(v) == Rogue.getInstance().getHeroPosition()) {
            attack(getPosition().plus(v));
            v = new Vector2D(0,0);
        }
        setPosition(getPosition().plus(v));
    }else {
        Point2D nextP = getPosition().plus(Direction.random().asVector());
        if(nextP == Rogue.getInstance().getHeroPosition()) {
            attack(nextP);
            nextP = new Point2D(0,0);
        }
        if(nextP.getX()<1 || nextP.getY()<1 || nextP.getX()>8 || nextP.getY()>8)
            nextP=getPosition();
        setPosition(nextP);
    }

}

@Override
public void attack(Point2D p) {
    Rogue.getInstance().dealDamage(DAMAGE);
}

}

private static final Rogue INSTANCE = new Rogue();

// Singleton pattern: private constructor
private Rogue() {
    // Do not delete/change or move these three lines
    ImageMatrixGUI.setSize(WIDTH, HEIGHT + 1); // +1 because last row is the status bar
    ImageMatrixGUI.getInstance().registerObserver(this);
    ImageMatrixGUI.getInstance().setStatusMessage("Rogue Game Test"); // Try other message, keep track of the room number using this message

    // staticInit() should be replaced by initFromFile(FILENAME); after first phase with FILENAME = "config/map.txt"
    staticInit(); 
}

// Singleton pattern inspector
public static Rogue getInstance() {
    return INSTANCE;
}

// Initialization for 1st phase 
private void staticInit() {
    hero = new Hero(new Point2D(1,1));
    skeleton = new Skeleton(new Point2D(WIDTH-2, 1));
    bat = new Bat(new Point2D(1, HEIGHT-2));
    sword = new Sword(new Point2D(WIDTH-2, HEIGHT-2));
    for(int w=0; w<WIDTH; w++) {
        for(int h=0; h<=HEIGHT; h++) {
            if(h<HEIGHT)
                ImageMatrixGUI.getInstance().addImage(new Floor(new Point2D(w,h)));
            if(w<WIDTH-3 && h==HEIGHT) {
                ImageMatrixGUI.getInstance().addImage(new Green(new Point2D(w,h)));
                ImageMatrixGUI.getInstance().addImage(new Black(new Point2D(w+3,h)));
            }
        }
    }
    for(int w=0; w<WIDTH; w++) {
        for(int h=0; h<=HEIGHT-1; h++) {
            ImageMatrixGUI.getInstance().addImage(new Wall(new Point2D(w,h)));
            if(w!=0 && w!=WIDTH-1)
                h+=HEIGHT-2;
        }

    }

    ImageMatrixGUI.getInstance().addImage(hero);
    ImageMatrixGUI.getInstance().addImage(skeleton);
    ImageMatrixGUI.getInstance().addImage(bat);
    ImageMatrixGUI.getInstance().addImage(sword);

    // TODO: Initialize other objects in the appropriate lists (use a Factory to make switch to file-based initialization easy)

}

// Starting-up GUI
public void go() {
    ImageMatrixGUI.getInstance().go();
    ImageMatrixGUI.getInstance().update();      
}

public Point2D getHeroPosition() {
    return hero.getPosition();
}

public void dealDamage(int i) {
    hero.getDamaged(i);
}

public int getTurn() {
    return turn;
}

public int getWidth() {
    return WIDTH;
}

public int getHeight() {
    return HEIGHT;
}

// Called everytime a key is pressed
@Override
public void update(Observed source) {
    int keyPressed = ImageMatrixGUI.getInstance().keyPressed();
    Direction d = Direction.directionFor(keyPressed);
    hero.move(d);
    skeleton.move();
    bat.move();
    turn++;

    //TODO: what else?

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