Ich versuche, ein kleines Spiel-Konzept in Java zusammenzustellen, und habe ein seltsames Problem angetroffen; int-Arrays scheinen in bestimmten Teilen meines Codes keine Werte zu speichern!
(Mit Netbeans 8.2)
Ich vermute, es ist etwas klein und langwierig, dass ich verpasst habe.
Dies ist der Konstruktor für eine grundlegende Kreatur. Siehe die "addTrait" -Methode? Das ist der Fokus.Versuchen, int-Arrays zu debuggen
public Creature(String inputname)
{
if(DEBUG>0){System.out.println("DEBUG: CREATURE ");}
creaturename = inputname;
size = 1;
population = 1;
addTrait(new Trait("TEST",0,new int[]{4,4,4,4,4,4}),0);
addTrait(new Trait("EMPTY",0,new int[]{0,0,0,0,0,0}),1);
addTrait(new Trait("EMPTY",0,new int[]{0,0,0,0,0,0}),2);
}
Dies ist die Methode in der Creature-Klasse.
public void addTrait(Trait newtrait, int slotnum)
{
myTraits[slotnum] = newtrait;
if(DEBUG>0){System.out.println("DEBUG: CREATURE > "
+ "addTrait > myTraits["+slotnum+"].getName() = "+
myTraits[slotnum].getName());}
for(int k=0;6>k;k++)
{
System.out.println("DEBUG: CREATURE > "
+ "addTrait > myTraits["+slotnum+"].getEffects()["+k+"] = "+
myTraits[slotnum].getEffects()[k]);
}
System.out.println();
}
In meiner Treiberklasse versuche ich, meiner Testkreatur die Eigenschaft "Sharp Eyesight" hinzuzufügen.
public class EvoDriver {
public static void main(String[] args) {
// initilize TraitList
TraitList myTraits = new TraitList();
// initilize Creature
Creature player1 = new Creature("Dragon Bear");
player1.addPop();
player1.addPop();
player1.growSize();
// add specific trait
//player1.addTrait(myTraits.getTrait("Carnivore"), 0);
player1.addTrait(myTraits.getTrait("Sharp Eyesight"), 1);
//player1.addTrait(myTraits.getTrait("Fire Breath"), 2);
//force update
player1.updateStats();
//print creature
player1.printCreature();
}
Dies ist der Konstruktor für ein Merkmal.
Ich habe eine Klasse, die mit der Initiierung der Statistik-Boosts für jedes Merkmal namens TraitList umgehen soll. Es enthält alle Daten für jedes Merkmal. Wenn jedoch die Methode "getEffects" aufgerufen wird, ist das Ergebnis immer 0!
public class TraitList {
//DEBUG MODE
final int DEBUG = 1;
Trait[] allTraits = {new Trait("EMPTY",0,new int[]{0,0,0,0,0,0})};
// **** Constructors ****
/* HINTS
____________________________________________________________________________
effects[0] = feedertype;
effects[1] = size;
effects[2] = power;
effects[3] = stealth;
effects[4] = senses;
effects[5] = dangerous;
*/
public TraitList()
{
if(DEBUG>0){System.out.println("DEBUG: TRAITLIST ");}
boolean[] special = new boolean[2];
special[0] = false; //Alert the Herd
special[1] = false; //Pack Tactics
//add effects to list
// Sharp Eyesight; increases Senses by 3
//feedertype;
//size;
//power;
//stealth;
//senses;
//dangerous;
addTrait(new Trait("Sharp Eyesight", 2, new int[]{0,0,0,0,3,0})
.setDesc("Helps detect other creatures!"));
// Camouflage; increases Stealth by 3
addTrait(new Trait("Camouflage", 0, new int[]{0,0,0,0,0,0}));
// Alert the Herd; increases Senses by Population number
addTrait(new Trait("Alert the Herd", 0, special));
// Pack Tactics; increases Power by Population number
addTrait(new Trait("Pack Tactics", 0, special));
// Carnivore; creature can only eat meat; Senses +1, Stealth +1
addTrait(new Trait("Carnivore", -1, new int[]{0,0,0,0,0,0}));
// Omnivore; creature can eat meat and plants
addTrait(new Trait("Omnivore", -5, new int[]{0,0,0,0,0,0}));
// Horns; increases Dangerous by 1
addTrait(new Trait("Horns", 0, new int[]{0,0,0,0,0,0}));
// Fire Breath; increases Dangerous by 3, increases Power by 3; feed 10
addTrait(new Trait("Fire Breath", 10, new int[]{0,0,0,0,0,0}));
}
// **** Methods ****
public void addTrait(Trait newtrait)
{
// create temp array
Trait[] temp = new Trait[1];
temp[0] = newtrait;
Trait[] newtemp = new Trait[allTraits.length+1];
for (int k=0; allTraits.length>k;k++)
{
newtemp[k] = allTraits[k];
}
newtemp[allTraits.length] = temp[0];
allTraits = newtemp;
}
public Trait getRandomTrait() // to do
{
return null;
}
public int getTraitIndex(String searchname)//returns 0 if not found
{
for(int k=0;allTraits.length>k;k++)
{
if(DEBUG>0)
{System.out.println("DEBUG: TRAITLIST > getTraitIndex > k = "+k);}
if(DEBUG>0)
{System.out.println("DEBUG: TRAITLIST > getTraitIndex > "
+ "allTraits[k].getName() = "+allTraits[k].getName());}
if(searchname.equalsIgnoreCase(allTraits[k].getName()))
{
return k;
}
}
System.out.println("ERROR IN TraitList > getTraitIndex! TRAIT "
+ searchname +" DOES NOT EXIST!");
return 0;
}
public Trait getTrait(String name)//returns EMPTY trait if not found
{
return allTraits[getTraitIndex(name)];
}
}
Ich weiß nicht, wie klar ich war, aber ich würde schätzen es sehr, irgendwelche Hinweise, Ratschläge, Hölle Ich würde nehmen eine nützliche Beleidigung meine dumme Fehler hingewiesen. Ich werde meine Debug-Ausgabe anhängen.
run:
DEBUG: TRAIT
DEBUG: TRAIT > traitname = EMPTY
DEBUG: TRAIT > senses = 0
DEBUG: TRAITLIST
DEBUG: TRAIT
DEBUG: TRAIT > traitname = Sharp Eyesight
DEBUG: TRAIT > senses = 0
DEBUG: TRAIT
DEBUG: TRAIT > traitname = Camouflage
DEBUG: TRAIT > senses = 0
DEBUG: TRAIT
DEBUG: TRAIT > traitname = Carnivore
DEBUG: TRAIT > senses = 0
DEBUG: TRAIT
DEBUG: TRAIT > traitname = Omnivore
DEBUG: TRAIT > senses = 0
DEBUG: TRAIT
DEBUG: TRAIT > traitname = Horns
DEBUG: TRAIT > senses = 0
DEBUG: TRAIT
DEBUG: TRAIT > traitname = Fire Breath
DEBUG: TRAIT > senses = 0
DEBUG: CREATURE
DEBUG: TRAIT
DEBUG: TRAIT > traitname = TEST
DEBUG: TRAIT > senses = 0
DEBUG: CREATURE > addTrait > myTraits[0].getName() = TEST
DEBUG: CREATURE > addTrait > myTraits[0].getEffects()[0] = 0
DEBUG: CREATURE > addTrait > myTraits[0].getEffects()[1] = 0
DEBUG: CREATURE > addTrait > myTraits[0].getEffects()[2] = 0
DEBUG: CREATURE > addTrait > myTraits[0].getEffects()[3] = 0
DEBUG: CREATURE > addTrait > myTraits[0].getEffects()[4] = 0
DEBUG: CREATURE > addTrait > myTraits[0].getEffects()[5] = 0
DEBUG: TRAIT
DEBUG: TRAIT > traitname = EMPTY
DEBUG: TRAIT > senses = 0
DEBUG: CREATURE > addTrait > myTraits[1].getName() = EMPTY
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[0] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[1] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[2] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[3] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[4] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[5] = 0
DEBUG: TRAIT
DEBUG: TRAIT > traitname = EMPTY
DEBUG: TRAIT > senses = 0
DEBUG: CREATURE > addTrait > myTraits[2].getName() = EMPTY
DEBUG: CREATURE > addTrait > myTraits[2].getEffects()[0] = 0
DEBUG: CREATURE > addTrait > myTraits[2].getEffects()[1] = 0
DEBUG: CREATURE > addTrait > myTraits[2].getEffects()[2] = 0
DEBUG: CREATURE > addTrait > myTraits[2].getEffects()[3] = 0
DEBUG: CREATURE > addTrait > myTraits[2].getEffects()[4] = 0
DEBUG: CREATURE > addTrait > myTraits[2].getEffects()[5] = 0
DEBUG: TRAITLIST > getTraitIndex > k = 0
DEBUG: TRAITLIST > getTraitIndex > allTraits[k].getName() = EMPTY
DEBUG: TRAITLIST > getTraitIndex > k = 1
DEBUG: TRAITLIST > getTraitIndex > allTraits[k].getName() = Sharp Eyesight
DEBUG: CREATURE > addTrait > myTraits[1].getName() = Sharp Eyesight
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[0] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[1] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[2] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[3] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[4] = 0
DEBUG: CREATURE > addTrait > myTraits[1].getEffects()[5] = 0
_________________________________________________
Dragon Bear (Pop: 3)
[Herbivore]
_________________________________________________
Size: 2
Power: 2
Stealth: 0
Senses: 0
Dangerous: 0
_________________________________________________
Trait 1: TEST
~ { }
Trait 2: Sharp Eyesight
~ { Helps detect other creatures! }
Trait 3: EMPTY
~ { }
_________________________________________________
BUILD SUCCESSFUL (total time: 0 seconds)
Wenn keine Lösung gefunden werden kann, werde ich wahrscheinlich von vorne anfangen. (Ich werde Bits des Arbeitscodes natürlich wiederverwenden!)
Bitte posten Sie die gesamte 'Merkmal'-Klasse. –