开发者社区 问答 正文

Visual Basics-如果if语句完成,似乎自己重复一遍,并说其他玩家赢了。这会使其他玩家的健

我是编码新手,有一个我无法解决的问题。我正在制作口袋妖怪的战斗场景,在击败其他玩家之后,游戏将重置。由于某种原因,如果对手拥有59点生命,并且使用了30点生命值的移动,则表示您赢了,因为现在的值是30以下。

这是我的代码的一部分

`lblComputerHealth.Text = prgcomputer.Value & "/ " & prgcomputer.Maximum
        If btnPlayerChoice.Text = "blastoise" Then
            If prgPlayer.Value <= 262 And prgPlayer.Value >= 183 Then
                prgPlayer.ForeColor = Color.Green
            ElseIf prgPlayer.Value <= 182 And prgPlayer.Value >= 131 Then
                prgPlayer.ForeColor = Color.Yellow
            ElseIf prgPlayer.Value <= 130 And prgPlayer.Value >= 66 Then
                prgPlayer.ForeColor = Color.Orange
            ElseIf prgPlayer.Value <= 65 Then
                prgPlayer.ForeColor = Color.Red
            End If

            If frmSplash.btnComputer.Text = "blastoise" Then
                If prgcomputer.Value <= 262 And prgcomputer.Value >= 183 Then
                    prgcomputer.ForeColor = Color.Green
                ElseIf prgcomputer.Value <= 182 And prgcomputer.Value >= 131 Then
                    prgcomputer.ForeColor = Color.Yellow
                ElseIf prgcomputer.Value <= 130 And prgcomputer.Value >= 66 Then
                    prgcomputer.ForeColor = Color.Orange
                ElseIf prgcomputer.Value <= 65 Then
                    prgcomputer.ForeColor = Color.Red
                End If
            End If

            If prgcomputer.Value <= 30 Then
                'ADD A DO YOU WISH TO PLAY AGAIN BUTTON
                MessageBox.Show("YOU WON")
                intWins += 1
                frmSplash.btnPlayerChoiceone.Text = ""
                intwhy = 1
                strplayerchoice = ""
                intCompAttack = 0
                intwhyone = 0
                strcool = ""
                frmSplash.btnComputer.Text = ""
                frmSplash.btnPlayerChoiceone.Text = ""
                picPlayer.Image = Nothing
                picComputer.Image = Nothing
                btnChoosePlayer.Visible = True
                btnMoveOne.Visible = False
                btnMoveTwo.Visible = False
                btnMoveThree.Visible = False
                btnMoveFour.Visible = False
                prgPlayer.Value = 262
                prgcomputer.Value = 262
                lblWins.Text = intWins
                prgcomputer.ForeColor = Color.ForestGreen
                prgPlayer.ForeColor = Color.Green
            Else
                prgcomputer.Value = prgcomputer.Value - 30
            End If

        End If
            If frmSplash.btnComputer.Text = "blastoise" Then
                MessageBox.Show("Oponent thinking of move")

                Threading.Thread.Sleep(1000)

                intCompAttack = rand.Next(2) 'you will have to make this 3 some day
                Select Case intCompAttack
                    Case 0
                        prgPlayer.Value -= 20
                        lblPlayerHealth.Text = prgPlayer.Value & "/ " & prgPlayer.Maximum
                        MessageBox.Show("Opponent used Tackle and delt 20 damage")
                            'use a loop in the animation
                    Case 1
                        prgPlayer.Value -= 30
                        lblPlayerHealth.Text = prgPlayer.Value & "/ " & prgPlayer.Maximum
                        MessageBox.Show("opponent used Water Gun and delt 30 damage")
                End Select

            End If'

这是我认为不起作用的部分

'If prgcomputer.Value <= 30 Then
                'ADD A DO YOU WISH TO PLAY AGAIN BUTTON
                MessageBox.Show("YOU WON")
                intWins += 1
                frmSplash.btnPlayerChoiceone.Text = ""
                intwhy = 1
                strplayerchoice = ""
                intCompAttack = 0
                intwhyone = 0
                strcool = ""
                frmSplash.btnComputer.Text = ""
                frmSplash.btnPlayerChoiceone.Text = ""
                picPlayer.Image = Nothing
                picComputer.Image = Nothing
                btnChoosePlayer.Visible = True
                btnMoveOne.Visible = False
                btnMoveTwo.Visible = False
                btnMoveThree.Visible = False
                btnMoveFour.Visible = False
                prgPlayer.Value = 262
                prgcomputer.Value = 262
                lblWins.Text = intWins
                prgcomputer.ForeColor = Color.ForestGreen
                prgPlayer.ForeColor = Color.Green
            Else
                prgcomputer.Value = prgcomputer.Value - 30
            End If    `

展开
收起
几许相思几点泪 2019-12-08 22:31:07 313 分享 版权
阿里云 AI 助理回答

看起来你正在使用某种编程语言(可能是VB.NET或C#,基于你使用的.Text.Value属性)来开发一个游戏界面,其中lblComputerHealth可能是一个标签用来显示对手的当前生命值,而prgComputer.Value则可能是一个进度条控件表示生命值的实际数值。

根据你的描述,问题在于当对手使用了一个消耗30点生命的技能后,即使其剩余生命值低于30,游戏也会判定你胜利。这通常意味着在代码中对战斗逻辑的处理有误,特别是对生命值减少后的判断部分。

要解决这个问题,你需要确保在更新生命值显示之后正确地检查是否应该结束战斗。这里提供一个简化的逻辑示例,帮助你理解如何修改代码:

// 假设currentHealth是对手当前的生命值,damage是技能造成的伤害
int currentHealth = int.Parse(lblComputerHealth.Text); // 获取当前生命值
int damage = 30; // 对手技能消耗的生命值

// 计算新的生命值并确保它不低于0
currentHealth -= damage;
currentHealth = Math.Max(0, currentHealth); // 确保生命值不会变成负数

// 更新UI显示的新生命值
lblComputerHealth.Text = currentHealth.ToString();

// 检查对手生命值是否低于或等于0,如果是,则游戏结束,玩家胜利
if (currentHealth <= 0)
{
    // 游戏结束的处理逻辑,比如显示胜利信息、重置游戏等
    MessageBox.Show("你赢了!");
    // 这里添加你的重置游戏逻辑
}
else
{
    // 如果生命值大于0,继续游戏
    // 可能需要更新其他UI元素如进度条(prgComputer.Value)以反映新的生命值
    prgComputer.Value = currentHealth;
}

请根据你的实际项目环境调整上述代码。关键在于先计算新的生命值,并在更新UI之前判断是否满足胜利条件。如果满足胜利条件,再执行相应的胜利处理逻辑。这样可以确保在正确的时机判断游戏结果。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: