【问题标题】:A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll on a combat simulator战斗模拟器上的 Microsoft.VisualBasic.dll 中出现了“System.InvalidCastException”类型的第一次机会异常
【发布时间】:2013-11-01 22:55:56
【问题描述】:

我在尝试为我和另一个人正在进行的项目编写简单的战斗模拟时遇到问题。

模块模块1

Dim Player_Vitality As Integer



Dim PlayerReiatsu As Integer
Dim PlayerZanjustu As Integer
Dim PlayerHakuda As Integer
Dim PlayerHoho As Integer
Dim PlayerKido As Integer
Dim PlayerAbility As Integer



Dim Player_Physical_Damage As Integer
Dim Player_Spirit_Damage As Integer
Dim Player_Critical_Chance As Integer
Dim Player_Critical_Damage As Integer





Sub Main()



    Call Shuhei()



End Sub





Sub Shuhei()

    Dim Shuhei_reiatsu As Integer
    Dim Shuhei_Vitality_TurnStart As Integer
    Dim Shuhei_Vitality_TurnEnd As Integer
    Dim Attack As String
    Dim Kido As Integer
    Dim Sword As Integer
    Dim Shuhei_Temp As Integer






    PlayerZanjustu = 40
    PlayerHakuda = 50
    PlayerKido = 50
    PlayerAbility = 75
    Shuhei_reiatsu = 80

    Kido = Player_Spirit_Damage
    Sword = Player_Physical_Damage

    'Player_Vitality = 100
    Shuhei_Vitality_TurnStart = 1000



    Console.WriteLine("FIGHT 1")
    Console.ReadLine()

    Do While Shuhei_Vitality_TurnStart > 0



        Player_Physical_Damage = ((PlayerZanjustu + PlayerHakuda) - Shuhei_reiatsu)
        Player_Spirit_Damage = ((PlayerKido + PlayerAbility) - Shuhei_reiatsu)
        'Player_Critical_Chance = ((PlayerZanjustu + PlayerHoho) - Shuhei_reiatsu) / 100
        'Player_Critical_Damage = (PlayerZanjustu + PlayerHakuda) * 10

        Shuhei_Temp = Shuhei_Vitality_TurnStart

        Console.WriteLine("Shuhei has " & Shuhei_Temp & "Hp")
        Console.WriteLine("Which attack do you want to use?")
        Attack = Console.ReadLine




        If Attack = "Kido" Or Kido Then

            Shuhei_Vitality_TurnEnd = ((Shuhei_Temp) - Player_Spirit_Damage)
        ElseIf Attack = "Sword" Or Sword Then

            Shuhei_Vitality_TurnEnd = Shuhei_Temp - Player_Physical_Damage

        Else
            Console.WriteLine("Please choose an attack")

        End If

        Shuhei_Vitality_TurnEnd = Shuhei_Vitality_TurnStart
        If Shuhei_Vitality_TurnStart <= 0 Then
            Call FightEnd()
        End If
    Loop

    Console.ReadKey()
End Sub

Sub FightEnd()
    Console.WriteLine("Shuhei has been defeated")
    Console.ReadKey()
End Sub

这一切都被复制到一个新的子节点中,其中有一个没有目的的已停用垃圾,所以我怀疑这是问题所在,它只是战斗代码的骨架,但前面有 '禁用它。然后在底部的 End Module 命令

【问题讨论】:

  • If Attack = "Kido" Or Kido Then 应该是 If Attack = "Kido" Or Attack = Kido Then 您必须评估 OrAnd 运算符的每个表达式。
  • @DaveDev - 不,Dim Shuhei_reiatsu As IntegerVB.NET 在 C# 中肯定是 integer Shuhei_reiatsu;
  • @logixologist C# 应该是 int
  • 哎呀,你是对的......我太依赖智能感知了
  • 我只是拿了网站建议的标签

标签: vb.net


【解决方案1】:

在您的IF 声明中,Attack 永远不会是"Kido"Kido。您正在将字符串与字符串或字符串与整数进行比较,这可能是您的问题。尝试将 Kido 变量转换为字符串,这可能会抑制错误。

伪代码:

If Attack = "Kido" Or Kido.ToString

【讨论】:

  • 修正了这个公式一定是 zangustu 和 hakuda 的总和乘以负的 reiatsu 值
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 2012-07-18
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多