|
发表于 2016-6-27 23:50:49
|
显示全部楼层
感谢分享,试了一下,代码中有几处错误,顺便优化了一点点
SumExp以及N的初始值设置不对,导致有时候明明命中了,但是并没有统计到。以及第一次必定命中的bug
下附优化后的代码,个人比较喜欢这种,留下位置加上列明后更加清晰:
Sub 按钮1_Click()
SumExp = 0 '总支出
SumInc = 0 '总收入
Per = 0.1 '击杀率
Gold = 10 '掉落金币
M = 14 '悲情值
N = 14
ap = 0 '实时调整概率
apUp = 0.05 '限制最高几率
apDown = -0.05 '限制最低几率
apt = 3 '概率调整步长
For i = 1 To 1000 '模拟次数
If Rnd < (Per + ap) Then '子弹击杀了怪物
SumInc = SumInc + 1 '收入加起来
Sheet1.Cells(i + 1, 5).Value = 1
N = M '重置悲情值
Else '子弹未击杀怪物
Sheet1.Cells(i + 1, 5).Value = 0
N = N - 1
Sheet1.Cells(i + 1, 6).Value = N '打印出悲情值
If N <= 0 Then
SumInc = SumInc + 1
N = M '重置悲情值
End If
End If
SumExp = SumExp + 1 '支出加起来
Sheet1.Cells(i + 1, 2).Value = SumExp '打印支出数值
Sheet1.Cells(i + 1, 3).Value = SumInc * Gold '打印收入数值
Sheet1.Cells(i + 1, 4).Value = SumInc * Gold - SumExp '打印纯收益数值
If i Mod apt = 0 Then '每隔apt炮调整一次概率
Select Case (SumInc * Gold - SumExp) / SumExp '根据收益调整几率
Case Is <= 0
ap = ap + 0.01 '收入过低,提高概率
Case Is > 0
ap = ap - 0.01 '收入过高,降低概率
End Select
Select Case ap '调整概率不超过上下限
Case Is >= apUp
ap = apUp
Case Is < apDown
ap = apDown
End Select
End If
Sheet1.Cells(i + 1, 7).Value = ap + Per '打印概率的变化情况
Next
End Sub
Sub Sheet1_按钮1_Click()
End Sub |
|