是否可以选择在这种情况下可以使用的案例块?

时间:2016-02-21 08:40:06

标签: vb.net visual-studio visual-studio-2012 visual-studio-2013

我正在使用visual studio进行入门编程课程。此分配要求我们根据生成的随机数在图片框中显示特定的gif。

我的程序有效,但我真的想知道是否有办法以更高的效率或更少的代码完成同样的事情。

Option Strict On
Option Explicit On


Public Class Form1

Private Sub btnDeposit_Click(sender As Object, e As EventArgs) Handles btnDeposit.Click
    Dim deposit As Integer
    Dim balance As Integer
    balance = CInt(lblbankAccount.Text)
    deposit = CInt(InputBox("Enter your deposit", "Dice Game"))
    lblbankAccount.Text = CStr(balance + deposit)
End Sub

Private Sub btnroll_Click(sender As Object, e As EventArgs) Handles btnroll.Click
    Dim RandomNum As New Random
    Dim dice1, dice2, dice3, bet, bankroll, balance As Integer

    balance = CInt(lblbankAccount.Text)
    bet = CInt(txtbet.Text)
    dice1 = RandomNum.Next(1, 7)
    dice2 = RandomNum.Next(1, 7)
    dice3 = RandomNum.Next(1, 7)

    If dice1 = dice2 And dice1 = dice3 Then
        bankroll = (bankroll + (bet * 3))
    Else
        If dice1 = dice2 Or dice2 = dice3 Or dice1 = dice3 Then
            bankroll = (bankroll + (bet * 2))
        Else
            bankroll = (bankroll - bet)
        End If
    End If

    balance = bankroll + balance
    lblbankAccount.Text = CStr(balance)

    Select Case dice1
        Case 1
            Picbox1.Image = Image.FromFile("DieSide1.gif")
        Case 2
            Picbox1.Image = Image.FromFile("DieSide2.gif")
        Case 3
            Picbox1.Image = Image.FromFile("DieSide3.gif")
        Case 4
            Picbox1.Image = Image.FromFile("DieSide4.gif")
        Case 5
            Picbox1.Image = Image.FromFile("DieSide5.gif")
        Case 6
            Picbox1.Image = Image.FromFile("DieSide6.gif")
    End Select
    Select Case dice2
        Case 1
            PicBox2.Image = Image.FromFile("DieSide1.gif")
        Case 2
            PicBox2.Image = Image.FromFile("DieSide2.gif")
        Case 3
            PicBox2.Image = Image.FromFile("DieSide3.gif")
        Case 4
            PicBox2.Image = Image.FromFile("DieSide4.gif")
        Case 5
            PicBox2.Image = Image.FromFile("DieSide5.gif")
        Case 6
            PicBox2.Image = Image.FromFile("DieSide6.gif")
    End Select
    Select Case dice3
        Case 1
            PicBox3.Image = Image.FromFile("DieSide1.gif")
        Case 2
            PicBox3.Image = Image.FromFile("DieSide2.gif")
        Case 3
            PicBox3.Image = Image.FromFile("DieSide3.gif")
        Case 4
            PicBox3.Image = Image.FromFile("DieSide4.gif")
        Case 5
            PicBox3.Image = Image.FromFile("DieSide5.gif")
        Case 6
            PicBox3.Image = Image.FromFile("DieSide6.gif")
    End Select
End Sub
End Class

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容替换所有选择的案例:

Picbox1.Image = Image.FromFile("DieSide" & dice1.ToString() & ".gif")
Picbox2.Image = Image.FromFile("DieSide" & dice2.ToString() & ".gif")
Picbox3.Image = Image.FromFile("DieSide" & dice3.ToString() & ".gif")

更进一步,您可以使用三个元素Integer数组来保存骰子,而不是使用三个变量。图片框也可以存储在一个数组中。然后你可以使用for循环来扫描骰子和图片,而不是重复每个变量的代码。

编辑:

这是数组(以及一些LINQ)的外观:

Private Sub btnroll_Click(sender As Object, e As EventArgs) Handles btnroll.Click
        Dim RandomNum As New Random
        Dim bet, bankroll, balance As Integer
        balance = CInt(lblbankAccount.Text)
        bet = CInt(txtbet.Text)
        Dim dices = New Integer() {RandomNum.Next(1, 7), RandomNum.Next(1, 7), RandomNum.Next(1, 7)}
        Dim Picboxes = New PictureBox() {Picbox1, Picbox2, Picbox3}
        Dim repetitions = dices.GroupBy(Function(dice) dice).Select(Function(x) New With {.dice = x.Key, .count = x.Count()}).OrderByDescending(Function(x) x.count).FirstOrDefault().count
        Dim factor As Integer = IIf(repetitions = 1, -repetitions, repetitions)
        bankroll += bet * factor
        balance += bankroll
        lblbankAccount.Text = CStr(balance)
        For i As Integer = 0 To 2
            Picboxes(i).Image = Image.FromFile("DieSide" & dices(i).ToString & ".gif")
        Next
    End Sub

答案 1 :(得分:1)

由于图像#(最后一个字符)等同于案例,与拾取框相同,因此很有可能用较少的代码完成此操作。

也许是滚动#和结果通过的子程序/方法。