单机游戏体力恢复的思路

以6分钟恢复1体力 满体力是100为例子

注释: (int) SaveData._instance.PS为专门存储数据的类里边的体力

存储时间的对象TIME类

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TIME 
{
    public int year { get; set; }
    public int  month { get; set; }
    public int  day { get; set; }
    public int  hour { get; set; }
    public int  minute { get; set; }
    public int  second { get; set; }

    public TIME(int year,  int  month, int  day, int  hour, int minute, int  second)
    {
        this.year = year;
        this.month = month;
        this.day = day;
        this.hour = hour;
        this.minute = minute;
        this.second = second;
    }

}


游戏体力的计算的逻辑 随便挂载一个空物体上

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class code : MonoBehaviour
{
    
    //游戏里保存的时间
    TIME saveTime;
    //现在的时间
    TIME nowTime;

   // private  int SP;
    public Text waitRecoverTimeText;//主界面体力倒计时的text
    private void Awake()
    {
     
        nowTime = new TIME(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
        saveTime = nowTime;//先构造出来两个时间的实例对象 然后在改变

        GetTheTime();//改变saveTime
    }
    private void Start()
    {
        StartCoroutine(ChangeTimeAndSP());//开始调用携程
    }

    private void Update()
    {
        if (SaveData._instance.PS >= 100) { print("SP"+ SaveData._instance.PS);  print("隐藏"); waitRecoverTimeText.gameObject.SetActive(false); }//根据提示是否满控制倒计时text是否显示的方法
        else if (SaveData._instance.PS < 100) { print("显示"); waitRecoverTimeText.gameObject.SetActive(true); }
    }
    void SaveTheTime()//存储时间的方法  把现在的时间存储进去  todo 玩家进入关卡之后调用
    {
        PlayerPrefs.SetInt("Year", nowTime.year);
        PlayerPrefs.SetInt("Month", nowTime.month);
        PlayerPrefs.SetInt("Day", nowTime.day );
        PlayerPrefs.SetInt("Hour", nowTime.hour);
        PlayerPrefs.SetInt("Minute", nowTime.minute);
        PlayerPrefs.SetInt("Second", nowTime.second );
    }
    void GetTheTime()//读取时间的方法 获取到上一次体力开始消耗时候的时间
    {
   //     print( "是否有key:" +PlayerPrefs.HasKey("Year") );
        saveTime.year  = PlayerPrefs.GetInt("Year", DateTime.Now.Year);
        saveTime.month = PlayerPrefs.GetInt("Month", DateTime.Now.Month);
        saveTime.day = PlayerPrefs.GetInt("Day", DateTime.Now.Day);
        saveTime.hour = PlayerPrefs.GetInt("Hour", DateTime.Now.Hour);
        saveTime.minute = PlayerPrefs.GetInt("Minute", DateTime.Now.Minute);
        saveTime.second = PlayerPrefs.GetInt("Second", DateTime.Now.Second);
        print("成功获取到存储的时间 为" + saveTime.year + "年" + saveTime.month + "月" + saveTime.day  + "日" + saveTime.hour  + "时" + saveTime.minute + "分" + saveTime.second  + "秒");
    }
    IEnumerator  ChangeTimeAndSP()
    {
        //1 获取到现在的时间
        nowTime = new TIME(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);

        //1.1   判断是否目前时间比存储的时间 日期靠后

        bool isRun = false;
        if (nowTime.year > saveTime.year)//如果年数靠后的话 就不在进行判断了 直接去执行下边的逻辑了
        {
            { isRun = true; goto mylable; }
        }
        if (nowTime.month  > saveTime.month )//月
        {
            { isRun = true; goto mylable; }
        }
        if (nowTime.day  > saveTime.day )//日
        {
            { isRun = true; goto mylable; }
        }
        if (nowTime.hour  > saveTime.hour )//时
        {
            { isRun = true; goto mylable; }
        }
        if (nowTime.minute  > saveTime.minute )//分
        {
            { isRun = true; goto mylable; }
        }
        if (nowTime.second  > saveTime.second )//秒
        {
            { isRun = true;}
        }


     mylable:
        int theSecond = -1;//存储恢复体力需要的秒数
        if (isRun == true)//如果现在的时间确定比已经存储的时间靠后 进行正常操作
        {
            //2 获取到  现在的时间与存储器里边的时间 相差的秒的数量
            int secondDiffence = nowTime.second - saveTime.second;
            int minuteDiffence = nowTime.minute - saveTime.minute;
            int hourDiffence = nowTime.hour - saveTime.hour;
            int dayDiffence = nowTime.day - saveTime.day;
            int monthDiffence = nowTime.month - saveTime.month;
            int yearDiffence = nowTime.year  - saveTime.year;
        
            int theSecondLerp = secondDiffence + minuteDiffence * 60 + hourDiffence * 60 * 60 + dayDiffence * 60 * 60 * 24 + monthDiffence * 60 * 60 * 24 * 30+ yearDiffence*12 * 60 * 60 * 24 * 30;
     
            //3如果体力不满的时候

            if (SaveData._instance.PS < 100)//如果体力不满的话
            {
                 waitRecoverTimeText.gameObject.SetActive(true); //显示text
                for (; theSecondLerp >= 300; theSecondLerp -= 300)//如果秒数不够 跳出循环  每隔300秒加1体力
                {
                    SaveData._instance.PS++;
                    SaveTheTime();
                    GetTheTime();
                
                    if (SaveData._instance.PS >= 100) { break; }               //如果体力满了 跳出循环
                }
            }
            else { SaveTheTime();  }
           
            theSecond = theSecondLerp;
       
        }

        else//是玩家调整了系统日期 重新把当前世界存储为savetime 
        {
            SaveTheTime();
            GetTheTime();
        }

        yield return new WaitForSeconds(1.0f);
        ChangeMainScenceText(theSecond);//更新倒计时text的方法

        StartCoroutine(ChangeTimeAndSP());//递归携程

    }
    void ChangeMainScenceText(int second)//更新主页的倒计时text 的方法
    {
        if (second <= 0) {  return; }//安全校验 

        int minuteCount = 0;//倒计时里边的分钟的数字
        int secondCount;//倒计时里边的秒钟的数字

        for (; second>=60; second-=60)//通过循环获取到剩余的分钟数量
        {
            minuteCount++;
        }
        secondCount = second;
        //text的显示:
       if (secondCount >50) { waitRecoverTimeText.text = (5- minuteCount).ToString() + ":0" + (60- secondCount).ToString(); }
        else { waitRecoverTimeText.text = (5 - minuteCount).ToString() + ":" + (60 - secondCount).ToString(); }
    }
}



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android单机游戏源码是指用于开发和构建运行在Android操作系统上的独立游戏的源代码。源码中包含了实现游戏各种功能的代码,如游戏场景、游戏角色的控制、游戏规则的逻辑等。通过查看源码,开发者可以了解游戏是如何实现的,也可以根据自身需求对游戏进行二次开发或定制。 Android单机游戏源码通常包含以下主要部分: 1. 游戏菜单和用户界面:源码中包括了游戏主菜单、关卡选择和设置界面等,方便用户进行游戏操作和设置。 2. 游戏场景和角色:源码中包含了游戏中的不同场景,如森林、城市或海底等,以及不同的游戏角色,如主角、敌人或NPC等。 3. 游戏逻辑和规则:源码中包含了游戏的各种逻辑和规则,如碰撞检测、计分系统、游戏难度调整等。 4. 游戏音效和音乐:源码中可能包含了游戏音效和音乐的实现,以提升游戏的娱乐性和吸引力。 5. 游戏存档和进度管理:源码中可能包含了游戏存档和进度管理功能的实现,方便玩家保存游戏进度和加载历史记录。 6. 其他辅助功能:源码中可能包含了一些辅助功能,如游戏暂停、游戏帮助等,以增加游戏的易用性。 通过使用Android单机游戏源码,开发者可以快速搭建起一个游戏的框架,并根据自身需求进行定制和扩展。这样可以节省开发时间和资源,同时可以满足不同用户对游戏的需求和期望。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值