Java 如何根据用户输入动态选择某个对象,然后使用其他方法更改该特定对象?
嗨,我目前正在编写一个虚拟宠物风格的应用程序,我已经为宠物的基础创建了一个名为Pet.Class的类Java 如何根据用户输入动态选择某个对象,然后使用其他方法更改该特定对象?,java,android,Java,Android,嗨,我目前正在编写一个虚拟宠物风格的应用程序,我已经为宠物的基础创建了一个名为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; pu
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) {
}
}
还有一个“Dog”类,它扩展了基本的pet类
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;
}
}
}
package com.grim.droidchi;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.media.MediaPlayer;
导入android.util.Log;
导入android.widget.TextView;
公共类Gameloop扩展了广播接收器{
MediaPlayer mp=null;
私有静态最终字符串TAG=“VPET”;
@凌驾
公共void onReceive(上下文、意图){
Log.d(标记“循环运行”);
如果(Pet.isAlive==true){
宠物饥饿=宠物饥饿+1;
宠物实验=宠物实验+2;
宠物幸福=宠物幸福-1;
mp=MediaPlayer.create(上下文,R.raw.beep);
mp.start();
petLevel();
petStatus();
随机遭遇();
}否则{
}
}
私有级别(){
}
私有void(){
if(Math.random()<0.20){
Pet.isSick=true;
}
}
私有状态(){
如果(宠物饥饿>7){
Pet.isAlive=false;
}
}
}
如何让Gameloop中的操作取决于用户选择的特定宠物?(假设我创建更多宠物类型。)
另外,作为对这个问题的补充,实现让UI始终保持Gameloop类的最新状态的最佳方法是什么
任何帮助都将不胜感激。我仍在学习Java和Android,有时甚至在所有好的学习材料中也很难找到具体的问题/答案
谢谢。有关宠物类型:
if (pet instanceof Dog)
要更新UI,请定义一个接口。请看我的回答:
这是一个不同的场景,但很容易适应
[编辑]
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
}
}
然后只需使用宠物饲料(10)代码>使用instanceof,真的吗?除非绝对必要,否则应避免这样做。继承在这里是一个更好的答案。谢谢,我想你回答了另一个我还没有问过的问题哈哈,我的意思是,例如,如果我有狗、马、鱼、大脚怪作为选择,而用户选择了大脚怪,那么我如何让游戏循环与大脚怪对象一起接收?或者我的游戏循环中会有很多if语句吗?事实上,我已经(再次感谢你,我确实明白了)看到了你的另一个答案,但事实上,如果我没有太多的经验,除了我所学的和你们所教的以外,尝试如何适应我的情况,这确实有点吓人。Gabe的意思是,instanceof很好用,但它通常是“掩盖裂缝”。最好使用重载方法,我已经编辑了我的答案。请再次阅读我关于使用接口的答案。适应起来真的很简单。事实上,您可能只需要更改传递给onReceived回调的参数。嗨,Simon,谢谢。我将接受您的答案,尽管它对我来说没有意义,但这并不意味着它是错误的,再次感谢您。