作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个基于事件的游戏(基本上,没有 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/
我是一名优秀的程序员,十分优秀!