2016-11-19 38 views
0

我目前正在为一个学校项目编写一个二十一点游戏。 (下面是我的代码)如何在标签中显示某个值时显示图片框

Public Class frmBlackJack 
Public Counter As Integer = 0 

Private Sub btnDrawCard_Click(sender As Object, e As EventArgs) Handles btnDrawCard.Click 
    Randomize() 
    Counter = Counter + 1 
    Dim Card1 As Integer 
    Dim Card2 As Integer 
    Dim Card3 As Integer 
    Dim Card4 As Integer 
    Dim Card5 As Integer 

    If Counter >= 1 Then 
     btnCheckScore.Enabled = True 
    End If 
    If Counter = 1 Then 
     Card1 = (10 * Rnd() + 1) 
     lblCard1.Text = Card1 
     lblCard1.Visible = True 
    End If 
    If Counter = 2 Then 
     Card2 = (10 * Rnd() + 1) 
     lblCard2.Text = Card2 
     lblCard2.Visible = True 
    End If 
    If Counter = 3 Then 
     Card3 = (10 * Rnd() + 1) 
     lblCard3.Text = Card3 
     lblCard3.Visible = True 
    End If 
    If Counter = 4 Then 
     Card4 = (10 * Rnd() + 1) 
     lblCard4.Text = Card4 
     lblCard4.Visible = True 
    End If 
    If Counter = 5 Then 
     Card5 = (10 * Rnd() + 1) 
     lblCard5.Text = Card5 
     lblCard5.Visible = True 
    End If 
    If Counter > 5 Then 
     MsgBox("You can't draw anymore cards!") 
    End If 
End Sub 

Private Sub frmBlackJack_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim ComputerCard1 As Integer 
    Dim ComputerCard2 As Integer 
    Dim ComputerCard3 As Integer 

    ComputerCard1 = (10 * Rnd() + 1) 
    ComputerCard2 = (10 * Rnd() + 1) 
    ComputerCard3 = (10 * Rnd() + 1) 

    lblComputerCard1.Text = ComputerCard1 
    lblComputerCard2.Text = ComputerCard2 
    lblComputerCard3.Text = ComputerCard3 

    lblComputerScore.Visible = False 
    lblYourScore.Visible = False 

    btnCheckScore.Enabled = False 

End Sub 

Private Sub btnCheckScore_Click(sender As Object, e As EventArgs) Handles btnCheckScore.Click 
    Dim PlayerSum As Integer 
    Dim ComputerSum As Integer 

    Dim youWonTitle As String = "You Won!" 
    Dim youWonMsg As String = "Great work! Play again?" 
    Dim youLostTitle As String = "You Lost!" 
    Dim youLostMsg As String = "Better luck next time! Play again?" 
    Dim youDrewTitle As String = "You Drew" 
    Dim youDrewMsg As String = "That was close! Play again?" 

    Dim style As MsgBoxStyle = MsgBoxStyle.YesNo 

    lblComputerCard1.Visible = True 
    lblComputerCard2.Visible = True 
    lblComputerCard3.Visible = True 

    btnDrawCard.Enabled = False 

    If Counter < 1 Then 
     PlayerSum = Val(lblCard1.Text) 
     lblPLayerScore.Text = PlayerSum 
     lblPLayerScore.Visible = True 
     lblYourScore.Visible = True 
    End If 
    If Counter > 1 Then 
     PlayerSum = Val(lblCard1.Text) + Val(lblCard2.Text) 
     lblPLayerScore.Text = PlayerSum 
     lblPLayerScore.Visible = True 
     lblYourScore.Visible = True 
    End If 
    If Counter > 2 Then 
     PlayerSum = Val(lblCard1.Text) + Val(lblCard2.Text) + Val(lblCard3.Text) 
     lblPLayerScore.Text = PlayerSum 
     lblPLayerScore.Visible = True 
     lblYourScore.Visible = True 
    End If 
    If Counter > 3 Then 
     PlayerSum = Val(lblCard1.Text) + Val(lblCard2.Text) + Val(lblCard3.Text) + Val(lblCard4.Text) 
     lblPLayerScore.Text = PlayerSum 
     lblPLayerScore.Visible = True 
     lblYourScore.Visible = True 
    End If 
    If Counter > 4 Then 
     PlayerSum = Val(lblCard1.Text) + Val(lblCard2.Text) + Val(lblCard3.Text) + Val(lblCard4.Text) + Val(lblCard5.Text) 
     lblPLayerScore.Text = PlayerSum 
     lblPLayerScore.Visible = True 
     lblYourScore.Visible = True 
    End If 

    ComputerSum = Val(lblComputerCard1.Text) + Val(lblComputerCard2.Text) + Val(lblComputerCard3.Text) 
    lblComputerTotal.Text = ComputerSum 
    lblComputerScore.Visible = True 
    lblComputerTotal.Visible = True 

    If lblCard1.Text = 1 Then 

    End If 

    If PlayerSum < 21 And PlayerSum > ComputerSum Then 
     Dim responseYouWon = MsgBox(youWonMsg, style, youWonTitle) 
     If responseYouWon = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf ComputerSum > 21 And PlayerSum < 21 Then 
     Dim responseYouWon = MsgBox(youWonMsg, style, youWonTitle) 
     If responseYouWon = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf ComputerSum > 21 And ComputerSum < 21 Then 
     Dim responseYouWon = MsgBox(youWonMsg, style, youWonTitle) 
     If responseYouWon = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf PlayerSum = 21 And ComputerSum > 21 Then 
     Dim responseYouWon = MsgBox(youWonMsg, style, youWonTitle) 
     If responseYouWon = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf PlayerSum = 21 And ComputerSum < 21 Then 
     Dim responseYouWon = MsgBox(youWonMsg, style, youWonTitle) 
     If responseYouWon = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf ComputerSum < 21 And ComputerSum > PlayerSum Then 
     Dim responseYouLost = MsgBox(youLostMsg, style, youLostTitle) 
     If responseYouLost = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf PlayerSum > 21 And ComputerSum < 21 Then 
     Dim responseYouLost = MsgBox(youLostMsg, style, youLostTitle) 
     If responseYouLost = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf ComputerSum = 21 And PlayerSum <> 21 Then 
     Dim responseYouLost = MsgBox(youLostMsg, style, youLostTitle) 
     If responseYouLost = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf ComputerSum = PlayerSum Then 
     Dim responseYouDrew = MsgBox(youDrewMsg, style, youDrewTitle) 
     If responseYouDrew = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 

    ElseIf PlayerSum > 21 And ComputerSum > 21 Then 
     Dim responseYouDrew = MsgBox(youDrewMsg, style, youDrewTitle) 
     If responseYouDrew = MsgBoxResult.Yes Then 
      btnPlayAgain.PerformClick() 
     Else 
      btnQuit.PerformClick() 
     End If 
    End If 
