Arenagame

P

Panda9296

Bekanntes Mitglied
Hi ich bin´s wieder=). Ich habe mein Arenaspiel erweitert (was auch immer mehr erweitert wird) und da hab ich ein paar Probleme die ich nicht verstehe.
1.Problem: in der klasse arena wird die Methode explainStringOne(); nicht aufgerufen obwohl sie in der Sequenz steht und auch kein Fehler angezeigt wird.
2. Problem: bei der Heldenerstellung, ebenfalls in der klasse Arena, wird die Heldenerstellung irgendwie 2x ausgeführt; what the fuck?


Da es paar Klassen sind, habe ich das Projekt einfach mal für euch auf Github verfügbar gemacht ich werde trotzdem die betroffene Klasse posten:


Code:
package de.arenakampf.miguel.java;

/*
* 26.05.20
* @author Miguel Gutierrez
*/
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JOptionPane;

public class Arena {
   
   
    private ArrayList<Warrior>enemys= new ArrayList<Warrior>();
    private Warrior player;
   
    //addPlayer
    public Warrior addWarrior()
    {
        int points = 50;
        String name = JOptionPane.showInputDialog("Wie soll Ihr Held heißen?");
        explainStringOne();
       
        String healthString=JOptionPane.showInputDialog("Sie haben noch "+points+" Punkte."+" Wie viele Punkte wollen sie "
                                                       + " in zusätzliches Leben investieren?");
        int health = Integer.parseInt(healthString);
        points = points- health;
        if(points>0)
        {
        health= health *50;
        }else {
            warningStringMenuarena();
        }
        String strengthString=JOptionPane.showInputDialog("Sie haben noch "+points+" Punkte."+" Wie viele Punkte wollen sie "
                                                          + "in zusätzliche Stärke investieren?");
        int strength= Integer.parseInt(strengthString);
        points = points- strength;
        if(points>0)
        {
            strength= strength*50;
        }
        else
        {
            warningStringMenuarena();
        }
        String skillString=JOptionPane.showInputDialog("Sie haben noch "+points+" Punkte."+" Wie viele Punkte wollen sie "
                                                      + "in zusätzliche Skill investieren?");
        int skill = Integer.parseInt(skillString);
        points = points- skill;
        //Points der Werte wurden verteilt
        if(points==0)
        {
            return new Warrior(name, health, strength, skill,null, null);//Baustelle
        }
        else {
            warningStringMenuarena();
        }
       
        return player;
       
        }
        //add enemys
        public void addEnemy()
        {
            for(int i =0; i<4;i++)
            {
                this.enemys.add(new Warrior("Andi"+i,i*100,i*3,i*3, null, null));//behind
            }
        }
        public Warrior combad(Warrior player,Warrior enemy)
        {
            while(player.getHealth()>0&&enemy.getHealth()>0)
            {
                this.firsthitother(player, enemy);
                if(enemy.getHealth()>0)
                {
                    this.firsthitother(enemy, player);
                }
            }
            if(player.getHealth()>0)
            {
                return player;
            }
            return enemy;
        }
        private void firsthitother(Warrior player,Warrior enemy)
        {
            System.out.println(player.getName()+"haut zu.\n");
            int damage = enemy.getDamage(player.damage());
            firstHitOtherToString(player, enemy, damage);
           
        }
        public void meeting()
        {
            this.player=this.addWarrior();
            this.addEnemy();
            while(player.getHealth()>0&&enemys.size()>0)
            {
                Warrior challenger= this.enemys.get(0);
                Warrior winner = this.combad(player,challenger);
                if(this.player.equals(winner))
                {
                    this.enemys.remove(0);
                }
                if(this.player.getHealth()>0)
                {
                    System.out.println("Sie haben gewonnen!");
                }
                else
                {
                    System.out.println("Verlierer!");
                }
                   
            }
        }
        public String explainStringOne()
        {
            return "Dein Held hat grundsätzlich 50 Leben, 50 Stärke, 50 Skill"
                  +"Wenn du also einen Punkt in Stärke setzt, wird der"
                  +"Standardwert 50 mit 2 multipliziert, was zu einem finalen Ausgangswert führt.";
        }
        public String warningStringMenuarena()
        {
            return "Deine Punkte wurden nicht richtig verteilt. Versuche es nochmal";
        }
        public String firstHitOtherToString(Warrior player,Warrior enemy,int damage) {
            return enemy.getName()+"verliert "+damage+" Punkte."+ player.getName()+" hat "+ player.getHealth()+" Punkte."
                    +enemy.getName()+" hat noch "+enemy.getHealth()+" Punkte.";
        }
}



package de.arenakampf.miguel.java;

import javax.swing.JOptionPane;

