Vb.net 骰子按钮赢了';我不允许在游戏中掷骰子?

Vb.net 骰子按钮赢了';我不允许在游戏中掷骰子?,vb.net,dice,Vb.net,Dice,我刚刚对此应用程序的代码做了一些更改,但由于某些原因,它仍然不起作用。我的重新启动按钮没有重新启动表单,我的分数没有显示,结果没有显示,骰子没有滚动 以下是指向我的GUI的链接: 基本上,一个人类玩家正在使用VB内置的随机数生成器与计算机进行游戏。游戏的目标是让任何一个对手的得分高于另一个对手,以1到99(如1、3、5、7、9、11、13等)的奇数比赛形式赢得比赛 问题是,当您单击按钮时,骰子图像不会显示 Public Class DiceBattleForm Private Sub

我刚刚对此应用程序的代码做了一些更改,但由于某些原因,它仍然不起作用。我的重新启动按钮没有重新启动表单,我的分数没有显示,结果没有显示,骰子没有滚动

以下是指向我的GUI的链接:

基本上,一个人类玩家正在使用VB内置的随机数生成器与计算机进行游戏。游戏的目标是让任何一个对手的得分高于另一个对手,以1到99(如1、3、5、7、9、11、13等)的奇数比赛形式赢得比赛

问题是,当您单击按钮时,骰子图像不会显示

