Nach langer nichtstuherei hab ich mich mal wieder an mein Spiel gesetzt.
Ich versuche grade meine Raumschiffe und Waffensysteme etwas Modularer aufzubauen, um es später leichter zu erweitern.
Doch bekomme ich eine Exception die ich mir nicht ganz erklären kann.
Hier erstmal ein wenig Code:
Ein Testschiff: ( zu Testzwecken inkl. Main() )
Das Waffeninterface:
Eine Waffe:
Ich bekomme beim aufruf der 'nemesis' eine Nullpointerexception bei 'fullAgK += w.getAgk();'.
Ich gehe davon aus das das Interface anstelle der eigenlichen Waffe gecastet wird. Das sollte natürlich nicht sein.
Kann ich das irgentwie umgehen? Bzw. wie löse ich das Problem am besten?
Bestem Dank im voraus
Ich versuche grade meine Raumschiffe und Waffensysteme etwas Modularer aufzubauen, um es später leichter zu erweitern.
Doch bekomme ich eine Exception die ich mir nicht ganz erklären kann.
Hier erstmal ein wenig Code:
Ein Testschiff: ( zu Testzwecken inkl. Main() )
Code:
package de.flamingbytes.starfighters.server.kampf.lib.ships;
import de.flamingbytes.starfighters.server.kampf.lib.weapons.*;
import java.util.Vector;
public class Nemesis {
private String name = "Nemesis";
private short sid = 15;
private int fullAgK = 0;
private Vector weaponSlots = new Vector();
public static final byte slots = 16;
/** Creates a new instance of Nemesis */
public Nemesis() {
this.weaponSlots.setSize(slots);
this.weaponSlots.add(new SmallRockets());
this.weaponSlots.add(new MediumRockets());
this.getFullAgK();
}
public static void main(String[] args){
new Nemesis();
}
public int getFullAgK(){
this.fullAgK = 0;
for(int i = 0; i < weaponSlots.size(); i++){
Weapons w = (Weapons) this.weaponSlots.get(i);
fullAgK += w.getAgk();
System.out.print("Angriffskraft für Waffe ");
System.out.print(w.getName() + ": ");
System.out.println(w.getAgk());
}
System.out.print("AgK Gesamt:");
System.out.println(fullAgK);
return fullAgK;
}
}
Das Waffeninterface:
Code:
package de.flamingbytes.starfighters.server.kampf.lib.weapons;
public interface Weapons {
int getAgk();
int getFireRate();
int getMasse();
String getName();
int[] getPrice();
byte getSlots();
void setAgk(int agk);
void setFireRate(int fireRate);
void setMasse(int masse);
void setName(String name);
void setPrice(int[] price);
void setSlots(byte slots);
}
Eine Waffe:
Code:
package de.flamingbytes.starfighters.server.kampf.lib.weapons;
public class SmallRockets implements Weapons {
private String name = "Kleine Raketen";
private int agk = 135;
private int fireRate = 2;
private int masse = 275;
private byte slots = 2;
/**
* Metall, Kristall, Gas
*/
private int[] price = {500, 0, 250 };
/** Creates a new instance of SmallLaser */
public SmallRockets() {
}
public int getAgk() {
return agk;
}
public int getFireRate() {
return fireRate;
}
public int getMasse() {
return masse;
}
public String getName() {
return name;
}
public int[] getPrice() {
return price;
}
public byte getSlots() {
return slots;
}
public void setAgk(int agk) {
this.agk = agk;
}
public void setFireRate(int fireRate) {
this.fireRate = fireRate;
}
public void setMasse(int masse) {
this.masse = masse;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(int[] price) {
this.price = price;
}
public void setSlots(byte slots) {
this.slots = slots;
}
}
Ich bekomme beim aufruf der 'nemesis' eine Nullpointerexception bei 'fullAgK += w.getAgk();'.
Code:
Exception in thread "main" java.lang.NullPointerException
at de.flamingbytes.starfighters.server.kampf.lib.ships.Nemesis.getFullAgK(Nemesis.java:45)
at de.flamingbytes.starfighters.server.kampf.lib.ships.Nemesis.<init>(Nemesis.java:32)
at de.flamingbytes.starfighters.server.kampf.lib.ships.Nemesis.main(Nemesis.java:36)
Ich gehe davon aus das das Interface anstelle der eigenlichen Waffe gecastet wird. Das sollte natürlich nicht sein.
Kann ich das irgentwie umgehen? Bzw. wie löse ich das Problem am besten?
Bestem Dank im voraus