gpt4 book ai didi

Java - 将扩展同一类的线程和其他对象放入 ArrayList

转载 作者:行者123 更新时间:2023-12-02 13:26:48 26 4
gpt4 key购买 nike

我正在制作一个基于事件的游戏(基本上,没有 while(true) 循环:如果没有事件,则不会执行任何代码行)。游戏基于房间对象,每个房间都有一个包含怪物和战利品对象的ArrayList。

问题是我需要怪物成为线程,这样它们就会自动在游戏中发起事件(比如跟随玩家并攻击他)。

Monsters 和 Loot 的母类是相同的:GameObject。由于我花了很多时间以这种方式玩游戏(一个战利品和怪物列表),我想知道是否有一种方法可以让两个对象怪物和战利品在同一个列表中,并且仍然将怪物作为线程。

目前我使用“implements Runnable”方法。我不知道这是否是最好的方法。

谢谢。

编辑:

这是代码。首先是母类,GameObjects

public abstract class GameObjects {

protected int x;
protected int y;
private int height;
private int width;
private Player player; //And then there are all getters and setters.

}

然后是Monster类,有各种各样的怪物,比如僵尸。

package game.projetdonjon;

public abstract class Monster extends GameObjects implements Runnable {

private char direction;
private int hp;
private boolean alive;
private Player player;

public void getDamage(int p){
this.hp=p;
if (this.pv <= 0) {
this.alive = false;
System.out.println("The monster is death.");
}
}

public boolean isAlive() {
if (isAlive)
return true;
else
return false;
}
//And then still others getters & setters...
}

僵尸类:

package game.projetdonjon;

public class Zombie extends Monster implements Runnable {

private Thread thread;
private int hp;

public Zombie(int x, int y,Player player) {
super.setDirection('E');
this.x = x;
this.y = y;
this.hp = 50;
this.thread = new Thread();
super.setHeight(50);
super.setWidth(50);
super.setHp(hp);
super.setAlive(true);
super.setPlayer(player);
}

@Override
public void run() {
System.out.println("Zombie's runnig, yo!");
while (true) {
this.setX(this.getX()+10);
try {
thread.sleep(100);
} catch (Exception e){
System.out.println(e);
}
}

}
}

最后是房间类,它包含怪物和战利品。

package game.projetdonjon;

import java.util.ArrayList;

public class Room {
private ArrayList<GameObjects> roomElements = new ArrayList();
private ArrayList<Door> roomDoors= new ArrayList();
private int roomNumber;

public Piece(int roomNumber){
this.roomNumber = roomNumber;
roomElements.add(new Loot(somearguments...));
roomEleemnts.add(new Thread(new Zombie(50,50,player))); //Here is the
//problem, as Thread isn't a GameObjects/ doesn't extend GameObjects

}

最佳答案

Runnable 实现是最好的方式。但我建议为您的房间对象创建两个列表:第一个列表包含怪物(可运行),第二个列表包含战利品。

关于Java - 将扩展同一类的线程和其他对象放入 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com