/*
* 26.05.20
* @author Miguel Gutierrez
*
*/


public class Warrior extends TemplateWarrior {

    public Warrior(String name,int health,int strength,int skill, Armor[]armor,Weapon[]weapon)
    {
        super(name,health,strength,skill,armor,weapon);
    }
   
 
    @Override
    public void addArmor(Armor[]amor, int input)
   {
       getArmorString();
       getHelmetString();
     
       String inputString = JOptionPane.showInputDialog("Auswahl für Kopfteil" );
       int inputInt = Integer.parseInt(inputString);
       switch(inputInt)
       {
       case 1: armor[0]= Helmet.blackHelmet;break;
       case 2: armor[0]=Helmet.blueHelmet;break;                             //helmet
       case 3: armor[0]=Helmet.yellowHelmet;break;
       }
       getArmorString();
       getShoulderProtectionString();
       inputString= JOptionPane.showInputDialog("Auswahl für Schulterschutz:");
       inputInt = Integer.parseInt(inputString);
     
       switch(inputInt)
       {
       case 1: armor[1]=ShoulderProtection.blackShoulder;break;
       case 2: armor[1]=ShoulderProtection.blueShoulder;break;
       case 3: armor[1]=ShoulderProtection.yellowShoulder;break;
       }
       getArmorString();
       getChestProtectionString();
       inputString= JOptionPane.showInputDialog("Auswahl für Brustschutz:");
       inputInt = Integer.parseInt(inputString);
     
       switch(inputInt)
       {
       case 1: armor[2]=ChestProtection.blackChestProtection;break;
       case 2: armor[2]=ChestProtection.blueChestProtection;break;
       case 3: armor[2]=ChestProtection.yellowChestProtection;break;
       }
       getArmorString();
       FoodProtectionString();
     
       inputString= JOptionPane.showInputDialog("//Auswahl für Stiefel:");
       inputInt = Integer.parseInt(inputString);
     
       switch(inputInt)
       {
       case 1: armor[3]=FootProtection.blackFootProtection;break;
       case 2: armor[3]=FootProtection.blueFoodProtection;break;
       case 3: armor[3]=FootProtection.yellowFoodProtection;break;
       }
       getArmorString();
       LegProtectionString();
     
       inputString= JOptionPane.showInputDialog("Auswahl für Beinschutz:");
       inputInt = Integer.parseInt(inputString);
     
       switch(inputInt)
       {
       case 1: armor[4]=LegProtection.blackLegProtection;break;
       case 2: armor[4]=LegProtection.blueLegProtection;break;
       case 3: armor[4]=LegProtection.yellowLegProtection;break;
       }
       getArmorString();
       getBracersString();
     
       inputString= JOptionPane.showInputDialog("Auswahl für Armschienen:");
       inputInt = Integer.parseInt(inputString);
     
       switch(inputInt)
       {
       case 1: armor[5]=Bracers.blackBracers;break;
       case 2: armor[5]=Bracers.blueBracers;break;
       case 3: armor[5]=Bracers.yellowBracers;break;
       }      
   }
    @Override
    public void addWeapon(Weapon[]weopen,int input)
    {
       getWeaponString();
       getSwortString();
       String inputString= JOptionPane.showInputDialog("Auswahl für die Waffe:");
        int inputInt = Integer.parseInt(inputString);
       
        switch(inputInt)
        {
        case 1: weapon[0]=Swort.blackSwort;break;
        case 2: weapon[0]=Swort.blueSwort;break;
        case 3: weapon[0]=Swort.yellowSwort;break;
        }
        getWeaponString();
        getShieldString();
       inputString= JOptionPane.showInputDialog("Auswahl für das Schild:");
       inputInt = Integer.parseInt(inputString);
     
       switch(inputInt)
       {
       case 1: weapon[1]=Shield.blackShield;break;
       case 2: weapon[1]=Shield.blueShield;break;
       case 3: weapon[1]=Shield.yellowShield;break;
       }
    }
 