End Sub 

Private Sub btnPlayAgain_Click(sender As Object, e As EventArgs) Handles btnPlayAgain.Click 
    lblComputerCard1.Visible = False 
    lblComputerCard2.Visible = False 
    lblComputerCard3.Visible = False 
    lblComputerCard1.Text = "" 
    lblComputerCard2.Text = "" 
    lblComputerCard3.Text = "" 

    lblCard1.Visible = False 
    lblCard2.Visible = False 
    lblCard3.Visible = False 
    lblCard4.Visible = False 
    lblCard5.Visible = False 
    lblCard1.Text = "" 
    lblCard2.Text = "" 
    lblCard3.Text = "" 
    lblCard4.Text = "" 
    lblCard5.Text = "" 
    Counter = 0 

    Dim ComputerCard1 As Integer 
    Dim ComputerCard2 As Integer 
    Dim ComputerCard3 As Integer 

    ComputerCard1 = (10 * Rnd() + 1) 
    ComputerCard2 = (10 * Rnd() + 1) 
    ComputerCard3 = (10 * Rnd() + 1) 
    lblComputerCard1.Text = ComputerCard1 
    lblComputerCard2.Text = ComputerCard2 
    lblComputerCard3.Text = ComputerCard3 

    btnDrawCard.Enabled = True 
    btnCheckScore.Enabled = True 

    lblComputerTotal.Text = "" 
    lblPLayerScore.Text = "" 
    lblComputerTotal.Visible = False 
    lblPLayerScore.Visible = False 
    lblComputerScore.Visible = False 
    lblYourScore.Visible = False 


End Sub 

Private Sub btnQuit_Click(sender As Object, e As EventArgs) Handles btnQuit.Click 
    Me.Close() 
End Sub 

Private Sub StartGameToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StartGameToolStripMenuItem.Click 
    btnDrawCard.PerformClick() 

End Sub 

Private Sub QuitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles QuitToolStripMenuItem.Click 
    Me.Close() 
End Sub 

末级

我希望发生什么,是一个卡(图片)来显示,如果某个号码也显示在标签。例如,如果值为1显示在lblCard1中,则表格中会弹出一张ace图片。

(免责声明)不确定这是否实际可行。我一直在网上寻找解决办法,但我找不到任何东西。如果你知道如何做到这一点,请回复。

感谢

+0

您的交易-A卡的方法是非常错误的。你不能随便选一个随机数来模拟一副牌。您的代码中没有任何内容可以阻止挑选更多4个值。还有那些'Card#'变量没有被使用 – Plutonix

回答

0

首先,我强烈建议,在您的窗体的代码模块的最顶端的“选项严格在”宣言编码,而不是依赖隐式类型转换。其次,我建议使用“Select Case”语句,而不是一长串If语句。

有很多方法可以实现您想要的结果。这取决于您希望图片框是隐藏的还是可见的,但不显示密钥号时不显示图像。

使用一个ACE的例子中所示,当lblCard1.Text =“1”和“picAce”是你的窗体上的一个图片框,一种方法将是:

要隐藏王牌:

picAce.Visible = (lblCard1.Text = "1") 

要显示的画面框,然后从位于路径上的文件中加载“C:\图片\ ace.jpg”如果“1”被显示在lblCard1或清空图片框如果显示另一个号码:

picAce.Image = If(lblCard1.Text = "1", Image.FromFile("C:\pics\ace.jpg"), Nothing) 

你可以如果您不想依赖从文件系统采集图像,也可以将ace图像添加到项目或表单的资源中,并从其中一个存储库加载它。

编辑:

一个Select Case子句的结构是这样的:

Select Case Counter 

    Case 1 

    Case 2 

    Case 3 

    Case 4 

    Case 5 

    Case Else 

End Select 
+0

Thankyou,你可以请示例如何使用select case语句@Guru Josh –

+0

哦,好吧谢谢你@Guru Josh –