2017-04-17 2 views
-1

Mein Code öffnet ein Fenster, wo die Statistiken eines RPG-ähnlichen Items angezeigt werden, die nach dem Zufallsprinzip erzeugt wurden, jetzt ist mein Problem, dass ich nicht weiß, wie ich es machen soll, damit es ein neues Item erzeugt nach dem Drücken einer Taste. Ich benutze das libgdx-Framework. Wenn es um das Codieren geht, bin ich ein blutiger Anfänger, und das ist so ziemlich meine erste Anwendung. Hier ist mein Code:Generiere neue zufällige Werte

package com.mygdx.test; 

import java.util.Random; 

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Color; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.g2d.BitmapFont; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 

public class Itemgenerator extends ApplicationAdapter { 
    private SpriteBatch batch; 
    private BitmapFont font; 
    Color rarityColor; 
    String rarity; 
    Random randomPrefix = new Random(); 
    Random randomName = new Random(); 
    Random randomRarity = new Random(); 
    Random randomItemType = new Random(); 
    Random randomItemLevel = new Random(); 
    Random randomDamage = new Random(); 
    Random randomWeaponSpeed = new Random(); 
    Random randomStrengh = new Random(); 
    Random randomEndurance = new Random(); 
    Random randomCritical = new Random(); 
    Random randomWisdom = new Random(); 

    String [] Prefix = {"Blunt", "Sharp", "Jagged", "Grandmaster's", "Knight's", "Apprentice's","Crude", "Godly", "Flawless", "Barbaric", "Horrific", "Hiddeous", "Demonic", "Dull", "Bloody", "Holy", "Engergiced", "Fast", "Otherworldly", "Well-Worn", "Elegant","Vigilant", "Surpressing" ,"Destroying", "Vampiric", "Intimidating"}; 
    String [] Name = {" Soulsplitter"," Axe", " Sword", " Spear", " Bow", " Longbow", " Staff", " God Eater", " Doomsday Device", " Excalibur", " Nature's Call", " Forest Spirit", " Dragon's Breath", " God's Wrath", " Buster", " Peace Keeper", " Jackhammer", " Battleaxe", " Emperor's Lance", " Tsunami", " Hurricane"}; 
    String [] ItemType = {"Axe", "Sword", "Broadsword", "Dagger", "Bow","Longbow","Staff","Spear","Hammer"}; 

    int index = randomPrefix.nextInt(Prefix.length); 
    int index1 = randomName.nextInt(Name.length); 
    int index2 = randomItemType.nextInt(ItemType.length); 
    int ItemLevel = randomItemLevel.nextInt(1000); 
    int Damage = randomDamage.nextInt(25000); 
    int WeaponSpeed = randomWeaponSpeed.nextInt(100); 
    int WeaponStrengh = randomStrengh.nextInt(350); 
    int WeaponEndurance = randomEndurance.nextInt(350); 
    int weaponCritical = randomCritical.nextInt(350); 
    int weaponWisdom = randomWisdom.nextInt(350); 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     font = new BitmapFont(); 
    } 


    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     font.draw(batch,Prefix[index]+ Name[index1], 0, 300); 
     if(ItemLevel<=101){ 
      rarity = "Common"; 
      font.draw(batch, rarity, 0, 280); 
     } 
     else if(ItemLevel<=251){ 
      rarity = "Uncommon"; 
      font.draw(batch, rarity, 0, 280); 
     } 
     else if(ItemLevel<=401){ 
      rarity = "Rare"; 
      font.draw(batch, rarity, 0, 280); 
     } 
     else if(ItemLevel<=551){ 
      rarity = "Magical"; 
      font.draw(batch, rarity, 0, 280); 
     } 
     else if(ItemLevel<=626){ 
      rarity = "Epic"; 
      font.draw(batch, rarity, 0, 280); 
     } 
     else if(ItemLevel<=736){ 
      rarity = "Unique"; 
      font.draw(batch, rarity, 0, 280); 
     } 
     else if(ItemLevel<=876){ 
      rarity = "Legendary"; 
      font.draw(batch, rarity, 0, 280); 
     } 
     else if(ItemLevel<=1000){ 
      rarity = "Glitched"; 
      font.draw(batch, rarity, 0, 280); 
     } 

     if (rarity == "Common"){ 
      font.setColor(Color.WHITE); 
      } 
      else if(rarity == "Uncommon"){ 
       font.setColor(Color.LIME); 
       } 
      else if(rarity == "Rare"){ 
       font.setColor(Color.BLUE); 
      } 
      else if(rarity == "Magical"){ 
       font.setColor(Color.PURPLE); 
      } 
      else if(rarity == "Epic"){ 
       font.setColor(Color.PINK); 
      } 
      else if(rarity == "Unique"){ 
       font.setColor(Color.YELLOW); 
      } 
      else if(rarity == "Legendary"){ 
       font.setColor(Color.ORANGE); 
      } 
      else if(rarity == "Glitched"){ 
       font.setColor(Color.RED); 
      } 
     font.draw(batch, "ItemLevel: "+ItemLevel, 140, 280); 
     font.draw(batch, ItemType[index2], 0, 260); 
     font.draw(batch, "Damage: "+Damage, 0, 220); 
     font.draw(batch, "Weaponspeed: "+WeaponSpeed, 140, 220); 
     font.draw(batch, "+"+WeaponStrengh+" Strengh", 0, 200); 
     font.draw(batch, "+"+WeaponEndurance+" Endurance", 0, 180); 
     font.draw(batch, "+"+weaponCritical+" Critical Strike", 0, 160); 
     font.draw(batch, "+"+weaponWisdom+" Wisdom", 0, 140); 
     batch.end(); 
    } 

    @Override 
    public void resize(int width, int height) { 
    } 

    @Override 
    public void pause() { 
    } 

    @Override 
    public void resume() { 
    } 

} 
+1

