2017-03-28 1 views
1

Ich versuche ein Rollenspiel in Java zu machen. Ich bin neu in Java, also verstehe ich nicht alle Dinge. Ich brauche Hilfe, um Klassenauswahlfunktion zu implementieren.Java-Text-basierte Spiel - Wie Klassenwahl Feature zu implementieren?

Hier ist mein Code:

package com.rpg.entities; 

import java.util.Scanner; 

public class Character extends Entity { 

    private int EXP; // experience points 
    private int gold; // player money 
    private double critChance; // critical chance 
    private int strength; // attack damage 
    private int defense; // reduce taken damage 
    private int dexterity; // accuracy only for bow and spells 
    private int intelligence; // spell damage 
    private int evasion; // dodge attacks 
    // armor parts 
    private String helmet; 
    private String chest; 
    private String boots; 

    public void setEXP(int exp) { 
     this.EXP = exp; 
    } 

    public int getEXP() { 
     return EXP; 
    } 

    public void setGold(int gold) { 
     this.gold = gold; 
    } 

    public int getGold() { 
     return gold; 
    } 

    public void setCritChance(int crit) { 
     this.critChance = crit; 
    } 

    public double getCritChance() { 
     return critChance; 
    } 

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

    public int getStrength() { 
     return strength; 
    } 

    public void setDefense(int def) { 
     this.defense = def; 
    } 

    public int getDefense() { 
     return defense; 
    } 

    public void setDexterity(int dex) { 
     this.dexterity = dex; 
    } 

    public int getDexterity() { 
     return dexterity; 
    } 

    public void setIntelligence(int inte) { 
     this.intelligence = inte; 
    } 

    public int getIntelligence() { 
     return intelligence; 
    } 

    public void setEvasion(int eva) { 
     this.evasion = eva; 
    } 

    public int getEvasion() { 
     return evasion; 
    } 

    public void checkLevel(int playerExp, int playerLevel, Character a) { 

     int[] levelArray = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 
       2400, 2600, 2800, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000 }; // 30 

     if (playerExp >= levelArray[playerLevel]) { 
      // level up player 
      if (playerExp >= levelArray[playerLevel + 1]) { 
       a.setEXP(levelArray[playerLevel]); 
      } else { 
       System.out.println("Level up!"); 
       a.setLevel(playerLevel + 1); 
      } 
     } 

    } 

    public String chooseClass() { 

     return ""; 
    } 

} 

I Verfahren für die Wahl Spielerklasse in Zeichenklasse schreiben wollen, dann es in Hauptfunktion nennen, aber ich bin nicht sicher, ob das eine gute Praxis ist. Und auch, ich weiß nicht, sollte es String zurückgeben?

Mit anderen Worten, sollte Klasse Character Methode hat chooseClass() und mit ihm können Sie Klassen wählen, zum Beispiel:

If(name == "warrior") { 
    Warrior player = new Warrior(); 
} else if (name == "mage") { 
    Mage player = new Mage(); 
} else 
    System.out.println("Invalid class"); 

Und dann kehrt Spieler zu Hauptklasse, so dass ich diese Variable dafür verwenden kann, Stoffe wie: player.setHealth(), etc ..

Weitere Klassen:

package com.rpg.classes; 

import com.rpg.entities.Character; 
public class Archer extends Character { 

    public Archer() { 

     this.setMaxHP(100); 
     this.setHP(100); 
     this.setMaxMP(100); 
     this.setMP(100); 
     this.setLevel(1); 
     this.setDamage(10); // 
     this.setGold(0); 
     this.setCritChance(0); 
     this.setStrength(0); 
     this.setDefense(0); 
     this.setDexterity(10); 
     this.setIntelligence(0); 
     this.setEvasion(0); 
     this.setEXP(100); 
    } 

} 

package com.rpg.classes; 

import com.rpg.entities.Character; 

public class Mage extends Character { 

    public Mage() { 

     this.setMaxHP(100); 
     this.setHP(100); 
     this.setMaxMP(100); 
     this.setMP(100); 
     this.setLevel(1); 
     this.setDamage(10); // popravi posle 
     this.setGold(0); 
     this.setCritChance(0); // dodaj mehanizam 
     this.setStrength(0); 
     this.setDefense(0); 
     this.setDexterity(0); 
     this.setIntelligence(10); 
     this.setEvasion(0); 
     this.setEXP(100); 

    } 

} 
+0

Hilfe mit was speziell? Dies ist viel zu weit gefasst, und Sie haben noch nicht einmal eine Spezifikation angegeben, was das "Class-Choice-Feature" beinhalten sollte. – Carcigenicate

+0

Ich konnte nicht genau verstehen, was Sie wollen, aber Sie können switch/case verwenden und String zurückgeben, hängt von der Benutzerauswahl ab. –

+0