Public Class DiceBattleForm

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub ExitButton_Click(sender As Object, e As EventArgs) Handles ExitButton.Click
        Dim RESPONSE As MsgBoxResult
        RESPONSE = MsgBox("Do you want to exit?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question)
        If RESPONSE = MsgBoxResult.Yes Then
            Me.Dispose()
        End If
    End Sub

    Private Sub RollButton_Click(sender As Object, e As EventArgs) Handles RollButton.Click
        If GameTextBox.Text <= "0" Then
            MsgBox("Number of Games > 0", MsgBoxStyle.Critical)
            Application.Restart()
        End If

        If GameTextBox.Text > "0" Then
            GameTextBox = Convert.ToInt32(GameTextBox.Text)
        End If


        DisplayDie(PCDice1)
        DisplayDie(PCDice2)
        DisplayDie(PCDice3)

        DisplayDie(YouDice1)
        DisplayDie(YouDice2)
        DisplayDie(YouDice3)
    End Sub

    Sub DisplayDie(diePictureBox As PictureBox)
        'GENERATE random integer in range 1 to 6
        Dim face As Integer = randomObject.Next(1, 7)

        'retrieve specific die image from resources
        Dim pictureResource = My.Resources.ResourceManager.GetObject(String.Format("die{0}", face))

        'Convert pictureResource to type Image and display in ImageBox
        diePictureBox.Image = CType(pictureResource, Image)
    End Sub ' DisplaDie


    Private Sub GameTextBox_Validating(sender As Object, e As EventArgs) Handles GameTextBox.TextChanged
        If GameTextBox.Text > "0" Then
            Do
                MsgBox(GameTextBox.Text + " round(s) will be played enjoy!")
            Loop While GameTextBox.Text = "STOP"
        End If
        GameTextBox.Enabled = False
    End Sub

    Private Sub RestartButton_Click(sender As Object, e As EventArgs) Handles RestartButton.Click
        ' Reset or clear any controls (recommended)
        DiceBattleForm.Clear()
        ' NOT recommended:
        ' Application.Restart()
    End Sub
End Class
公共类表单
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
端接头
私有子ExitButton\单击(发送者作为对象,e作为事件参数)处理ExitButton。单击
作为MsgBoxResult的Dim响应
RESPONSE=MsgBox(“是否要退出?”、MsgBoxStyle.YesNo或MsgBoxStyle.Question)
如果RESPONSE=MsgBoxResult.Yes则
我
如果结束
端接头
Private Sub RollButton\u Click(发件人作为对象,e作为事件参数)处理RollButton。单击
如果游戏文本框。文本“0”,则
GameTextBox=Convert.ToInt32(GameTextBox.Text)
如果结束
显示模块(PCDice1)
显示模块(PC2)
显示模块(PCDice3)
DisplayDie(YouDice1)
DisplayDie(YouDice2)
DisplayDie(YouDice3)
端接头
子显示模块(DIEEPictureBox作为PictureBox)
'生成范围为1到6的随机整数
将面调暗为整数=随机对象。下一步(1,7)
'从资源中检索特定的模具图像
Dim pictureResource=My.Resources.ResourceManager.GetObject(String.Format(“die{0}”,face))
'将pictureResource转换为键入Image并在ImageBox中显示
diePictureBox.Image=CType(pictureResource,Image)
“结束子”替换
私有子GameTextBox_验证(发件人作为对象,e作为事件参数)处理GameTextBox.TextChanged
如果GameTextBox.Text>为“0”,则
做
MsgBox(GameTextBox.Text+“将进行一轮游戏!”)
游戏时循环TextBox.Text=“停止”
如果结束
GameTextBox.Enabled=False
端接头
Private Sub RestartButton\单击(发送者作为对象,e作为事件参数)处理RestartButton。单击
'重置或清除任何控件(推荐)
形式。清除()
“不建议:
'Application.Restart()
端接头
末级

好的,对于重启按钮,而不是
Form1.Clear()

试一试


诸如此类,应该清除文本框,至于。但实际上,我看不出
应用程序有什么问题。Restart()

我会稍微改变一下。不要从资源加载骰子图像,而是从
imagelist
加载它们,这样索引(由
Random
结果表示)就是查找图像所需的全部内容。通过将整数和名称拧在一起从资源加载可能是个问题-我们无法确定,因为我们无法在您的资源中看到模具图像的名称

此外,这类问题非常适合学习如何调试:在
DisplayDie
中设置断点,并查看其不起作用的原因:例如,
String.Format
结果对图像名称是否正确

掷骰子,显示
图像列表中的图像

Private Sub btnRoll_Click(sender As Object, e As EventArgs) Handles btnRoll.Click
    ' pbC1 etc are MY picturebox names - use yours
    DisplayDie(pbC1)
    DisplayDie(pbC2)
    DisplayDie(pbC3)

End Sub

Private Sub DisplayDie(diePictureBox As PictureBox)

    Dim face As Integer = randomObject.Next(1, 7)

    ' adjust pip count to image index by subtracting one
    diePictureBox.Image = ImageList1.Images(face - 1)

End Sub
图像以pip顺序列在
图像列表中,因此唯一的转换是从pip(1-6)转换为索引(0-5)


也许你该重新开始了。有时,你在代码中感到困惑,看不到任何出路。我建议您重新开始,一次一个功能地构建/测试应用程序。不要试图一次构建所有内容。好的,首先我知道退出按钮可以工作,所以这是我已经完成的一部分。我想解决的问题是如何掷骰子。通过查看我的代码,您知道我的问题在哪里吗?这是阻止我掷骰子掷莲花的原因吗?您最初的问题因过于宽泛而被搁置。这个问题不再是重点。从你的问题被搁置中学习,并提出一个更清晰的问题。话虽如此,您的应用程序看起来非常复杂,因为您正试图完成。好吧,对此表示抱歉。但我有一个问题(我会尽量具体一些)。当我点击滚动按钮并为其创建代码/事件时,我在下面有这些错误行,上面写着DisplayDie。是因为它没有在某处声明吗?如果是这样的话,我该如何声明呢?评论中的“澄清”是可以的,但它们在这里只是昙花一现,所以就答案而言,最重要的是问题帖子中的内容。我对它进行了编辑,以缩小其范围以匹配标题。最初的表单包含了各种各样的功能元素,这使得它太宽泛了,唯一的解决方法就是编写一个完整的程序。好的,谢谢你的学生,我尝试了这个应用程序。Restart()只对我有效。现在,是什么阻止我看到掷骰子?如果你能继续帮助我,那就太好了,谢谢你,希望很快能收到你的来信。我的意思是,我很乐意提供更多的帮助,但是你有书或其他东西作为参考资料吗?我只是向下看了看关于另一个答案的评论,你似乎有很多问题。嘿,AlwaysStudent,如果你再回到这个帖子,这里是我游戏的说明,我也会给你一个当前帖子的链接,谢谢你帮我解决这个问题,这真的让我很紧张:好吧,我会试试,我会让你们知道这对我是否有效。当我在应用程序的这一部分工作时,是什么原因导致我看不到分数被跟踪,以及我是如何做到的
Private Sub btnRoll_Click(sender As Object, e As EventArgs) Handles btnRoll.Click
    ' pbC1 etc are MY picturebox names - use yours
    DisplayDie(pbC1)
    DisplayDie(pbC2)
    DisplayDie(pbC3)

End Sub

Private Sub DisplayDie(diePictureBox As PictureBox)

    Dim face As Integer = randomObject.Next(1, 7)

    ' adjust pip count to image index by subtracting one
    diePictureBox.Image = ImageList1.Images(face - 1)

End Sub