从对象的Arraylist中获取价值 - 处理

时间:2013-02-22 01:52:21

标签: arrays object arraylist processing

我正在制作一个虚拟宠物游戏,我现在正试图将饥饿包括在内,但是我不确定如何让吃功能起作用。我试图通过增加一种食物的营养价值来减少它。此值位于存储在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文件

1 个答案:

答案 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));