VB2013,可能的算术错误

时间:2014-12-26 14:33:28

标签: vb.net

在Shadowrun 5e中,有一条关于限制空间内爆炸物的规则称为“矮胖萨尔萨效应”。我正在尝试创建一个模拟'Chunky Salsa Effect'的程序。我的大部分程序都在工作,但随着空间[米]的大小增加,爆炸反射次数[反弹]增加。它应该是反向的,爆炸衰减[minusMeters]应该减少[反弹]。 [wall]确定了爆炸反射出来的表面数量。 [damageDice]等于爆炸的基础伤害[baseDamageDice] +(([damageDice] / 2)每次反射)。出于某种原因,当[米]增加时,[damageDice]和[bounces]不会减少。

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

0 个答案:

没有答案