2017-09-14 5 views
1

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!)

+0

Bitte posten Sie die gesamte 'Merkmal'-Klasse. –

Antwort

0

In Ihnen sind Konstrukteur, Sie ordnen die Werte von Effekten neu zu. Dies ist ein potenzielles Problem.

effects[0] = feedertype; 
effects[1] = size; 
effects[2] = power; 
effects[3] = stealth; 
effects[4] = senses; 
effects[5] = dangerous;