极致21点开发DAY3

今天完成的主要任务是活动窗口的显示与关闭,以及领取金币的逻辑。用到了数据持久化技术。我想记录的主要是领取金币的逻辑。

领取金币算法:如果今天没有领取金币,即可领取,否则什么都不做。

一句话描述足矣,但实现起来并不是那么简单。涉及到保存是否领金币状态,以及第几次领取金币。还是用代码说话吧:

  1 using System;
  2 using System.Collections.Generic;
  3 using UnityEngine;
  4 using UnityEngine.UI;
  5
  6
  7 public class ActionController : MonoBehaviour
  8 {
  9     public Button closeBtn;
 10     public Button recvBtn;
 11     public Sprite[] goldSprite = new Sprite[7];
 12     public Sprite recvSprite;
 13
 14     public Transform parent;
 15     private List<GameObject> itemList = new List<GameObject>();
 16     //今天点击日期
 17     private string currentClickDate = "";
 18     //上一次点击日期
 19     private string lastClickDate = "";
 20     private int dateFlag = 0;
 21     private void Start()
 22     {
 23         // PlayerPrefs.DeleteAll();
 24         Init();
 25         currentClickDate = DateTime.Today.ToLongDateString();
 26         lastClickDate = PlayerPrefs.GetString("LastClickDate");
 27         LoadActionItems();
 28
 29     }
 30
 31     private void Init()
 32     {
 33
 34         closeBtn.onClick.AddListener(OnCloseBtn);
 35         recvBtn.onClick.AddListener(OnRecvBtn);
 36
 37     }
 38
 39     private void OnCloseBtn()
 40     {
 41         gameObject.SetActive(false);
 42     }
 43     //如果上一次点击日期和今天日期不同,并且今天还没有点击,则更新UI。
 44     private void OnRecvBtn()
 45     {
 46
 47         //从来没有点击过
 48         if (string.IsNullOrEmpty(lastClickDate))
 49         {
 50             dateFlag = 1;
 51
 52         }
 53         else
 54         {
 55             ++dateFlag;
 56             dateFlag %= 7;
 57         }
 58         PlayerPrefs.SetInt("DateFlag", dateFlag);
 59         //不是今天第一次点击,则什么都不做
 60         if (lastClickDate.Equals(currentClickDate))
 61         {
 62             Debug.Log("今天的金币已领取");
 63             return;
 64         }
 65         else
 66         {
 67
 68             lastClickDate = currentClickDate;
 69             PlayerPrefs.SetString("LastClickDate", lastClickDate);
 70             itemList[dateFlag - 1].transform.GetChild(2).gameObject.SetActive(true);
 71         }
 72     }
 73     private void LoadActionItems()
 74     {
 75
 76         ActionData temp = new ActionData();
 77         for (int i = 0; i < 7; i++)
 78         {
 79             //加载资源
 80             UnityEngine.Object obj = Resources.Load("Prefabs/actionitem");
 81             GameObject go = Instantiate(obj) as GameObject;
 82             itemList.Add(go);
 83             //初始化资源
 84             go.transform.SetParent(parent);
 85             go.transform.localPosition = new Vector3(0, 0, 0);
 86             go.transform.localScale = new Vector3(1, 1, 1);
 87
 88             temp.day = "第" + (i + 1) + "天";
 89             temp.goldNum = (i + 1).ToString();
 90             temp.goldSprite = goldSprite[i];
 91             temp.receiveSprite = recvSprite;
 92
 93             go.GetComponent<ActionItem>().SetActionItem(temp);
 94         }
 95         //加载完资源时,更新UI
 96         if (lastClickDate.Equals(currentClickDate))
 97         {
 98             itemList[dateFlag].transform.GetChild(2).gameObject.SetActive(true);
 99         }
100     }
101 }

效果图:

原文地址:https://www.cnblogs.com/blackteeth/p/10209201.html

时间: 2024-10-18 20:56:36

极致21点开发DAY3的相关文章

极致21点开发DAY2

