利用闭包实现动态多面骰子系统
May 26th, 2009
- function makeDice(values, probPoints){
- var sidesEdge = [0];
- for(var i = 0; i < values.length; i++){
- sidesEdge.push(sidesEdge[sidesEdge.length-1]+(probPoints[i]|0));
- }
- return {
- thrown:function(){
- var val = (sidesEdge[sidesEdge.length-1] * Math.random())|0;
- for(var i = 0; i < sidesEdge.length; i++){
- if(val < sidesEdge[i]){
- break;
- }
- }
- return values[i - 1];
- }
- }
- }
- var values = ['A','B','C','D','E','F','G'];
- var probPoints = [28,24,20,15,7,5,1];
- var dice = makeDice(values, probPoints)
- var result = [0,0,0,0,0,0,0];
- for(var i = 0; i < 10000; i++){
- result[dice.thrown().charCodeAt(0)-65]++;
- }
- document.write("总次数10000,各值出现次数:");
- for(var i = 0; i < values.length; i++){
- document.write(values[i]+":"+result[i]+" ");
- }
十分艰难的看懂