vb.net – 在结束sub之前让子程序等待按钮输入

vb.net – 在结束sub之前让子程序等待按钮输入,第1张

概述我正在使用do while循环,在每次循环之后,需要询问用户他/她下一步要做什么.该节目是一个口袋妖怪风格的战斗RPG,除了让口袋妖怪打架,你自己打怪物. 我正在寻找的是口袋妖怪/最终幻想的战斗风格. 这是我处理战斗的子: Private Sub Battle(ByVal Name As String, ByVal life As Integer, ByVal damage As Integer) 我正在使用do while循环,在每次循环之后,需要询问用户他/她下一步要做什么.该节目是一个口袋妖怪风格的战斗RPG,除了让口袋妖怪打架,你自己打怪物.

我正在寻找的是口袋妖怪/最终幻想的战斗风格.

这是我处理战斗的子:

Private Sub Battle(ByVal name As String,ByVal life As Integer,ByVal damage As Integer)    lbl_Monstername.Text = name    mobCurrHealth = mobMaxHealth    lbl_MonsterHP.Text = mobCurrHealth & " / " & mobMaxHealth    bar_monsterHP.Value = mobCurrHealth    bar_monsterHP.Maximum = mobMaxHealth    txtbx_Action.AppendText(Environment.Newline & "You find a " & name)    lbl_Monstername.Visible = True    lbl_MonsterHP.Visible = True    bar_monsterHP.Visible = True    wait(2000)    txtbx_Action.AppendText(Environment.Newline & "What would you like to do?")    btn_Attack.Visible = True    btn_Run.Visible = True'Here I want the program to wait for button input,but i still have to find a way to do that        End Sub

在“您想做什么”之后,将显示2(3)个按钮

>攻击
>跑
>(库存)

但是,正如你所看到的那样(而且我确实理解了什么是错的,我只是不知道如何解决它)我的战斗子按钮在按钮可见后结束.

我希望子等待,直到我按下这些按钮中的任何一个按下,然后相应地采取行动.

我怎样才能做到这一点?

编辑:

这是我使用的代码,其中称为“战斗”子:

Private Sub btn_Adventure_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btn_Adventure.Click    btn_Adventure.Visible = False    txtbx_Action.Visible = True    Dim rng As New Random    Dim MobGen As Integer = rng.Next(1,4)    Select Case MobGen        Case 1            mobname = "Rat"            mobMaxHealth = 5            mobdamage = 2        Case 2            mobname = "Bat"            mobMaxHealth = 7            mobdamage = 3        Case 3            mobname = "Snake"            mobMaxHealth = 9            mobdamage = 4        Case 4            mobname = "Wolf"            mobMaxHealth = 11            mobdamage = 5    End Select    txtbx_Action.AppendText(Environment.Newline & "You run around the forest trying to find something to kill")    wait(1500)    Battle(mobname,mobMaxHealth,mobdamage)    btn_Adventure.Visible = TrueEnd Sub

另外,如果您认为我现在处理程序的方式非常错误,请告诉我如何改进它!这是一个尝试更好地学习vb.net语言的爱好项目,因此任何建议或建设性批评都非常赞赏!

解决方法 我在这个完整的例子中避免了绑定和其他事情,试图让它更容易理解并尽可能地保持它.

Public AllMobs As New List(Of Mob)Public Player As MobPublic CurrentMob As MobPrivate Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load    AllMobs.Add(New Mob() With {.name = "rat",.damage = 2,.MaxHealth = 5,.CurrentHealth = 5})    AllMobs.Add(New Mob() With {.name = "bat",.damage = 3,.MaxHealth = 7,.CurrentHealth = 7})    AllMobs.Add(New Mob() With {.name = "wolf",.damage = 5,.MaxHealth = 11,.CurrentHealth = 11})    Player = New Mob() With {.name = "Gutanoth",.damage = 1,.MaxHealth = 100,.CurrentHealth = 100}    GetNextfight()End SubPrivate Sub GetNextfight()    If CurrentMob Is nothing Then        CurrentMob = SpawnMob()        txtbx_Action.AppendText("You continue into the forest" & vbNewline)        txtbx_Action.AppendText(CurrentMob.name + " is here" & vbNewline)    End IfEnd SubPrivate Sub NextBattleAction()   If Player.IsDead Then        MessageBox.Show("You dIEd. Lose!")        Close()    ElseIf CurrentMob.IsDead Then        txtbx_Action.AppendText("---VictorIoUs!" & vbNewline)        AllMobs.Remove(CurrentMob)        CurrentMob = nothing ' destroy mob object    End If    If AllMobs.Count = 0 Then        MessageBox.Show("You've killed them all. Win!")        Close()    Else        GetNextfight()    End If    If CurrentMob IsNot nothing Then        lbl_MonsterHP.Text = CurrentMob.CurrentHealth & " / " & CurrentMob.MaxHealth    End IfEnd SubPrivate Function SpawnMob() As Mob    If AllMobs.Count = 0 Then Return nothing    Dim rng As New Random    Dim selectedindex As Integer = rng.Next(AllMobs.Count)    Return AllMobs(selectedindex)End FunctionPrivate Sub btn_Attack_Click(sender As Object,e As EventArgs) Handles btn_Attack.Click    CurrentMob.Attack(Player)    txtbx_Action.AppendText(CurrentMob.name & " attacks" & vbNewline)    Player.Attack(CurrentMob)    txtbx_Action.AppendText("you attack " & vbNewline)    NextBattleAction()End SubPrivate Sub btn_Run_Click(sender As Object,e As EventArgs) Handles btn_Run.Click    txtbx_Action.AppendText("you run away" & vbNewline)    CurrentMob = nothing ' make no current mob     GetNextfight()End Sub

这应该放在一个单独的类文件Mob.vb中

Public Class Mob    Property name() As String    Property MaxHealth() As Integer    Property CurrentHealth() As Integer    Property damage As Integer    Public Sub Attack(targetMob As Mob)        targetMob.CurrentHealth = targetMob.CurrentHealth - damage    End Sub    Public Function IsDead() As Boolean        If CurrentHealth <= 0 Then Return True Else Return False    End FunctionEnd Class
总结

以上是内存溢出为你收集整理的vb.net – 在结束sub之前让子程序等待按钮输入全部内容,希望文章能够帮你解决vb.net – 在结束sub之前让子程序等待按钮输入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1212894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存