    //Getter and Setter
    public Weapon[] getWeapon() {
        return weapon;
    }
    public Weapon[]setWeapon(){
        return weapon;
    }
    public Armor[]getArmor() {
        return armor;
    }
    public void setArmor(Armor[]armor) {
        this.armor = armor;
    }
    public static String getArmorString()
    {
        return ("Sie sind im Rüstungsmenü. Sie haben genau 6 Slots. ##|1.Slot: Kopf|2.Slot: Schulter"
                + "|3.Slot: Brust|4.Slot: Füße|5.Slot: Beine|6.Slot: Armschienen|");
    }
    public static String getWeaponString()
    {
        return "Sie sind im Waffenmenü. Sie haben genau zwei Slots für Schild und Schwert.1.Slot:Schwert|2.Slot:Schild|## ";
    }
    public static String getHelmetString()
    {
        return "Rüstungsmenü Kopf: Sie haben 3 verschieden Kopfteile zur Auswahl:"
              +"1.Rüstungsteil:  -Health|- Stärke|-skill"
              +"2.Rüstungsteil:  -Health|- Stärke|-skill"
              +"3.Rüstungsteil:  -Health|- Stärke|-skill";
    }
    public static String getShoulderProtectionString()
    {
        return "Rüstungsmenü Schulter: Sie haben 3 verschieden Schulterteile zur Auswahl:"
              +"1.Rüstungsteil:  -Health|- Stärke|-skill"
              +"2.Rüstungsteil:  -Health|- Stärke|-skill"
              +"3.Rüstungsteil:  -Health|- Stärke|-skill";
    }
    public static String getChestProtectionString()
    {
        return "Rüstungsmenü Brustschutz: Sie haben 3 verschieden Brustschutz zur Auswahl:"
              +"1.Rüstungsteil:  -Health|- Stärke|-skill"
              +"2.Rüstungsteil:  -Health|- Stärke|-skill"
              +"3.Rüstungsteil:  -Health|- Stärke|-skill";
    }
    public static String FoodProtectionString()
    {
        return "Rüstungsmenü Stiefelteile: Sie haben 3 verschieden Stiefelteile zur Auswahl:"
              +"1.Rüstungsteil:  -Health|- Stärke|-skill"
              +"2.Rüstungsteil:  -Health|- Stärke|-skill"
              +"3.Rüstungsteil:  -Health|- Stärke|-skill";
    }
    public static String LegProtectionString()
    {
        return "Rüstungsmenü Beinschutz: Sie haben 3 verschieden Beinschutzteile zur Auswahl:"
              +"1.Rüstungsteil:  -Health|- Stärke|-skill"
              +"2.Rüstungsteil:  -Health|- Stärke|-skill"
              +"3.Rüstungsteil:  -Health|- Stärke|-skill";
    }
    public static String getBracersString()
    {
        return "Rüstungsmenü Armschienen: Sie haben 3 verschieden Armschienen zur Auswahl:"
              +"1.Rüstungsteil:  -Health|- Stärke|-skill"
              +"2.Rüstungsteil:  -Health|- Stärke|-skill"
              +"3.Rüstungsteil:  -Health|- Stärke|-skill";
    }
    public static String getSwortString()
    {
        return  "Rüstungsmenü Waffen: Sie haben 3 verschiedene Waffen zur Auswahl:"
               +"1.Waffe:  -Health|- Stärke|-skill"
               +"2.Waffe:  -Health|- Stärke|-skill"
               +"3.Waffe:  -Health|- Stärke|-skill";
    }
    public static String getShieldString()
    {
        return  "Rüstungsmenü Waffen: Sie haben 3 verschiedene Schilde zur Auswahl:"
                   +"1.Schild:  -Health|- Stärke|-skill"
                   +"2.Schild:  -Health|- Stärke|-skill"
                   +"3.Schild:  -Health|- Stärke|-skill";
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getStrength() {
        return strength;
    }

    public void setStrength(int strength) {
        this.strength = strength;
    }

    public int getSkill() {
        return skill;
    }

    public void setSkill(int skill) {
        this.skill = skill;
    }
    //corefunction
    public int damage()
    {
        return strength=strength*skill;
    }
    public int getDamage(int damage)
    {
        return health=health-damage;
    }

}



package de.arenakampf.miguel.java;

public abstract class TemplateWarrior {

    String name;
    int health;
    int strength;
    int skill;
    Armor[] armor=new Armor[6];//
    Weapon[]weapon=new Weapon[2];
   
   

    public TemplateWarrior(String name,int health,int strength,int skill, Armor[]armor,Weapon[]weapon)
    {
       
        this.name = name;
        this.health = health;
        this.strength = strength;
        this.skill = skill;
        this.armor = armor;
        this.weapon=weapon;
    }
    abstract public void addArmor(Armor[] amor, int input);
    abstract public void addWeapon(Weapon[]weopen,int input);
    abstract public Weapon[] getWeapon();
    abstract public Weapon[]setWeapon();
    abstract public Armor[] getArmor();
    abstract public void setArmor(Armor[] armor);
    abstract public String getName();
    abstract public void setName(String name);
    abstract public int getHealth();
    abstract public void setHealth(int health);
    abstract public int getStrength();
    abstract public void setStrength(int strength);
    abstract public int getSkill();
    abstract public void setSkill(int skill);
    abstract public int damage();
    abstract public int getDamage(int damage);
   
}


package de.arenakampf.miguel.java;

public class ShadowWizard extends Warrior{