Nur eine Beobachtung - Sie brauchen wirklich nicht 10 verschiedene zufällige Instanzen. Einfach eins machen und es wiederverwenden. –

+0

Zufällige Objekte für Tage ... –

+0

Setzen Sie all Ihre 'random.nextInt() ...' in eine Funktion. Rufen Sie diese Funktion auf, wenn eine Schaltfläche gedrückt wird –

Antwort

1

Wie Sie selbst gesagt, Sie ein Anfänger sind. Also einige Tipps sind in Ordnung. Achten Sie darauf, im Zusammenhang Variable nehmen und trennen sie in Klassen wie folgt:

public class Item 
{ 
    int prefixIndex; 
    int nameIndex; 
    int typeIndex; 
    int itemLevel; 
    int damage; 
    int weaponSpeed; 
    int weaponStrengh; 
    int weaponEndurance; 
    int weaponCritical; 
    int weaponWisdom; 

    String [] Prefix = {"Blunt", "Sharp", "Jagged", "Grandmaster's", 
"Knight's", "Apprentice's","Crude", "Godly", "Flawless", "Barbaric", 
"Horrific", "Hiddeous", "Demonic", "Dull", "Bloody", "Holy", "Engergiced", 
"Fast", "Otherworldly", "Well-Worn", "Elegant","Vigilant", "Surpressing" 
,"Destroying", "Vampiric", "Intimidating"}; 
String [] Name = {" Soulsplitter"," Axe", " Sword", " Spear", " Bow", " 
Longbow", " Staff", " God Eater", " Doomsday Device", " Excalibur", " 
Nature's Call", " Forest Spirit", " Dragon's Breath", " God's Wrath", " 
Buster", " Peace Keeper", " Jackhammer", " Battleaxe", " Emperor's Lance", " 
Tsunami", " Hurricane"}; 
String [] ItemType = {"Axe", "Sword", "Broadsword", "Dagger", 
"Bow","Longbow","Staff","Spear","Hammer"}; 

    public Item(int prefixIndex, int nameIndex, int typeIndex) 
    { 
     this.prefixIndex = prefixIndex; 
     this.nameIndex = nameIndex; 
     this.typeIndex = typeIndex; 
    } 

public int getPrefixIndex() 
{ 
    return prefixIndex; 
} 

public void setPrefixIndex(int prefixIndex) 
{ 
    this.prefixIndex = prefixIndex; 
} 

public int getNameIndex() 
{ 
    return nameIndex; 
} 

public void setNameIndex(int nameIndex) 
{ 
    this.nameIndex = nameIndex; 
} 

public int getTypeIndex() 
{ 
    return typeIndex; 
} 

public void setTypeIndex(int typeIndex) 
{ 
    this.typeIndex = typeIndex; 
} 

public int getItemLevel() 
{ 
    return itemLevel; 
} 

public void setItemLevel(int itemLevel) 
{ 
    this.itemLevel = itemLevel; 
} 

public int getDamage() 
{ 
    return damage; 
} 

public void setDamage(int damage) 
{ 
    this.damage = damage; 
} 

public int getWeaponSpeed() 
{ 
    return weaponSpeed; 
} 

public void setWeaponSpeed(int weaponSpeed) 
{ 
    this.weaponSpeed = weaponSpeed; 
} 

public int getWeaponStrengh() 
{ 
    return weaponStrengh; 
} 

public void setWeaponStrengh(int weaponStrengh) 
{ 
    this.weaponStrengh = weaponStrengh; 
} 

public int getWeaponEndurance() 
{ 
    return weaponEndurance; 
} 

public void setWeaponEndurance(int weaponEndurance) 
{ 
    this.weaponEndurance = weaponEndurance; 
} 

public int getWeaponCritical() 
{ 
    return weaponCritical; 
} 

public void setWeaponCritical(int weaponCritical) 
{ 
    this.weaponCritical = weaponCritical; 
} 

public int getWeaponWisdom() 
{ 
    return weaponWisdom; 
} 

public void setWeaponWisdom(int weaponWisdom) 
{ 
    this.weaponWisdom = weaponWisdom; 
} 
} 

ich persönlich einige Variablen in dieser Klasse nehmen und trennen sie weiter, so dass die Klasse nicht so groß ist. Aber das würde dich wahrscheinlich auf deinem Niveau verwirren. Aber mit dieser Klasse kann ich Ihren Code neu schreiben, wie so:

Oh, und auch ich weiß nicht, wie Libgdx funktioniert so müssen Sie Ihren Rahmen verstehen, zu wissen, wo tatsächlich diesen Code setzen:

public Item generateItem() 
{ 
    Random random = new Random(System.nanoTime()); 
    int prefix = random.nextInt(Item.Prefix.length); 
    int name = random.nextInt(Item.Name.length); 
    int type = random.nextInt(Item.ItemType.length); 

    temp.setItemLevel(random.nextInt(1000)); 
    temp.setDamage(random.nextInt(25000)); 
    temp.setWeaponSpeed(random.nextInt(100)); 
    temp.setWeaponStrengh(random.nextInt(350)); 
    temp.setWeaponEndurance(random.nextInt(350)); 
    temp.setWeaponWisdom(random.nextInt(350)); 
    temp.setWeaponCritical(random.nextInt(350)); 
} 

Dann haben Sie eine Instanzvariable Item generatedItem und wann immer Sie eine neue brauchen, rufen Sie einfach generatedItem = generateItem();

Ich bemerke auch, dass Ihre Camel Gehäuse nicht konsistent war. Einige Felder beginnen mit Großbuchstaben wie Damage und andere nicht. Es hilft Lesbarkeit und allgemeine gute Praxis ist für Variablen/Felder mit Kleinbuchstaben beginnen. Methoden auch und sie sollten im Allgemeinen Verben sein wie erhalten und erzeugen.

Um Ihre Frage so gut wie möglich zu beantworten, müssen Sie die Methode finden, die bei einem Klick auf die Schaltfläche aufgerufen wird. Erzeugen Sie in dieser Methode ein Element und stellen Sie sicher, dass der Renderer einen Verweis auf das neue Element hat.

+0

gepostet vorzeitig halten –

+0

Sie müssen Ihren Code in der Render-Methode ein wenig anpassen, um für die Verwendung der Klasse Item unterzubringen. –

0

Rufen Sie generateRandom() immer dann auf, wenn Sie den Wert per Zufallszahl ändern möchten.

public class XYZ extends ApplicationAdapter { 

