本文主要是介绍可控的金币随机掉落算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需求是这样的,我们设计好了一个副本,里面怪物和怪的数量已经确定了,就100只吧,现在我们想让怪物随机得掉落金币,但是一个副本掉落金币的总量需要精确控制到10000金。那么算法应该怎么写?突然觉得很像微信抢红包的算法。
要实现起来,方法很多,这里记录一个我觉得最简单有效的办法。
const int c_min_package = 20;
int DropsManager::dropsCoin(int leftmoney, int leftcount)
{int money = 0;assert(leftmoney > 1);if(leftcount == 1){leftcount--;money = leftmoney;}else{float max = leftmoney / leftcount * 2; //最多拿两人份money = CCRANDOM_0_1() * max;if(money < c_min_package)money = c_min_package;}return money;
}
常量 c_min_package 是我们定制的最小金币量
参数1. leftmoney 剩余金币总量
参数2. leftcount 剩余分金币的人的数量
测试代码跑一下
int totalmon = 10000;int totalpackage = 100;int leftmoney = totalmon;int leftpackage = totalpackage;int totalmon2 = 0;for(int index = 1; index <= totalpackage; index++){int drop = DM()->dropsCoin(leftmoney, leftpackage);CCLOG("[%d] drop %d", index, drop);leftmoney -= drop;if(drop > 0)leftpackage--;totalmon2 += drop;}assert(totalmon2 == totalmon);
这篇关于可控的金币随机掉落算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!