我正在制作一个虚拟宠物游戏,我现在正试图将饥饿包括在内,但是我不确定如何让吃功能起作用。我试图通过增加一种食物的营养价值来减少它。此值位于存储在arraylist中的对象中。
有没有办法引用
int nutrition(int eaten) {
nutrition = nutrition - eaten;
return nutrition;
(将在稍后传递过来)
内
ArrayList items;
void setup() {
items = new ArrayList();
}
void draw() {
for (int i = items.size() - 1; i >=0; i --) {
Food food = (Food) items.get(i);
food.display();
if (food.finished()) {
items.remove(i);
}
}
}
void mouseClicked() {
items.add(new Food(mouseX, mouseY, 1));
}
((Food)items.get(i)).nutrition();
http://www.java-forums.org/new-java/2370-how-return-object-arraylist.html 我试过用这个,但是处理器无法找到我。我相信这是因为我不在课堂上,只在主画中。如果是这样,我会找到一种方法将i放入方法中。也许使用return。
如果有人知道更好的方法,我会很感激。
CODE
Creature creature;
ArrayList items;
Hand hand;
String data[];
int gameInfo[];
int tempData[];
boolean haveFood;
void setup() {
size(100, 100);
smooth();
noCursor();
String data[] = loadStrings("save.txt");
String[] tempData = split(data[0], ',');
gameInfo = int(tempData);
for (int i = 0; i < data.length; i++) {
creature = new Creature(gameInfo[0], gameInfo[1], gameInfo[2], gameInfo[3]);
haveFood = false;
hand = new Hand();
items = new ArrayList();
}
}
void draw() {
background(255);
for (int i = items.size() - 1; i >=0; i --) {
Food food = (Food) items.get(i);
food.display();
if (food.finished()) {
items.remove(i);
}
}
creature.whatWant();
creature.whatDo(haveFood);
hand.draw();
}
void mouseClicked() {
items.add(new Food(mouseX, mouseY, 1));
haveFood = true;
}
class Creature {
int hunger;
int age;
int gender;
int asleep;
boolean idle;
char want;
char request;
Creature(int _gender, int _age, int _hunger, int _asleep) {
gender = _gender;
age = _age;
hunger = _hunger;
asleep = _asleep;
idle = true;
}
void whatWant() {
if (hunger == 50) {
want = 'H';
}
}
void whatDo(boolean food) {
if (idle == true) {
switch(want) {
case 'H':
if (food == true) {
creature.eat();
}
else
request = 'F';
ask();
}
}
else
{
println("IDLE");
}
}
void ask() {
if (request == 'F') {
println("HUNGRY");
}
}
void eat() {
println("EAT");
((Food)items.get(i)).nutrition();
}
}
class Food {
float posX;
float posY;
int nutrition;
Food(float _posX, float _posY, int rating) {
posX = _posX;
posY = _posY;
nutrition = rating;
}
void display() {
rect(posX, posY, 10, 10);
}
boolean finished() {
if (nutrition < 0) {
return true;
}
else {
return false;
}
}
int nutrition(int eaten) {
nutrition = nutrition - eaten;
return nutrition;
}
}
class Hand {
int posX;
int posY;
Hand() {
posX = mouseX;
posY = mouseY;
}
void draw() {
rectMode(CENTER);
point(mouseX, mouseY);
}
}
其中save.txt是一个带有1,1,50,1,1。
的txt文件答案 0 :(得分:0)
不幸的是我无法提供详细的答案。项目的结构和代码有很多令人困惑的事情。
与此同时,您在Creature的eat()
函数中遇到语法错误。
试试这个:
void eat() {
println("EAT");
//((Food)items.get(i)).nutrition();
for(int i = 0 ; i < items.size(); i++){
Food yummy = (Food)items.get(0);
yummy.nutrition(hunger);
}
}
上述工作原理是因为项目在顶部声明,因此在整个草图的范围内可见(换句话说就是全局)。我不确定这是故意还是你在生物和食物之间的关系。
上面的内容可以用更懒散(但不太常见/明显)的方式写成:
void eat() {
println("EAT");
//((Food)items.get(i)).nutrition();
for(Object yummy : items) ((Food)yummy).nutrition(hunger);
}
我认为该生物将根据其饥饿程度进食。
在某些时候我想这个生物应该是满的,
所以你也会根据营养更新生物的hungry
属性
它来自食物等。
另外,为了测试,我添加了非常有营养的食物:P
items.add(new Food(mouseX, mouseY, 10000));