Ich möchte eine Methode in der Klasse Character haben und wenn der Benutzer die Option 1 auswählt, wird er die Warriro-Klasse auswählen und die Instanz der Krieger-Klasse erstellen und an die Hauptstelle zurückgeben, damit ich sie benutzen kann. –

Antwort

0

nicht sicher, was Sie benötigen. Aber in Ihrer Hauptmethode haben Sie eine Möglichkeit, vom Benutzer den gewünschten Char-Typ abzurufen. Dazu z. B. Ich habe Magier angenommen. Also, wenn es ein Magier initalise mit Magiern, etc

Character character; 
    String char_type = "Mage"; 
    switch(char_type){  
     case "Mage":  
      character = new Mage(); 
      break; 
     case "Archer":  
      character = new Archer(); 
      break; 
    } 

ich diese Hilfe hoffen, oder gibt Ihnen eine Vorstellung.

EDITED: aus irgendeinem Grund fehlgeschlagen ich alle Ihre Beschreibung

I Verfahren für die Wahl Spielerklasse in Zeichen Klasse schreiben wollen zu lesen, dann ist es in Hauptfunktion zu nennen, aber ich bin nicht sicher, ob das ist gute Praxis. Und ich weiß auch nicht ob es String zurückgeben soll.

Mit anderen Worten, sollte Klasse Character Methode haben chooseClass() und damit Sie Klassen wählen können, zum Beispiel:

If(name == "warrior") { 
    Warrior player = new Warrior(); 
} else if (name == "mage") { 
    Mage player = new Mage(); 
} else 
    System.out.println("Invalid class"); 

Und dann kehrt Spieler zu Hauptklasse, so dass ich diese Variable für verwenden können tun Stoffe wie: player.setHealth(), etc ..

//public Static Character chooseClass() { 
public Character chooseClass() { //you might need to make this method static. not too sure 
    String char_type = "Mage"; //you would get the player they want using Scanner i think it is. 
    switch(char_type){  
     case "Mage":  
      return new Mage(); 
     case "Archer":  
      return new Archer(); 
     default: 
      System.out.println("Error that play doesnt exist!") 
    } 
    return null; 
} 

dann in der Hauptmethode, die Sie so etwas wie dieses haben würde.

public static void main(String[] args){ 
    Character player = Character.chooseClass(); 
    player.setHealth(100); 
} 
+0

Vielen Dank! Es klappt. Ich werde nur diesen Code ändern und das war's. :) –

0

Für mich sieht es so aus, als ob alle Zeichenklassen die gleichen Attribute und das gleiche Verhalten mit unterschiedlichen Anfangswerte haben.

Ich würde über ein Enum denken, das die Klasse und eine Fabrik darstellt, die Zeichen für Klasse erstellt. Die Fabrik könnte einige Prototypen aus einer Singleton-Karte klonen, aus Ressourcen wie JSON deserialisieren oder einfach mit benutzerdefiniertem Code initialisieren.

Bei der Initialisierung des benutzerdefinierten Codes wird normalerweise das Zeichen erstellt, allgemeine Attribute wie "level" und "gold" festgelegt und möglicherweise die speziellen Attribute in einem Switch nach Klasse überschrieben.

Ich weiß, dass dies nicht die beste Übung ist, aber es würde den Code einfach halten und das "Hässliche" in der Fabrik verstecken. Und es bleibt flexibel, wenn Sie später mehr Funktionen auf höherem Niveau durchführen möchten.

Sie sollten das Klassenaufzählungsattribut endgültig machen und einige Setter nicht öffentlich machen, insbesondere für die klassenspezifischen Attribute, um konsistente Zeicheninstanzen sicherzustellen.

Denken Sie darüber nach, wo Sie die Attributänderungsverantwortung festlegen können. In der Figur oder draußen, vielleicht in der Fabrik von oben. Da dein Charakter momentan eher wie ein POJO aussieht, würde ich es vermeiden, zu viel Logik in einen gemischten Typ zu bringen.

Da ich keine Ahnung über Sie Vision Ihres Spiels habe, kann ich nur einige Gedanken und Ideen geben. Es gibt keinen Weg, es kommt darauf an.

+0

Hey, danke für deine Antwort und Meinung. Mein Spiel ist in einem frühen Stadium und ich habe nicht alle Attribute, Fähigkeiten, etc. hinzugefügt. Ich möchte einige grundlegende Funktionen haben, danach werde ich mehr Sachen hinzufügen. Ich bin noch neu, also kenne ich keinen guten Teil von Java, aber ich lerne jeden Tag .. Ich kodiere dieses Spiel, so kann ich mich Wissen üben, und es gibt keinen Sinn zu diesem Spiel. Ich mag RPG-Spiele, also wähle ich diese Art von Projekt zu üben. –

Verwandte Themen