unity七日签到系统

一个用于七日签到的系统,仅供参考,时间以凌晨12点为每日分割。
效果如下:
七日签到
代码

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

/// <summary>
/// 7日签到系统
/// *无需服务器,客户端自给自足获取网络时间
/// *author:passion
/// </summary>
public class SignView : MonoBehaviour {

    public const string SignNumPrefs = "SignNum";
    public const string SignDataPrefs = "SignData";
    public Toggle[] toggles;

    string ntpUrl = "http://cgi.im.qq.com/cgi-bin/cgi_svrtime";

    int signNum;//签到次数
    DateTime today;//今日日期
    //DateTime today = new DateTime(2018, 10, 1);
    DateTime signData;//上次签到日期


    //自定义日期,测试时使用
    //private void Awake()
    //{
    //    DateTime yestody = new DateTime(2018, 9, 20);
    //    PlayerPrefs.SetString(SignDataPrefs, yestody.ToString());
    //    PlayerPrefs.SetInt(SignNumPrefs, 1);
    //}

    //使用协程,获取ntp时间
    IEnumerator Start () {
        WWW www = new WWW(ntpUrl);
        yield return www;
        today = DateTime.Parse(www.text);

        //新的签到周期,需要清除签到存档
        if (NeedClean())
        {
            PlayerPrefs.DeleteKey(SignNumPrefs);
            PlayerPrefs.DeleteKey(SignDataPrefs);
        }

        signNum = PlayerPrefs.GetInt(SignNumPrefs, 0);
        signData = DateTime.Parse(PlayerPrefs.GetString(SignDataPrefs, DateTime.MinValue.ToString()));

        RefreshView();
    }
	
    //签到按钮点击
	public void OnSignClick()
    {
        if(!IsOneDay(signData, today))
        {
            signNum++;
            signData = today;

            //更新存档
            PlayerPrefs.SetString(SignDataPrefs, today.ToString());
            PlayerPrefs.SetInt(SignNumPrefs, signNum);
            //刷新视图
            RefreshView();
            //给用户加金币
            UserGift();
        }
    }

    //刷新视图
    void RefreshView()
    {
        for (int i = 0; i < signNum; i++)
        {
            toggles[i].isOn = true;
        }
    }

    //判断是否是同一天
    bool IsOneDay(DateTime t1,DateTime t2)
    {
        return (t1.Year == t2.Year &&
         t1.Month == t2.Month &&
          t1.Day == t2.Day);
    }

    //获取任意日期的周一时间
    DateTime GetMonday(DateTime t)
    {
        //上次签到日期小于本周一
        int offset = (int)t.DayOfWeek;
        offset = offset == 0 ? 7 : offset;
        return t.AddDays(1 - offset);
    }

    //需要清除
    bool NeedClean()
    {
        DateTime curMonday = GetMonday(today);
        DateTime signMonday = GetMonday(signData);

        return (IsOneDay(curMonday,signMonday));
    }

    //给用户加金币
    void UserGift()
    {

    }
}

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TxNet.Ltd.

你的赞同是对我的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值