- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的小文本游戏中,我有一个 Item 类,它从 .txt 文件加载其对象,然后将该对象添加到 Item 类型的 ArrayList 中。我正在尝试使用 Item 类中的 update() 方法进行升级。它有效,但如果我的库存中有两个相同的元素,因为如果我升级一个元素,它们会引用相同的元素,我会升级该类型的所有元素。
有没有办法创建一个新项目(青铜 Helm ),创建时将与从文本文件加载的青铜 Helm 相同,但升级时不会更改静态 Helm ArrayList中的原始对象项目.java。
Player 类中的 openInventory() 方法:
public void openInventory(){
//newWindow();
int selection;
boolean upgraded = false;
backPack.printInventory(this);
println("[1] UseItem [2] Upgrade Item [3] Item Details");
selection = getInt();
if(selection == 1){
println("Type the number of the corresponding Item Slot you would like to use.");
int itemNum = (getInt() - 1);
Item itemSelection = backPack.itemSlot[itemNum].oi;
if(backPack.itemSlot[itemNum].stack.size() > 0){
itemSelection = backPack.itemSlot[itemNum].stack.get(0);
}
itemSelection.printStats();
this.useItem(itemSelection);
}
if(selection == 2){
int sInt;
Item scroll = new Item();
Item item = new Item();
while(upgraded == false){
println("Pick a scroll");
sInt = getInt();
if(backPack.itemSlot[sInt - 1].oi.type.equals("scroll")){
scroll = backPack.itemSlot[sInt - 1].oi;
}
else
println("Not a Scroll");
println("Pick which " + scroll.category + " to upgrade.");
sInt = getInt();
if(backPack.itemSlot[sInt - 1].oi.type.equals(scroll.category)){
item = backPack.itemSlot[sInt - 1].oi;
}
else
println("Wrong type of Item");
if(scroll.name != "None" && item.name != "None"){
backPack.itemSlot[sInt - 1].oi.upgrade(scroll);
upgraded = true;
}
}
}
if(selection == 3){
println("Pick item to display details.");
int i = getInt();
backPack.itemSlot[i - 1].oi.printStats();
}
}
升级“青铜 Helm ”之一后的库存
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
[1] Bronze Helmet [+1] [2] Bronze Helmet [+1] [3] Helmet Def Scroll [4] None [5] None
[6] None [7] None [8] None [9] None [10] None
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
[Gold]: $50
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
项目.java:
import static com.projects.aoa.Print.*;
import static com.projects.aoa.Input.*;
import java.util.*;
import java.io.*;
class Item {
//Item
String name, type, category, statUpgrade;
int remSlots, maxSlots, upgraded, probability, statIncrease;
int hp, mp, str, def, atk, dex, duration;
Area shopPurchased;
//Inventory
public boolean filled;
public int count, stackLimit;
public static List<Item> helmets = new ArrayList<Item>();
public static List<Item> potions = new ArrayList<Item>();
public static List<Item> swords = new ArrayList<Item>();
public static List<Item> scrolls = new ArrayList<Item>();
Item(){
name = "None";
maxSlots = 5;
remSlots = 5;
}
public String toString(){
return (name);
}
static void loadItems(){
try {
//System.out.println(System.getProperty("user.dir"));
FileInputStream fstream = new FileInputStream(System.getProperty("user.dir")
+ "/LoadFiles/" + "itemLoad.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line, itemType = "none";
int counter = 0;
Item newItem = new Item();
while((line = br.readLine()) != null) {
if(line.length() == 0){
newItem.printStats();
if(itemType.equals("helmet")){
helmets.add(newItem);
}
if(itemType.equals("potion")){
potions.add(newItem);
}
if(itemType.equals("sword")){
swords.add(newItem);
}
if(itemType.equals("scroll")){
scrolls.add(newItem);
}
counter = -1;
}
if(line.equals("#"))
break;
switch(counter) {
case -1:
counter++;
break;
case 0:
itemType = line;
counter++;
break;
case 1:
if(itemType.equals("helmet")){
//tempName = line;
newItem = new Helmet(line);
newItem.type = itemType;
}
if(itemType.equals("potion")){
newItem = new Potion(line);
newItem.type = itemType;
}
if(itemType.equals("sword")){
newItem = new Sword(line);
newItem.type = itemType;
}
if(itemType.equals("scroll")){
newItem = new Scroll(line);
newItem.type = itemType;
counter = 9;
}
counter++;
break;
case 2:
newItem.hp = Integer.parseInt(line);
counter++;
break;
case 3:
newItem.mp = Integer.parseInt(line);
counter++;
break;
case 4:
newItem.def = Integer.parseInt(line);
counter++;
break;
case 5:
newItem.str = Integer.parseInt(line);
counter++;
break;
case 6:
newItem.atk = Integer.parseInt(line);
counter++;
break;
case 7:
newItem.dex = Integer.parseInt(line);
counter++;
break;
case 8:
newItem.stackLimit = Integer.parseInt(line);
counter++;
break;
case 9:
newItem.duration = Integer.parseInt(line);
counter++;
break;
case 10:
newItem.category = line;
counter++;
break;
case 11:
newItem.statUpgrade = line;
counter++;
break;
case 12:
newItem.statIncrease = Integer.parseInt(line);
counter++;
break;
case 13:
newItem.probability = Integer.parseInt(line);
counter++;
break;
}
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
void printStats(){
line();
println("[" + name + "]");
println("Type: " + type);
println("Stack Limit: " + stackLimit);
println("Duration: " + duration);
println("HP: " + hp);
println("MP: " + mp);
println("Def: " + def);
println("Str: " + str);
println("Atk: " + atk);
println("Dex: " + dex);
}
void upgrade(Item scroll){
Random rand = new Random();
int geti;
if(remSlots > 0){
if(this.type.equals(scroll.category)){
int prob = rand.nextInt(99);
println("Prob: " + prob);
if(prob < scroll.probability){
if(scroll.statUpgrade.equals("def")){
this.def += scroll.statIncrease;
this.upgraded++;
println("Upgraded: " + this.upgraded);
}
}
remSlots--;
println("Slots: " + this.remSlots + " / " + this.maxSlots);
}
}
else
println("No slots remaining.");
}
static Item getItem(String searchedName){
Item item = new Item();
for(int i = 0; i < potions.size(); i++){
if(potions.get(i).name.equals(searchedName)){
item = potions.get(i);
return item;
}
}
for(int i = 0; i < helmets.size(); i++){
if(helmets.get(i).name.equals(searchedName)){
item = helmets.get(i);
return item;
}
}
for(int i = 0; i < swords.size(); i++){
if(swords.get(i).name.equals(searchedName)){
item = swords.get(i);
return item;
}
}
for(int i = 0; i < scrolls.size(); i++){
if(scrolls.get(i).name.equals(searchedName)){
item = scrolls.get(i);
return item;
}
}
return item;
}
}
库存:
public class Inventory {
int useableSlots, slots = 50;
Itemslot[] itemSlot = new Itemslot[slots];
Inventory(int slots){
this.useableSlots = slots;
}
public void printInventory(Player playerOne){
newWindow(5);
int excess, lineTotal = 0, invSlotSize = 25, maxLineLength = 125;
String invItem, difference = "";
String inventoryTitle = "[" + playerOne.name + "'s BackPack]";
String invTitleIndent = "";
for(int i = 0; i < (maxLineLength - inventoryTitle.length()) / 2; i++){
invTitleIndent += " ";
}
println(invTitleIndent + inventoryTitle);
printMult("—", maxLineLength);
line();
for(int i = 0; i < useableSlots; i++){
if(lineTotal >= maxLineLength){
line();
lineTotal = 0;
line();
}
if(i < 9){
difference = " ";
}
else{
difference = "";
}
invItem = ("[" + (i + 1) + "] " + difference);
if(itemSlot[i].stack.size() > 0){
invItem += (itemSlot[i].stack.get(0).name + "(" + itemSlot[i].stack.size() + ")");
}
else {
invItem += itemSlot[i].oi.name;
if(itemSlot[i].oi.upgraded > 0){
invItem += " [+" + itemSlot[i].oi.upgraded + "]";
}
}
excess = (invSlotSize - invItem.length());
for(int v = 0; v < excess; v++){
invItem += " ";
}
//print(invItem.length());
print(invItem);
lineTotal += invItem.length();
}
line();
printMult("—", maxLineLength);
line();
String printGold = "[Gold]: $" + playerOne.gold;
String goldIndent = "";
for(int i = 0; i < (maxLineLength - printGold.length()) / 2; i++){
goldIndent += " ";
}
println(goldIndent + printGold);
printMult("—", maxLineLength);
line();
line(2);
}
void addItem(Item item){
for (int i = 0; i < useableSlots; i++){
if (itemSlot[i].occupied == false) {
itemSlot[i].oi = item;
itemSlot[i].occupied = true;
break;
}
}
}
元素栏:
public class Itemslot extends Item{
List<Item> stack = new ArrayList<Item>();
Item oi = new Item();
boolean occupied;
}
这很可能只是我太愚蠢了,但如果能帮助解决这个问题,或者采取什么方向,我们将不胜感激。
编辑:已解决
向 Item 添加了复制构造函数
Item(Item item){
this.name = item.name;
this.type = item.type;
this.category = item.category;
this.statUpgrade = item.statUpgrade;
this.remSlots = item.remSlots;
this.maxSlots = item.maxSlots;
this.upgraded = item.upgraded;
this.probability = item.probability;
this.statIncrease = item.statIncrease;
this.hp = item.hp;
this.mp = item.mp;
this.str = item.str;
this.def = item.def;
this.atk = item.atk;
this.dex = item.dex;
this.duration = item.duration;
}
更改了addItem
void addItem(Item item){
Item newItem = new Item(item);
for (int i = 0; i < useableSlots; i++){
if (itemSlot[i].occupied == false) {
itemSlot[i].oi = newItem;
itemSlot[i].occupied = true;
break;
}
}
}
最佳答案
根据Effective Java 2 复制对象的推荐方式是提供一个复制构造函数
public Foo(Foo foo){
//.. copy all members
this.name=foo.name;
this.age=foo.age;
}
请注意,clone
方法是 broken in Java,根据同一本书。
我认为您的方法是错误的,您可以使用 ObjectInputStream 和 ObjectOutputStream 将对象写入数据文件
public class Item implements java.io.Serializable{
....
}
{
Item item=new Item();
ObjectInputStream stream=new ObjectInputStream(fileStream);
stream.write(item);
}
关于Java:从一种基本类型创建多个单独的对象。文字冒险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629004/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!