今天完成的主要内容时MainScene场景中设置面板的开发.游戏逻辑:点击设置按钮,弹出音乐设置弹框,弹框内容包括音乐的打开与关闭,退出游戏. 点击退出游戏,弹出退出游戏确认面板.效果图: 1.首先在Controller.cs文件中添加Settings对象以及这两个面板对象字段.然后添加打开设置面板的方法,代码如下: 1 public GameObject set_music; 2 public GameObject set_confirm; 3 4 private void OnSetBtn(

极致21点开发DAY1

最近在学习UI框架,无奈没有完整的项目学习,四处搜索找了这款游戏源码,在Unity2018上完美运行.于是乎开始学习开发这款游戏.今天主要完成的任务时拼UI.搭建了3个场景, StartScene, LoadingScene, MainScene.PlayScene比较复杂,包含了复杂的逻辑,放在最后学习. 1.StartScene 这个场景比较简单,主要包括3个部分:背景,Logo,开始按钮. 逻辑:点击开始按钮,进入LoadingScene. 在UICamera或者Canvas(StartS

Sea.js 提供简单、极致的模块化开发体验

http://seajs.org/docs/#intro 为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. 自然直观的代码组织方式:依赖的自动加载.配置的简洁清晰,可以让我们更多地享受编码的乐趣. Sea.js 还提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口. 兼容性 Sea.js 具备完善的测试用例,兼容所有主流浏览器:

Sea.js提供简单、极致的模块化开发体验

为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. 自然直观的代码组织方式:依赖的自动加载.配置的简洁清晰,可以让我们更多地享受编码的乐趣. Sea.js 还提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口. 兼容性 Sea.js 具备完善的测试用例,兼容所有主流浏览器: Chrome 3+ ? Firefox 2+ ? Safa

JavaEE(21) - JAAS开发安全的应用

1. 安全域.角色和用户组 容器提供的两种安全性控制:声明式安全控制和编程式安全控制 安全域是指用户.用户组和ACL的逻辑集合.服务器支持的两种常用安全域:RDBMS安全域和文件系统安全域. 2. JAAS基本流程 初始化请求-->初始化认证-->URL授权-->完成原来的请求-->调用EJB的业务方法 对JavaEE应用程序而言,用户提交的认证信息经过一次认证后,可以透明的传递到其他层.授权过程则需要执行多次. 3. 管理Weblogic服务器上的用户和组 4. 在Web应用中声

Python开发Day3之函数

函数定义 参数 1.普通参数 2.默认参数 3.动态参数 4.关键字参数 函数的返回值 函数的调用 局部变量和全局变量 匿名函数 内置函数 递归

i.MX6ULL开发板【终结者】硬件资源说明

1.1  初识 L i.MX6ULL 终结者开发板 终结者开发板迅为i.MX6ULL 终结者开发板硬件资源非常丰富,几乎将 i.MX6ULL 芯片的所有资源都扩展引出到底板上了,底板提供了丰富的外设接口,开发板的尺寸是 190mm*125mm,充分考虑了人性化设计,整体显得十分大气.I.MX6ULL 终结者底板板载资源如下:1.邮票孔核心板接口,支持迅为电子的 i.MX6UL/i.MX6ULL 核心板.2.一个电源指示灯(红色)3.一个状态指示灯(红色)4.板载 Wifi/蓝牙二合一模块5.一个

前端模块化开发的价值

本文发表在<程序员>杂志 2013 年 3 月刊,推荐购买. 前端模块化开发的价值 随着互联网的飞速发展,前端开发越来越复杂.本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及如何使用 Sea.js 进行前端的模块化开发. 恼人的命名冲突 我们从一个简单的习惯出发.我做项目时,常常会将一些通用的.底层的功能抽象出来,独立成一个个函数,比如 function each(arr) { // 实现代码 } function log(str) { // 实现代码 } 并像模像样地把这些函

iOS开发读取plist文件、iphone中plist文件的

在Xcode中建立一个iOS项目后,会自己产生一个.plist文件,点击时会看见它显示的是类似于excel表格: 但是,如果打开方式选择Source Code,你会看见它其实是一个xml文件. 我们会做一个小例子,在这个例子中我们自己建立一个plist文件并填入数据,然后运行时读取这个plist文件,并将数据填写在界面上. 首先要知道读取plist文件的方法,一般来说,使用代码 NSString *plistPath = [[NSBundle mainBundle] pathForResourc