0

嗨,我目前正在编写一个虚拟宠物风格的应用程序,我为宠物的基础创建了一个名为 Pet.class 的类

    package com.grim.droidchi;

public class Pet {

    public static int Health = 100;
    public static int Happiness = 10;
    public static int Level = 1;
    public static int Hunger = 0;
    public static int Exp = 0;
    public static String Name;
    public static Boolean isAlive = true;
    public static Boolean isSick = false;

    public Pet(int startHealth, int startLevel, int startHunger) {

    }

   }

还有一个扩展基本宠物类的“狗”类

package com.grim.droidchi;


public class Dog extends Pet {

    public Dog(int startHealth, int startLevel, int startHunger) {
        super(startHealth, startLevel, startHunger);

    }

}

每 30 分钟一个 AlarmManager 触发我的 Gameloop.class

package com.grim.droidchi;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.util.Log;
import android.widget.TextView;

public class Gameloop extends BroadcastReceiver {
    MediaPlayer mp = null;
    private static final String TAG = "VPET";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Loop running");
        if (Pet.isAlive == true) {
            Pet.Hunger = Pet.Hunger + 1;
            Pet.Exp = Pet.Exp + 2;
            Pet.Happiness = Pet.Happiness - 1;

            mp = MediaPlayer.create(context, R.raw.beep);
            mp.start();
            petLevel();
            petStatus();
            randomEncounters();
        } else {

        }
    }

    private void petLevel() {


    }

    private void randomEncounters() {
        if (Math.random() < 0.20) {
            Pet.isSick = true; 

        }

    }

    private void petStatus() {
        if (Pet.Hunger > 7) {
            Pet.isAlive = false;

        } 

    }

}

如何让 Gameloop 中的操作取决于用户决定选择的特定宠物?(假设我创造了更多的宠物类型。)

PS 同样作为这个问题的旁注,实现保持 UI 始终从 Gameloop 类保持最新的最佳方法是什么?

任何帮助将不胜感激。我仍在学习 Java 和 Android,有时即使在所有好的学习材料中也很难找到具体/问题的答案。

谢谢你。

4

1 回答 1

0

对于宠物类型:

if (pet instanceof Dog)

要更新 UI,请定义一个接口。在这里查看我的答案:

从广播接收器访问 R

它适用于不同的场景,但很容易适应。

[编辑]

instanceof通常是设计不佳的标志。

试试这个:

public void feed(Pet pet, int foodAmount){
        pet.feed(foodAmount);
}

public class Pet{       
}

public class Dog extends Pet{
    public void feed(int foodAmount){
        // feed like a dog
    }
}


public class Cat extends Pet{
    public void feed(int foodAmount){
        // feed like a cat
    }
}

然后只需使用pet.feed(10);

于 2013-02-24T16:08:16.623 回答