0

私は仮想ペット ゲームを作成しており、現在空腹を含めようとしていますが、食べる機能を機能させる方法がわかりません。食品の栄養価を加えることで減少させようとしています。この値は、arraylist に格納されているオブジェクトにあります。

参照する方法はありますか

 int nutrition(int eaten) {
    nutrition = nutrition - eaten;
    return nutrition;

(食べられたintは後で渡されます)

中身

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 これを使おうとしましたが、Processing で i が見つかりません。これは、クラスに i が存在せず、メイン スケッチにのみ存在するためだと思います。もしそうなら、私は i をメソッドに入れる方法を見つけます。リターンを使っているのかもしれません。

誰かがこれを行うためのより良い方法を知っていれば、その知識をいただければ幸いです。

コード

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 ファイルです。

4

1 に答える 1

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));
于 2013-02-22T15:53:56.447 に答える