     private SpriteBatch batch; 
     private BitmapFont font; 
     Color rarityColor; 
     String rarity; 

     Random random; 

     String [] Prefix,Name,ItemType ; 

     int index,index1,index2,ItemLevel, Damage ,WeaponSpeed,WeaponStrengh ,WeaponEndurance,weaponCritical,weaponWisdom; 

     @Override 
     public void create() { 
      batch = new SpriteBatch(); 
      font = new BitmapFont(); 

      random=new Random(); 

      Prefix = new String[]{"Blunt", "Sharp", "Jagged", "Grandmaster's", "Knight's", "Apprentice's","Crude", "Godly", "Flawless", "Barbaric", "Horrific", "Hiddeous", "Demonic", "Dull", "Bloody", "Holy", "Engergiced", "Fast", "Otherworldly", "Well-Worn", "Elegant","Vigilant", "Surpressing" ,"Destroying", "Vampiric", "Intimidating"}; 
      Name = new String[] {" Soulsplitter"," Axe", " Sword", " Spear", " Bow", " Longbow", " Staff", " God Eater", " Doomsday Device", " Excalibur", " Nature's Call", " Forest Spirit", " Dragon's Breath", " God's Wrath", " Buster", " Peace Keeper", " Jackhammer", " Battleaxe", " Emperor's Lance", " Tsunami", " Hurricane"}; 
      ItemType = new String[]{"Axe", "Sword", "Broadsword", "Dagger", "Bow","Longbow","Staff","Spear","Hammer"}; 

      generateRandom(); 
     } 