    public ShadowWizard(String name, int health, int strength, int skill, Armor[] armor, Weapon[] weapon) {
        super(name, health, strength, skill, armor, weapon);
    }
    @Override
    public int damage()
    {
     return super.strength=((super.strength*skill)/2);
    }
    public int healthByDamage()
    {
     return super.health= super.strength/5;
    }
    @Override
    public int getDamage(int damage)
    {
     return super.health=(super.health-damage)*3;
    }

   


   

}



package de.arenakampf.miguel.java;

public enum Shield implements Weapon
{
    blackShield("Schwarzer Schild",8,8,8),
    blueShield("Blauer Schild",8,8,8),
    yellowShield("gelber Schild",8,8,8);
   
    private String name;
    private int health;
    private int strength;
    private int skill;
   
    Shield(String name, int health, int strength, int skill)
    {
        this.name=name;
        this.health=health;
        this.strength=strength;
        this.skill=skill;
    }

    @Override
    public String getName(String name)
    {
        return name;
    }

    @Override
    public int getHealth(int health)
    {
        return health;
    }

    @Override
    public int getStrength(int strength)
    {
        return strength;
    }

    @Override
    public int getSkill(int skill)
    {
        return skill;
    }

}
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
1.Problem: in der klasse arena wird die Methode explainStringOne(); nicht aufgerufen obwohl sie in der Sequenz steht und auch kein Fehler angezeigt wird.
Ich habe dein Projekt geclont, die Methode gibt es in deinem Projekt nicht. Oben in deinen Klassen sehe ich sie. Was ist nun richtig?

Darüber hinaus habe ich u.a. folgende Verbesserungsvorschläge:
Java:
// Warrior im 2. Diamant kannst du entfernen
private ArrayList<Warrior>enemys= new ArrayList<>();

// wird nicht genutzt. Du gibst Ausgaben auf der Konsole, aber liest Eingaben mit der JOptionPane
// Du solltest dich für ein Medium entscheiden, aus meiner Sicht eher Konsole only
Scanner sc= new Scanner(System.in);

// persönlich finde ich diese Schreibweise leserlicher
points -= health;
health *= 50;
strength *= 50;

// aktuell returned diese Methode einen Warrior, aber der Rückgabewert wird nicht verwendet
hobbit.addWarrior();

// compat statt combad
public Warrior combat(Warrior player, Warrior enemy)

// wieso haben die getter einen Parameter? Bitte entfernen...
public int getHealth(int health);
public int getStrength(int strength);
public int getSkill(int skill);

// statt diesen Switches könntest du mit Indexen arbeiten armor[0] = Helmet.values()[inputInt]
switch(inputInt) {
case 1: armor[0]= Helmet.blackHelmet;break;
case 2: armor[0]=Helmet.blueHelmet;break;
case 3: armor[0]=Helmet.yellowHelmet;break;
}

// du könntest für diese Ausgaben auch mit values iterieren, toString Methode bei enum wäre sicher praktisch
System.out.println("1.R�stungsteil:  -Health|- St�rke|-skill");
System.out.println("2.R�stungsteil:  -Health|- St�rke|-skill");
System.out.println("3.R�stungsteil:  -Health|- St�rke|-skill");

// Diese Methode sind nicht gut. Mach lieber eine class TextConstants und definiere dort alle Texte als statische Felder
public static String getWeaponString()
    {
        return "Sie sind im Waffenmenü. Sie haben genau zwei Slots für Schild und Schwert.1.Slot:Schwert|2.Slot:Schild|## ";
    }
 
Zuletzt bearbeitet:
P

Panda9296

Bekanntes Mitglied
sry tut mir leid github hat was nicht geladen... es ist das richtig was im Forum ist sry wollte es besser für euch machen ging wohl nach hinten los
 
L

LimDul

Top Contributor
Die Methode wird schon aufgerufen. Die gibt einen String zurück mit dem nix gemacht wird. Sprich, die Methode hat keinerlei sichtbaren Auswirkungen. Vermutlich möchtest du den string ausgaben - dann müsstest du System.out.println(explainOneString()); schreiben.
 
P

Panda9296

Bekanntes Mitglied
ja es so ich möchte schon eine Oberfläche machen und ich bin gerade dabei zu lernen wo der String dann dran muss ich schaue mir das Problem seit drei Stunden an^^. Ich bin schon total bekloppt. Kann es sein, dass ich einfach einen Gui erstellen muss der ein frame für den prozess hat und ich dann einfach diesen string an ein Label hängen muss oder so? Sonst kann ich mir eigentlich nix mehr vorstellen wie es sonst gehen soll^^ im Rahmen von OOP.
 
Anzeige

Neue Themen


Oben