Java静态/非静态方法
我开始着手我的第一个java项目,这是一个基本的RPG,我有一个关于咒语的问题。我有一个名为Java静态/非静态方法,java,methods,Java,Methods,我开始着手我的第一个java项目,这是一个基本的RPG,我有一个关于咒语的问题。我有一个名为Character的抽象类,它由一些子类(如Fighter,Mage等)扩展。只有施法者才能施法。关于法术-我有一个名为Spell的类来描述一个法术(它的名称、效果、法力等等)。所有法术都存储在法术列表类中,该类具有法术列表列表(类法术的对象)。我有一个效果类(很有可能它会成为一个界面),它有一些效果,比如“伤害”和“治疗”,但我暂时不使用它,我只想测试一下我的效果 我的问题是,Mage的方法addToS
Character
的抽象类,它由一些子类(如Fighter
,Mage
等)扩展。只有施法者才能施法。关于法术-我有一个名为Spell
的类来描述一个法术(它的名称、效果、法力等等)。所有法术都存储在法术列表
类中,该类具有法术列表
列表(类法术
的对象)。我有一个效果
类(很有可能它会成为一个界面),它有一些效果,比如“伤害”和“治疗”,但我暂时不使用它,我只想测试一下我的效果
我的问题是,Mage
的方法addToSpellBook
和showSpellBook
给出了一个编译器错误:java找不到symbol:method addtoseplbook,location:variable hero of type Game.Character
。同样适用于showSpellBook
。为什么以及如何修复它?
(问题可能出在法师
/法术
/法术列表
类中,而不是字符
长,因此不那么可怕:)
公共类游戏{
公共静态void main(字符串[]args)引发IOException{
CharacterCreator heroCreator=新的CharacterCreator();
CharacterCreator.showAllClasses();
扫描仪sc=新的扫描仪(System.in);
int scan=sc.nextInt();
字符串chosenClass=CharacterCreator.getCharacterClass(扫描);
角色英雄=CharacterCreator.createCharacter(chosenClass);
试一试{
hero.displayCharacter();
}捕获(例外e){
System.out.println(“错误输入”);
}
if(hero.getCharacterClass().equals(“Mage”)){
英雄。AddToSpillbook(“火球”);
英雄。showSpellBook();
}
}
}
公共类角色创建者{
公共静态字符createCharacter(字符串chosenClass){
角色英雄=空;
System.out.println(“选择名称:”);
扫描仪名称in=新扫描仪(System.in);
String name=nameIn.next();
开关(chosenClass){
案例“战斗机”:
返回新战斗机(名称);
“流氓”案:
返回新盗贼(姓名);
案例“法师”:
返回新法师(姓名);
“神职人员”一案:
返回新牧师(姓名);
案例“def”:
System.out.println(“错误输入”);
返回null;
违约:
返回null;
}
}
公共静态void showAllClasses(){
System.out.println(“选择一个字符:”);
System.out.println(“1.Fighter”);
System.out.println(“2.Rogue”);
System.out.println(“3.Mage”);
System.out.println(“4.Cleric”);
}
公共静态字符串getCharacterClass(整型扫描){
字符串分类;
开关(扫描){
案例1:
classIn=“战斗机”;
打破
案例2:
classIn=“流氓”;
打破
案例3:
classIn=“法师”;
打破
案例4:
classIn=“牧师”;
打破
违约:
System.out.println(“再次输入”);
classIn=“def”;
}
返回类;
}
}
抽象公共类特征{
私有字符串名称;
私有字符串字符类;
私有整数级;
私人int hp;
私营企业;
私家军械库;
私有长xp;
/*私人智力BAB;/*基础攻击加成*/
私人综合实力;
私人宪法;
私人智能;
私人情报;
私人智慧;
个人魅力;
受保护字符(字符串名称){
集合名(名称);
setCharacterClass(“类”);
设定水平(1);
强度(10);
宪法(10);
坐位灵活性(10);
setIntelligence(10);
智慧(10);
人格魅力(10);
setHp(0);
setCurrentHp(getHp());
setArmorClass(10);
setXp(0);
}
void displayCharacter()引发IOException{
系统输出打印(“\n\n\n”);
System.out.println(“Name:+getName());
System.out.println(“类:+getCharacterClass());
System.out.println(“级别:+getLevel());
System.out.println(“HP:+getHp());
System.out.println(“当前HP:+getCurrentHp());
System.out.println(“装甲等级:+getArmorClass());
System.out.println(“*******************”);
System.out.println(“属性:”);
System.out.println(“强度:+getStrength());
System.out.println(“构成:+getConstitution());
System.out.println(“灵巧:+getdextrity());
System.out.println(“Intelligence:+getIntelligence());
System.out.println(“智慧:+getWisset());
System.out.println(“Charisma:+getCharisma());
System.out.println(“*******************”);
System.out.println(“XP:+getXp());
}
公共整数getModifier(整数编号){
整数模=(整数)((数字-10)/2);
返回模式;
}
公共字符串getName(){return name;}
公共字符串getCharacterClass(){return characterClass;}
public int getLevel(){return level;}
public int getHp(){return hp;}
public int getCurrentHp(){return currentHp;}
public int getArmorClass(){return armorClass;}
public int getStrength(){return strength;}
public int getConstruction(){返回Construction;}
public int getDexterty(){return dexterty;}
public int getIntelligence(){return intelligence;}
public int getWisset(){return wisset;}
public int getCharisma(){return charisma;}
公共长getXp(){return xp;}
受保护的无效集合名(字符串名){Name=Name;}
受保护的无效setCharacterClass(String characterClass){this.characterClass
public class Game {
public static void main(String[] args) throws IOException {
CharacterCreator heroCreator = new CharacterCreator();
CharacterCreator.showAllClasses();
Scanner sc = new Scanner(System.in);
int scan = sc.nextInt();
String chosenClass = CharacterCreator.getCharacterClass(scan);
Character hero = CharacterCreator.createCharacter(chosenClass);
try {
hero.displayCharacter();
}catch (Exception e){
System.out.println("Wrong input");
}
if (hero.getCharacterClass().equals("Mage")){
hero.addToSpellBook("Fireball");
hero.showSpellBook();
}
}
}
public class CharacterCreator {
public static Character createCharacter(String chosenClass) {
Character hero = null;
System.out.println("Choose Name:");
Scanner nameIn = new Scanner(System.in);
String name = nameIn.next();
switch (chosenClass) {
case "Fighter":
return new Fighter(name);
case "Rogue":
return new Rogue(name);
case "Mage":
return new Mage(name);
case "Cleric":
return new Cleric(name);
case "def":
System.out.println("Wrong input");
return null;
default:
return null;
}
}
public static void showAllClasses(){
System.out.println("Choose a character: ");
System.out.println("1. Fighter");
System.out.println("2. Rogue");
System.out.println("3. Mage");
System.out.println("4. Cleric");
}
public static String getCharacterClass(int scan){
String classIn;
switch (scan) {
case 1:
classIn = "Fighter";
break;
case 2:
classIn = "Rogue";
break;
case 3:
classIn = "Mage";
break;
case 4:
classIn = "Cleric";
break;
default:
System.out.println("Enter again");
classIn = "def";
}
return classIn;
}
}
abstract public class Character {
private String name;
private String characterClass;
private int level;
private int hp;
private int currentHp;
private int armorClass;
private long xp;
/*private int BAB; /*Base attack bonus*/
private int strength;
private int constitution;
private int dexterity;
private int intelligence;
private int wisdom;
private int charisma;
protected Character(String name){
setName(name);
setCharacterClass("Class");
setLevel(1);
setStrength(10);
setConstitution(10);
setDexterity(10);
setIntelligence(10);
setWisdom(10);
setCharisma(10);
setHp(0);
setCurrentHp(getHp());
setArmorClass(10);
setXp(0);
}
void displayCharacter() throws IOException{
System.out.print("\n\n\n");
System.out.println("Name: " + getName());
System.out.println("Class: " + getCharacterClass());
System.out.println("Level: " + getLevel());
System.out.println("HP: " + getHp());
System.out.println("Current HP: " + getCurrentHp());
System.out.println("Armor Class: " + getArmorClass());
System.out.println("***************");
System.out.println("Attributes: ");
System.out.println("Strength: " + getStrength());
System.out.println("Constitution: " + getConstitution());
System.out.println("Dexterity: " + getDexterity());
System.out.println("Intelligence: " + getIntelligence());
System.out.println("Wisdom: " + getWisdom());
System.out.println("Charisma: " + getCharisma());
System.out.println("***************");
System.out.println("XP: " + getXp());
}
public int getModifier(int number){
int mod = (int)((number -10)/2);
return mod;
}
public String getName() { return name; }
public String getCharacterClass() { return characterClass; }
public int getLevel() { return level; }
public int getHp() { return hp; }
public int getCurrentHp() { return currentHp; }
public int getArmorClass() { return armorClass; }
public int getStrength(){ return strength; }
public int getConstitution(){ return constitution; }
public int getDexterity(){ return dexterity; }
public int getIntelligence(){ return intelligence; }
public int getWisdom(){ return wisdom; }
public int getCharisma(){ return charisma;}
public long getXp(){ return xp;}
protected void setName(String Name) { name = Name; }
protected void setCharacterClass(String characterClass) { this.characterClass = characterClass; }
protected void setLevel(int lvl){ level = lvl; }
protected void setHp(int hitPoints){ hp = hitPoints; }
protected void setCurrentHp(int curHp){ currentHp = curHp; }
protected void setArmorClass(int ac){ armorClass = ac; }
protected void setStrength(int str){ strength = str; }
protected void setConstitution(int con){ constitution = con; }
protected void setDexterity( int dex) { dexterity = dex; }
protected void setIntelligence(int intel){ intelligence = intel; }
protected void setWisdom(int wis){ wisdom = wis; }
protected void setCharisma(int cha){charisma = cha; }
protected void setXp(int XP){xp = XP; }
}
public class Mage extends Character {
private List<Spell> spellBook;
public Mage(String name){
super(name);
setName(name);
setCharacterClass("Mage");
setLevel(1);
setStrength(10);
setConstitution(10);
setDexterity(14);
setIntelligence(16);
setWisdom(14);
setCharisma(10);
setHp((int) (4 + getModifier(getConstitution())));
setCurrentHp(getHp());
setArmorClass(10 + getModifier(getDexterity()));
spellBook = null;
}
void addToSpellBook(String spellName){
Spell newSpell;
newSpell = SpellsList.getSpell(spellName);
spellBook.add(newSpell);
}
void showSpellBook(){
for (Iterator<Spell> iter = spellBook.iterator(); iter.hasNext(); ) {
Spell spell = iter.next();
if (spellBook.equals(spell.getSpellName())) {
System.out.println("Spell name: " + spell.getSpellName());
System.out.println("Spell effect: " + spell.getEffect());
}
}
}
}
public class Spell {
private String name;
private int spellLevel;
private String effect;
private int manaCost;
private int duration;
Spell(String name, int spellLevel, String effect, int manaCost, int duration){
this.name = name;
this.spellLevel = spellLevel;
this.effect = effect;
this.manaCost = manaCost;
this.duration= duration;
}
void castSpell(String spellName, Character hero, Character target){
try {
Spell spell = SpellsList.getSpell(spellName);
System.out.println("You casted: " + spellName);
System.out.println("Spell effect: " + spell.effect);
}
catch (Exception e){
System.out.println("No such spell");
}
}
String getSpellName(){ return name; }
int getSpellLevel() {return spellLevel; }
String getEffect(){ return effect; }
int getManaCost(){
return manaCost;
}
int getDuration() { return duration; }
}
public class SpellsList {
static List<Spell> spellsList = new ArrayList<Spell>();
static
{
spellsList.add(new Spell("Fireball", 3, "damage", 5,0 ));
spellsList.add(new Spell("Ice Storm", 4, "damage", 8, 0));
spellsList.add(new Spell("Heal", 2, "heal", 4, 0));
}
static Spell getSpell(String spellName) {
try {
for (Iterator<Spell> iter = spellsList.iterator(); iter.hasNext(); ) {
Spell spell = iter.next();
if (spellName.equals(spell.getSpellName())) {
return spell;
}
}
} catch (Exception e){
System.out.println(spellName + " haven't been found in spells-list");
return null;
}
return null;
}
}
if(hero instanceof Mage)
((Mage) hero).addToSpellBook();
if(hero instanceof Mage) {
((Mage)hero).addToSpellBook("Fireball");
((Mage)hero).showSpellBook();
}