-1

My code opens a window where the stats of a Rpg-like Item are shown, which were randomly generated, now my problem is, that I don't know how to make it so it generates a new Item after you press a button. I'm using the libgdx framework. When it comes to coding, I'm a bloody rookie, and this is pretty much my first application. Here's my code:

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() {  
    }

}
smac89
  • 39,374
  • 15
  • 132
  • 179

2 Answers2

1

As you said yourself, you are a rookie. So some tips are in order. Make sure you take related variable and separate them into classes like so:

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;
}
}

I personally would take some variables in this class and separate them further so that the class isn't so large. But that would probably begin to confuse you at your level. But using this class I can rewrite your code like so:

Oh and also I don't know how libgdx works so you will need to understand your framework to know where to actually put this code:

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));
}

then have an instance variable Item generatedItem and whenever you need a new one just call generatedItem = generateItem();

I also notice your camel casing wasn't consistent. Some fields start with capitals like Damage and others don't. It helps readability and general good practice is for variables/fields to start with lowercase letters. Methods too and they generally should be verbs like get and generate.

To answer your question as best I can, you need to find the method that is called on a button click. In that method have an item generated and make sure the renderer has a reference to the new item.

Fat_Llama
  • 65
  • 10
0

Call generateRandom() whenever you want to change value by random number.

 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();
      } 
}
Abhishek Aryan
  • 19,936
  • 8
  • 46
  • 65