[英]Structuring Class Objects And Defining The Variables
我試圖勾勒出游戲中角色的輪廓。
然后,我想創建10個不同的角色,並比較它們在不同級別的統計信息。
我正在創建一個名為Character
的類,看起來像這樣,
public class Character {
String primaryAtribute;
double strength;
double agility;
double inteligence;
double armor;
double damageMultiplyer;
int health;
int mana;
int range;
int movement;
int level;
int damageMin;
int damageMax;
public Character() {
} //constructor ends
private static int randomInt(int min, int max) {
return min + (int)(Math.random() * (max - min + 1));
}
int damageRange = randomInt(damageMin, damageMax);
double damage = damageRange + level * damageMultiplyer;
} //class ends
然后我要像這樣創建每個角色,
public class FirstCharacter {
String primaryAtribute = "Agility";
int level = 0;
double strength = 17 + level * 1.9;
double agility = 26 + level * 1.9;
double inteligence = 15 + level * 1.4;
double armor = 0.64;
double damageMultiplyer = 1.9;
int health = 473;
int mana = 195;
int range = 625;
int movement = 300;
int damageMin = 44;
int damageMax = 55;
}
我在正確的道路上嗎?
一旦創建了每個角色的類,我將如何設置我可以選擇哪個Character
類?
正如其他人所建議的那樣,您可能應該只閱讀有關OOP的書。 但是,簡要地:
您提供的代碼創建了兩種完全不相關的對象類型: Character
和FirstCharacter
。 但是,看來您真正想要做的是創建字符類的實例,如下所示:
Character firstChar = new Character();
然后使用訪問器方法或其他方式設置角色的屬性。 例如,如果這些字段是公共的(不推薦),則可以執行以下操作:
firstChar.strength = 17;
firstChar.agility = 26;
...
級別更改后,您將需要稍后重新計算這些值,您無法以嘗試的方式為其指定公式。
祝好運!
正如我之前的評論所建議的那樣,您應該事先了解一些面向對象的原則。 我將嘗試概述其中一些可能使您走上正確軌道的方法。
接口:
interface Character {
// define methods that must be defined across all character types
public void getLevel();
public void getAgility();
...
}
實現此接口:
public class Bob implements Character {
private String primaryAtribute;
private double strength;
private double agility;
private double inteligence;
private double armor;
private double damageMultiplyer;
private int health;
private int mana;
private int range;
private int movement;
private int level;
private int damageMin;
private int damageMax;
// default constructor
public Bob() {}
// override as many times as you'd like
public Bob(int level) {
this.level = level;
}
// getters and setters - required to implement ALL from interface
public void getLevel() {
return this.level;
}
public void getAgility() {
return this.agility;
}
public void setAgility(double agility) {
this.agility = agility;
}
}
從現在開始,我們可以在任何需要的地方使用Bob作為新實例: new Bob(...);
。
大多數成員變量始終是私有的,用於封裝。 所有這些都取決於您的用例以及您希望如何構造程序。 例如,您可以將health
更改為public int health
,並且無需getHealth()
函數就可以訪問此getHealth()
,可以直接調用[instance of Bob].health
。
我簡要介紹的主題是類變量,接口,范圍,重載,可能還有其他內容。 您需要找一本書,甚至通讀Java文檔。 他們有一些很好的例子,而且很冗長。
很抱歉遲到,交通阻塞是一場噩夢。 這是您可以做的事情的可能性:
public class Character {
// ...
public Character(String primaryAttribute, int level /* , ... */){
this.primaryAttribute = primaryAttribute;
this.level = level;
// Write all fields with constructor variables.
}
}
從那里可以使用:
{
Character myfirstcharacter = new Character("Agility", 0 /* , ... */);
}
public class FirstCharacter extends Character {
{
primaryAtribute = "Agility";
level = 0;
strength = 17 + level * 1.9;
agility = 26 + level * 1.9;
inteligence = 15 + level * 1.4;
armor = 0.64;
damageMultiplyer = 1.9;
health = 473;
mana = 195;
range = 625;
movement = 300;
damageMin = 44;
damageMax = 55;
}
}
這是一個擴展您的Character
類並在構造時寫入其字段的類。
{
Character myfirstcharacter = new FirstCharacter();
// FirstCharacter myfirstcharacter = new FirstCharacter();
}
就像選項B一樣 :
{
Character myfirstcharacter = new Character() {
{
primaryAtribute = "Agility";
level = 0;
strength = 17 + level * 1.9;
agility = 26 + level * 1.9;
inteligence = 15 + level * 1.4;
armor = 0.64;
damageMultiplyer = 1.9;
health = 473;
mana = 195;
range = 625;
movement = 300;
damageMin = 44;
damageMax = 55;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.