Vb.net VB2013,可能的算术错误

Vb.net VB2013,可能的算术错误,vb.net,Vb.net,在Shadowrun 5e中,有一条关于密闭空间内爆炸物的规则,称为“大块萨尔萨效应”。我正在尝试创建一个模拟“矮胖莎莎舞效果”的程序。我的大部分程序都在运行,但是,随着空间[米]的增加,爆炸反射[反弹]的数量也会增加。它应该是相反的,爆炸衰减[毫米]应该减少[反弹]。[墙]确定喷砂反射的表面数量。[damageDice]等于炸药的基础伤害[baseDamageDice]+([damageDice]/2)每次反射)。由于某种原因,[米]增加时,[伤害骰子]和[反弹]不会减少 Private Su

在Shadowrun 5e中,有一条关于密闭空间内爆炸物的规则,称为“大块萨尔萨效应”。我正在尝试创建一个模拟“矮胖莎莎舞效果”的程序。我的大部分程序都在运行,但是,随着空间[米]的增加,爆炸反射[反弹]的数量也会增加。它应该是相反的,爆炸衰减[毫米]应该减少[反弹]。[墙]确定喷砂反射的表面数量。[damageDice]等于炸药的基础伤害[baseDamageDice]+([damageDice]/2)每次反射)。由于某种原因,[米]增加时,[伤害骰子]和[反弹]不会减少

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click

    Dim meters As Integer = 0
    Dim dice As Integer = 0
    Dim damageDice As Integer = 0
    Dim baseDamageDice As Integer = 0
    Dim bounces As Integer = 0
    Dim hits As Integer = 0
    Dim walls As Integer = 0
    Dim minusMeters As Integer = 0
    Dim explosiveType As Integer = 0
    Dim ap As String = "-"
    Dim diceRoll As Integer = 0

    Randomize()

    walls = CInt(txtWalls.Text)

    explosiveType = cbExplosiveType.SelectedIndex

    If explosiveType < 0 Then
        explosiveType = 0
        cbExplosiveType.SelectedIndex = 0
    End If

    Select Case explosiveType
        Case 0
            minusMeters = 1
            baseDamageDice = 18
            ap = "+5"
        Case 1
            minusMeters = 2
            baseDamageDice = 16
            ap = "-2"
        Case 2
            minusMeters = 4
            baseDamageDice = 24
            ap = "-4"
        Case 3
            minusMeters = 4
            baseDamageDice = 24
            ap = "-10"
        Case 4
            minusMeters = 1
            baseDamageDice = 23
            ap = "+5"
        Case 5
            minusMeters = 2
            baseDamageDice = 21
            ap = "-2"
    End Select

    diceRoll = CInt(Math.Floor((6 - 1 + 1) * Rnd())) + 1

    If diceRoll >= 5 Then
        hits = hits + 1
    End If

    dice = baseDamageDice

    For x = 1 To walls

        meters = CInt(txtMeters.Text)
        damageDice = baseDamageDice

        Do

            damageDice = Math.Round(damageDice / 2)
            dice = dice + damageDice
            meters = meters - minusMeters
            bounces = bounces + 1

        Loop While meters >= 0

    Next

    For i As Integer = 1 To dice
        diceRoll = CInt(Math.Floor((6 - 1 + 1) * Rnd())) + 1

        If diceRoll >= 5 Then
            hits = hits + 1
        End If
    Next

    lblHitsPerBounce.Text = Math.Round(hits / bounces)
    lblTimes.Text = bounces
    lblResult.Text = dice
    lblNumHits.Text = hits
    lblAPOutput.Text = ap

End Sub
Private Sub btnCalculate\u Click(发送者作为对象,e作为事件参数)处理btnCalculate。单击
整数为0的仪表尺寸
将骰子变暗为整数=0
Dim damageDice作为整数=0
Dim baseDamageDice作为整数=0
Dim反弹为整数=0
以整数=0的形式显示Dim hits
将墙的尺寸调整为整数=0
整数=0时的尺寸单位
将爆炸类型设置为整数=0
将ap变暗为字符串=“-”
以整数=0的形式滚动
随机化
walls=CInt(txtwarls.Text)
explosiveType=cbExplosiveType.SelectedIndex
如果爆炸类型<0,则
爆炸类型=0
cbExplosiveType.SelectedIndex=0
如果结束
选择大小写爆炸类型
案例0
米=1
baseDamageDice=18
ap=“+5”
案例1
米=2
baseDamageDice=16
ap=“-2”
案例2
米=4
baseDamageDice=24
ap=“-4”
案例3
米=4
baseDamageDice=24
ap=“-10”
案例4
米=1
baseDamageDice=23
ap=“+5”
案例5
米=2
baseDamageDice=21
ap=“-2”
结束选择
diceRoll=CInt(数学层((6-1+1)*Rnd())+1
如果掷骰子>=5,则
点击次数=点击次数+1
如果结束
骰子=基本伤害骰子
对于x=1的墙
米=CInt(txtMeters.Text)
损坏骰子=基本损坏骰子
做
伤害骰子=数学回合(伤害骰子/2)
骰子=骰子+伤害骰子
米=米-米
反弹=反弹+1
当仪表>=0时循环
下一个
对于i作为整数=1进行骰子
diceRoll=CInt(数学层((6-1+1)*Rnd())+1
如果掷骰子>=5,则
点击次数=点击次数+1
如果结束
下一个
lblHitsPerBounce.Text=Math.Round(点击/反弹)
lblTimes.Text=反弹
lblResult.Text=骰子
lblNumHits.Text=hits
lblAPOutput.Text=ap
端接头

能否为当前变量提供一些值?他们是哪种类型的?假设damageDice为1,每次循环通过数学运算。Round(damageDice/2)将是Math。Round(0.5)=1,因此它不会真正下降。你能把你的问题改好一点吗?现在它看起来像一个巨大的文本驼峰:D,反弹在这里增加,不是吗?你设置了断点并调试了吗
damageDice
不需要在循环中重新计算,并且不使用
dice
最小值的值是多少?其中一些东西的起始值可能不是您所期望的。我因为在上一次尝试这个问题时放置了太多代码而被标记。我将对代码进行编辑以获得更完整的视图。我尝试过断点,我最后一次认真的编程活动是大约七年前为测试设备开发METCAL应用程序。(METCAL是一种FORTRAN类型的语言,用于通过GPIB接口控制测试设备)如果我理解您描述中的逻辑正确,那么
dice
的增加不应该在循环之外吗?这样您就只添加重新计算的damageDice,而不是完整的重新计算序列?我猜,
反弹也会如此