Tamagotchi 喜欢应用 day/night 循环
Tamgotchi like app day/night cycle
要学习 android 我正在制作类似电子鸡的应用程序。它的食物等级每小时减少 1,所以如果你几个小时不喂它它就会死。我也在晚上 8 点到早上 8 点之间睡着了。只是有一个问题。要将其状态更改为睡眠状态,您需要在晚上 8 点到早上 8 点之间打开应用程序。这会产生以下问题:
如果你喂它,比如说晚上 7 点,它睡觉前 1 小时,你在晚上 8 点到早上 8 点之间没有打开应用程序,但在第二天早上 9 点,他认为已经过去了 13 个小时而不是 1 个小时(他不应该计算睡眠时间)你们有什么建议吗?
这是昏昏欲睡的衰变代码
public void checkSleepyTime()
{
c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int daypart = c.get(Calendar.AM_PM);
if (hour >= 20 && daypart == 1)
{
foodButton.setText("ZZzz");
prefs.edit().remove("foodTime").commit();
buddy.setSleeping(true);
}
else
{
foodButton.setText("Awake");
buddy.setSleeping(false);
}
}
.
public void initBuddy()
{
debugView.setText("FoodLevel: " + buddy.getFoodLevel());
if(!buddy.getSleeping() && buddy.getAlive())
{
long currentTime = prefs.getLong("currentTime", getCurentTime());
long foodTime = prefs.getLong("foodTime", getCurentTime());
while (foodTime < currentTime)
{
if (currentTime - foodTime >= ONE_HOUR)
{
buddy.decayFood();
}
foodTime = foodTime + ONE_HOUR;
}
}
如果自上次喂食后的时间比睡眠时间长,请检查预期的睡眠时间是否在该时间之内。然后相应地采取行动(快速破解是将睡眠时间添加到上次喂食的时间)。还要检查喂食时间是否超过一天。像这样:
if (currentTime - foodTime >= ONE_HOUR)
{
if (currentTime - foodTime >= WHOLE_NIGHT && sleepPeriodFitsInBetween(foodTime, currentTime))
{
foodTime+=WHOLE_NIGHT;
int numberOfFullDays=countNumberOfDays(currentTime - foodTime);
if(numberOfFullDays>1)
{
currentTime+=numberOfFullDays*(24-WHOLE_HIGHT); // assuming WHOLE_NIGHT is in hours.
}
}
...
}
我现在有以下两种获取当前时间和关闭时间的方法(保存在 onStop();),我将其转换为 days/weeks/months/years。我想检查 closeTIme 和 currentTIme 之间有多少个晚上,但我不确定如何处理这些信息。谁能指出我正确的方向?
public void checkSleepTimes()
{
closeCalendar = timeHelper.convertLongToCal(loadCloseTime());
closeArray = loadDateArrayList(closeArray, closeCalendar);
currentCalendar = timeHelper.convertLongToCal(getCurentTime());
closeArray = loadDateArrayList(currentArray, currentCalendar);
long curTime = getCurentTime();
int times = 0;
long totalSleepTime = 0;
while (closeTime < curTime)
{
closeTime = closeTime + WHOLE_DAY;
times ++;
}
//TODO Check how many times it was between 08:00 and 20:00
totalSleepTime = SLEEP_TIME * times; // not sure if correct approach
}
public ArrayList loadDateArrayList(ArrayList arrayList, Calendar calendar)
{
arrayList.add(0,calendar.DATE);
arrayList.add(1,calendar.WEEK_OF_YEAR);
arrayList.add(2,calendar.MONTH);
arrayList.add(3,calendar.YEAR);
return arrayList;
}
要学习 android 我正在制作类似电子鸡的应用程序。它的食物等级每小时减少 1,所以如果你几个小时不喂它它就会死。我也在晚上 8 点到早上 8 点之间睡着了。只是有一个问题。要将其状态更改为睡眠状态,您需要在晚上 8 点到早上 8 点之间打开应用程序。这会产生以下问题:
如果你喂它,比如说晚上 7 点,它睡觉前 1 小时,你在晚上 8 点到早上 8 点之间没有打开应用程序,但在第二天早上 9 点,他认为已经过去了 13 个小时而不是 1 个小时(他不应该计算睡眠时间)你们有什么建议吗?
这是昏昏欲睡的衰变代码
public void checkSleepyTime()
{
c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int daypart = c.get(Calendar.AM_PM);
if (hour >= 20 && daypart == 1)
{
foodButton.setText("ZZzz");
prefs.edit().remove("foodTime").commit();
buddy.setSleeping(true);
}
else
{
foodButton.setText("Awake");
buddy.setSleeping(false);
}
}
.
public void initBuddy()
{
debugView.setText("FoodLevel: " + buddy.getFoodLevel());
if(!buddy.getSleeping() && buddy.getAlive())
{
long currentTime = prefs.getLong("currentTime", getCurentTime());
long foodTime = prefs.getLong("foodTime", getCurentTime());
while (foodTime < currentTime)
{
if (currentTime - foodTime >= ONE_HOUR)
{
buddy.decayFood();
}
foodTime = foodTime + ONE_HOUR;
}
}
如果自上次喂食后的时间比睡眠时间长,请检查预期的睡眠时间是否在该时间之内。然后相应地采取行动(快速破解是将睡眠时间添加到上次喂食的时间)。还要检查喂食时间是否超过一天。像这样:
if (currentTime - foodTime >= ONE_HOUR)
{
if (currentTime - foodTime >= WHOLE_NIGHT && sleepPeriodFitsInBetween(foodTime, currentTime))
{
foodTime+=WHOLE_NIGHT;
int numberOfFullDays=countNumberOfDays(currentTime - foodTime);
if(numberOfFullDays>1)
{
currentTime+=numberOfFullDays*(24-WHOLE_HIGHT); // assuming WHOLE_NIGHT is in hours.
}
}
...
}
我现在有以下两种获取当前时间和关闭时间的方法(保存在 onStop();),我将其转换为 days/weeks/months/years。我想检查 closeTIme 和 currentTIme 之间有多少个晚上,但我不确定如何处理这些信息。谁能指出我正确的方向?
public void checkSleepTimes()
{
closeCalendar = timeHelper.convertLongToCal(loadCloseTime());
closeArray = loadDateArrayList(closeArray, closeCalendar);
currentCalendar = timeHelper.convertLongToCal(getCurentTime());
closeArray = loadDateArrayList(currentArray, currentCalendar);
long curTime = getCurentTime();
int times = 0;
long totalSleepTime = 0;
while (closeTime < curTime)
{
closeTime = closeTime + WHOLE_DAY;
times ++;
}
//TODO Check how many times it was between 08:00 and 20:00
totalSleepTime = SLEEP_TIME * times; // not sure if correct approach
}
public ArrayList loadDateArrayList(ArrayList arrayList, Calendar calendar)
{
arrayList.add(0,calendar.DATE);
arrayList.add(1,calendar.WEEK_OF_YEAR);
arrayList.add(2,calendar.MONTH);
arrayList.add(3,calendar.YEAR);
return arrayList;
}