DataRecord
来源:互联网 发布:网络机顶盒ir接口 编辑:程序博客网 时间:2024/05/27 21:08
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Security.Cryptography;using System.Text;using System;public class DataRecord : MonoBehaviour { public static DataRecord self; private static Hashtable table;// Use this for initialization void Awake() { self = this; }public static int AddPet(PetXmlData data) { Hashtable tmp = new Hashtable(); tmp.Add("id", data.id); tmp.Add("name", data.name); tmp.Add("level", data.level); tmp.Add("hp", data.hp); tmp.Add("attack", data.attack); tmp.Add("catchcost", data.catchcost); tmp.Add("worth", data.worth); tmp.Add("probability", data.probability); tmp.Add("headImage", data.headImage); tmp.Add("curHp", data.hp); //当前血量 tmp.Add("isFight", 0); //是否出战 int index = 0; foreach (DictionaryEntry var in table) { if (var.Key.ToString().Contains("FightId") || var.Key.ToString().Contains("secret key")) continue; if(index < int.Parse(var.Key.ToString())) index = int.Parse(var.Key.ToString()); } table.Add((index+1).ToString(), tmp); Save(); return (index + 1); } public static Hashtable GetPet(int id)//人物宠物表table索引id(不同于xml中宠物唯一id) { Hashtable tmp = table[id.ToString()] as Hashtable; return tmp; } /// <summary> /// /// </summary> /// <param name="id">索引</param> /// <returns></returns> public static bool DelPet(int id) { //索引id if (table.Contains(id.ToString())) { table.Remove(id.ToString()); return true; } else return false; } public static bool SetFight(int id, int index, bool Fight = true) { //(拥有所有宠物列表中索引id,出战队伍索引位置index,是否出战Fight) Hashtable tmp = table[id.ToString()] as Hashtable; //if (int.Parse(tmp["isFight"].ToString()) == 1)//去掉后,即使选中已出战的宠物,也可继续(位置和你确认队伍一致) //{ // Debug.Log(id + "已出战"); // return false; //} tmp["isFight"] = Fight ? 1 : 0; table[id.ToString()] = tmp; if (!table.ContainsKey("FightId" + index)) table.Add("FightId" + index, id); else table["FightId" + index] = id; Save(); return true; } public static Hashtable GetFightData(int index)//位置 { if(table.ContainsKey("FightId" + index)) { int i = int.Parse(table["FightId" + index].ToString()); return GetPet(i); } else return null; } public static int GetRecordIdByPos(int index) { if(table.ContainsKey("FightId" + index)) { return int.Parse(table["FightId" + index].ToString()); } return 0; } public static Hashtable GetPetList() { Hashtable tmp = new Hashtable(); foreach(DictionaryEntry var in table) { if (var.Key.ToString().Contains("FightId") || var.Key.ToString().Contains("secret key")) continue; Hashtable temp = var.Value as Hashtable; tmp.Add(var.Key,temp); } return tmp; } public static bool GetFight(int id) { Hashtable tmp = table[id.ToString()] as Hashtable; return int.Parse(tmp["isFight"].ToString()) == 1 ; } public static void AddPetHp(int id,int add)//索引为id 的宠物数据中 Hp变化 { Hashtable tmp = table[id.ToString()] as Hashtable; int hp = int.Parse(tmp["curHp"].ToString()); hp += add; if (hp < 0) { hp = 0; }//hp小于0,置为0 tmp["curHp"] = hp; table[id.ToString()] = tmp; Save(); } public static PetXmlData TranslateData(Hashtable data) { PetXmlData tmp = new PetXmlData(); tmp.id = int.Parse(data["id"].ToString()); tmp.hp = int.Parse(data["curHp"].ToString()); tmp.level = int.Parse(data["level"].ToString()); tmp.name = data["name"].ToString(); tmp.headImage = data["headImage"].ToString(); tmp.attack = int.Parse(data["attack"].ToString()); return tmp; } public static bool IsHavePet(int petID)//该宠物角色是否拥有 { foreach(Hashtable tmp in table) { if(tmp.ContainsKey("id") && tmp["id"].ToString() == petID.ToString()) { return true; } } return false; } public static int GetPetHp(int id) { Hashtable tmp = table[id.ToString()] as Hashtable; if(tmp !=null) return int.Parse(tmp["curHp"].ToString()); return 0; } public static void Load() { if (PlayerPrefs.HasKey("data")) { string json = Decrypt(PlayerPrefs.GetString("data")); if (!string.IsNullOrEmpty(json)) { table = json.hashtableFromJson();#if UNITY_ANDROID string identity = SystemInfo.deviceUniqueIdentifier; if (string.IsNullOrEmpty(identity)) { identity = "datadata"; } Debug.Log("device uniqueIdentifier = " + identity); if (table.ContainsKey("secret key")) { if ((string)table["secret key"] != identity) { ClearData(); } } else { table.Add("secret key", identity); }#endif return; } PlayerPrefs.DeleteKey("data"); } table = new Hashtable(); } public static void Save() { string json = table.toJson(); //Debug.Log("save data = " + json ); string encryptJson = Encrypt(json); PlayerPrefs.SetString("data", encryptJson); PlayerPrefs.Save(); } public static void ClearData() { table.Clear(); Save(); } private static string Encrypt(string toE) { // Monodevelop9Unity1File8Edit2View byte[] keyArray = UTF8Encoding.UTF8.GetBytes("Monodevelop9Unity1File8Edit2View"); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } private static string Decrypt(string toD) { byte[] keyArray = UTF8Encoding.UTF8.GetBytes("Monodevelop9Unity1File8Edit2View"); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateDecryptor(); byte[] toEncryptArray = Convert.FromBase64String(toD); try { byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return UTF8Encoding.UTF8.GetString(resultArray); } catch (Exception ex) { Debug.Log("Decrypt data failed, reset data. " + ex.Message); return null; } }}
2 0
- DataRecord
- 《组合变身小宠物游戏》DataRecord(修改更新中)【初学者】
- 2_MongoDB基础使用
- java 发送邮件
- 用Fragment+FragmentTabHost++ViewPager 实现底部菜单栏
- Python 的切片操作以及 利用步长对序列进行倒序取值
- vim 命令
- DataRecord
- 教你如何第一时间获取MindManager 2017
- 线程详解
- 关于一个项目中引入子项目的问题
- ie6至兼容
- mysql 增量导入到elasticsearch
- 解决火狐浏览器下载文件文件名乱码的问题
- 在前台接收jsonp数据(练习)
- Swift学习Day01(Object_c 与Swift的相互调用 )