我正在使用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
答案 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)
由于图像#(最后一个字符)等同于案例,与拾取框相同,因此很有可能用较少的代码完成此操作。
也许是滚动#和结果通过的子程序/方法。