最近一时心血来潮做了个挂机小游戏,现在总结一下主要技术
最核心的就是超大数字的计算,在挂机游戏中动不动就是亿亿级数字的计算,已经完全超出普通的类型的长度。但是c#提供BigInteger可以进行超大数字的计算,非常方便。但注意不能进行浮点数的运算。
使用时可以将string转化为BigInteger 进行加减乘除运算,计算完后转换回string方便序列化以及储存 。
using System.Numerics;
string s="1000000000000000000000000000000000";
BigInteger money= BigInteger.Parse(s)+BigInteger.Parse(s);
s=money.ToString();
转换回字符串后可以方便处理在游戏中的数值显示。如在我的游戏中的数值限定最多显示7位数,其余用10的次方表示。
public static string ConvertNum(BigInteger b)
{
int num = b.ToString().Length - 7;
string s = "";
if (num>1)//9位数开始
{
s = b.ToString().Substring(0, 6)+"*"+"10^"+num;
}
else
{
s = b.ToString();
}
return s;
}
//10000000000=10000000*10^2;
手机切换回游戏界面计算收益以及离线收益计算
在手机挂机游戏过程中,经常会切换到其他应用界面,回到游戏界面挂机数值也应该会增加。所以我们应该记录离开界面时的时间,回到界面时获得当前时间和之前记录时间的差值,用来计算游戏在后台时收益。
在安卓中我们可以使用OnApplicationPause函数进行应用暂停时的调用。
float gameHTtime = 0;
float startHTtime = 0;
private void OnApplicationPause(bool pause)
{
if (pause)
{
//将玩家游戏切后台的运行时间检测到
startHTtime = Time.realtimeSinceStartup;
Debug.Log("离开游戏"); // 返回游戏的时候触发 执行顺序 1
}
else
{
//回到前台我们需要将后台的倒计时方法关闭掉
//将游戏的运行总时间检测到 使用总的游戏时间-玩家的切入后台的时间 就是玩家在切后台的总时间
gameHTtime = Time.realtimeSinceStartup - startHTtime;
//BigInteger profit=10000000000000000000000000;
//money += profit* (int)gameHTtime;
Debug.Log("返回到游戏 刷新用户数据"); // 返回游戏的时候触发 执行顺序 2
}
}
还有一种情况就是游戏在后台时被退出了,我们可以使用OnApplicationQuit函数进行退出时的调用,进行后台收益的计算,前提是在 OnApplicationPause中已经记录了离开界面时的时间。
private void OnApplicationQuit()
{
gameHTtime = Time.realtimeSinceStartup - startHTtime;
//BigInteger profit=10000000000000000000000000;
//money += profit* (int)gameHTtime;
//这里可以保存游戏
}
离线收益计算是挂机游戏中非常重要的一环,我选用的方案是计算退出游戏的时间与再次打开游戏的时间的差值,进行离线收益计算
具体可以参考
Unity中获取离线时间
最后可以看看我做的小游戏是否是自己想要的效果
游戏页面