本站原创,欢迎转载;尊重他人劳动,转载时保留以下信息:
本文转自:360ITO技术社区
原文标题:游戏道具出现概率的算法
原文地址:http://www.360ito.com/article/156.html
目前开发的游戏里需要处理玩家点击宝箱后随机得到一些钱,得到钱的概率如下:
金钱 |
概率 |
500 |
1% |
300 | 5% |
100 | 24% |
50 | 70% |
在这里我们需要先做一个能产生 1- 100之间的随机数,代码如下:
/** * 产生一个随机数 * @param min - 最小数 * @param max - 最大数 * @return * 最小数 和 最大数 - 1 范围的数 * 例如: * for (var i:int = 0; i < 300; i++) { * trace(JFRandomUtil.random(1,3).toString()); * } * 结果: * 1,2,1,1,1,1,2 ....,1,1,2,2,2,2,2,1,1,1,2 */ function random(min:Number, max:Number):Number { return Math.floor(Math.random() * (max - min)) + min; }
/** * 根据概率表产生一个概率下标 * @param arg_ProbabilityTable - 概率表 * @return * 概率表下标 */ function makeProbabilityValues(arg_ProbabilityTable:Array):int { var i:int; var randomValue:int = random(1,101); for (i = 0; i < arg_ProbabilityTable.length; i++) { if (randomValue <= arg_ProbabilityTable[i]) { return i; } randomValue -= arg_ProbabilityTable[i]; } return arg_ProbabilityTable.length; }
var oneCount:int = 0; var twoCount:int = 0; var threeCount:int = 0; var fourCount:int = 0; for (var i:int = 0; i < 10000; i++) { var j:int = makeProbabilityValues([70,24,5,1]); if (j < 0 || j > 3) { Trace('error! j='+j.toString()); } if (j == 0) { ++oneCount; } if (j == 1) { ++twoCount; } if (j == 2) { ++threeCount; } if (j == 3) { ++fourCount; } } Trace ('one = ' + oneCount.toString() + ' two:' + twoCount.toString() + ' three:' + threeCount.toString() + ' four:' + fourCount.toString());
结果:
one = 7019 two:2357 three:522 four:102
共有0个评论 我要评论»
网友回复/评论仅代表其个人看法,并不表明本社区同意其观点或证实其描述。
1.不欢迎无意义的回复/评论和类似“顶”、“沙发”之类没有营养的文字
如果只是想简单的表个态,请点 有用无用支持反对 等按钮
2.发言之前请再仔细看一遍文章,或许是您遗漏、误解了,理性讨论、切莫乱喷
3.严禁发布违法、违规的信息,请勿到处招贴广告、发布软文;
4.如果您发现自己的回复/评论不见了,请参考以上3条
5.不停制造违规、垃圾信息的,账户将被禁止