     @Override 
     public void render() { 
      Gdx.gl.glClearColor(0, 0, 0, 1); 
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
      batch.begin(); 
      font.draw(batch,Prefix[index]+ Name[index1], 0, 300); 
      if(ItemLevel<=101){ 
       rarity = "Common"; 
       font.draw(batch, rarity, 0, 280); 
      } 
      else if(ItemLevel<=251){ 
       rarity = "Uncommon"; 
       font.draw(batch, rarity, 0, 280); 
      } 
      else if(ItemLevel<=401){ 
       rarity = "Rare"; 
       font.draw(batch, rarity, 0, 280); 
      } 
      else if(ItemLevel<=551){ 
       rarity = "Magical"; 
       font.draw(batch, rarity, 0, 280); 
      } 
      else if(ItemLevel<=626){ 
       rarity = "Epic"; 
       font.draw(batch, rarity, 0, 280); 
      } 
      else if(ItemLevel<=736){ 
       rarity = "Unique"; 
       font.draw(batch, rarity, 0, 280); 
      } 
      else if(ItemLevel<=876){ 
       rarity = "Legendary"; 
       font.draw(batch, rarity, 0, 280); 
      } 
      else if(ItemLevel<=1000){ 
       rarity = "Glitched"; 
       font.draw(batch, rarity, 0, 280); 
      } 

      if (rarity == "Common"){ 
       font.setColor(Color.WHITE); 
      } 
      else if(rarity == "Uncommon"){ 
       font.setColor(Color.LIME); 
      } 
      else if(rarity == "Rare"){ 
       font.setColor(Color.BLUE); 
      } 
      else if(rarity == "Magical"){ 
       font.setColor(Color.PURPLE); 
      } 
      else if(rarity == "Epic"){ 
       font.setColor(Color.PINK); 
      } 
      else if(rarity == "Unique"){ 
       font.setColor(Color.YELLOW); 
      } 
      else if(rarity == "Legendary"){ 
       font.setColor(Color.ORANGE); 
      } 
      else if(rarity == "Glitched"){ 
       font.setColor(Color.RED); 
      } 
      font.draw(batch, "ItemLevel: "+ItemLevel, 140, 280); 
      font.draw(batch, ItemType[index2], 0, 260); 
      font.draw(batch, "Damage: "+Damage, 0, 220); 
      font.draw(batch, "Weaponspeed: "+WeaponSpeed, 140, 220); 
      font.draw(batch, "+"+WeaponStrengh+" Strengh", 0, 200); 
      font.draw(batch, "+"+WeaponEndurance+" Endurance", 0, 180); 
      font.draw(batch, "+"+weaponCritical+" Critical Strike", 0, 160); 
      font.draw(batch, "+"+weaponWisdom+" Wisdom", 0, 140); 
      batch.end(); 
     } 

     public void generateRandom(){ 

      index = random.nextInt(Prefix.length); 
      index1 = random.nextInt(Name.length); 
      index2 = random.nextInt(ItemType.length); 
      ItemLevel = random.nextInt(1000); 
      Damage = random.nextInt(25000); 
      WeaponSpeed = random.nextInt(100); 
      WeaponStrengh = random.nextInt(350); 
      WeaponEndurance = random.nextInt(350); 
      weaponCritical = random.nextInt(350); 
      weaponWisdom = random.nextInt(350); 

     } 

     @Override 
     public void dispose() { 

      font.dispose(); 
      batch.dispose(); 
     } 
} 
Verwandte Themen