Tamgotchi喜欢app日/夜循环

时间:2015-11-02 13:22:03

标签: android calendar

要学习android,我正在制作一个tamagotchi应用程序。它的食物每小时减少1,所以如果你不喂它几个小时就会死掉。我也在晚上8点到早上8点之间睡着了。只有有问题。要将其状态更改为睡眠状态,您需要在晚上8点到早上8点之间打开应用程序。这给出了以下问题:

如果你喂它,可以在晚上7点,睡觉前1小时说,你不要在晚上8点到早上8点之间打开应用程序,但是在第二天上午9点他认为已经过了13个小时而不是1个小时(他不应该计算睡觉时间)你们有什么提示吗?

这是困倦和腐朽的代码

ArrayList myArrayList = new ArrayList();

for (int i = 0; i <= 1000; i++)
{
    myArrayList.Add(i);
}

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);
    }
}

2 个答案:

答案 0 :(得分:1)

如果自上次喂食后的时间长于睡眠时间,请检查预期的睡眠时间是否属于该时间。然后采取相应的行动(快速黑客将把睡眠时间加到最后一次喂食的时间)。同时检查自进料时间以来是否已超过一天。像这样:

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.

    }
  }
  ...
}

答案 1 :(得分:0)

我现在有以下两种获取当前时间和关闭时间的方法(保存在onStop();中)并将其转换为天/周/月/年。我想查看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;
}