2011-04-11 53 views
0

問題是,我基本上在VB.NET中使用If語句編寫了一個Rock Paper Scissors遊戲,並想知道我將如何嘗試將其應用到Select Case中。如何轉入選擇案例

教授在教學東西很可怕,並沒有讓我們知道,直到今天,它已成爲選擇案例(其應有的明天._。)

公共類Form1中

Dim randomGenerator As New Random 


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

    End Sub 


    Private Sub rdoROCK_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdoROCK.CheckedChanged 
     If rdoROCK.Checked = True Then 
      picROCK.Visible = True 
     Else 
      picROCK.Visible = False 
     End If 
    End Sub 

    Private Sub rdoPAPER_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdoPAPER.CheckedChanged 
     If rdoPAPER.Checked = True Then 
      picPAPER.Visible = True 
     Else 
      picPAPER.Visible = False 
     End If 
    End Sub 

    Private Sub rdoSCISSORS_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdoSCISSORS.CheckedChanged 
     If rdoSCISSORS.Checked = True Then 
      picSCISSORS.Visible = True 
     Else 
      picSCISSORS.Visible = False 
     End If 
    End Sub 


    Private Sub btnSTART_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSTART.Click 
     Dim computerChoice As Integer 

     randomGenerator.Next(1, 4) 
     computerChoice = randomGenerator.Next(1, 4) 

     'If computerChoice = 1 Then 
     'picROCK2.Visible = True 
     'ElseIf computerChoice = 2 Then 
     'picPAPER2.Visible = True 
     'ElseIf computerChoice = 3 Then 
     'picSCISSORS2.Visible = True 
     'End If 

     If computerChoice = 1 Then 
      picROCK2.Visible = True 
      If rdoROCK.Checked = True Then 
       lbltie.Visible = True 
      ElseIf rdoPAPER.Checked = True Then 
       lblwin.Visible = True 
      ElseIf rdoSCISSORS.Checked = True Then 
       lbllose.Visible = True 
      End If 
     End If 

     If computerChoice = 2 Then 
      picPAPER2.Visible = True 
      If rdoROCK.Checked = True Then 
       lbllose.Visible = True 
      ElseIf rdoPAPER.Checked = True Then 
       lbltie.Visible = True 
      ElseIf rdoSCISSORS.Checked = True Then 
       lblwin.Visible = True 
      End If 
     End If 

     If computerChoice = 3 Then 
      picSCISSORS2.Visible = True 
      If rdoROCK.Checked = True Then 
       lblwin.Visible = True 
      ElseIf rdoPAPER.Checked = True Then 
       lbllose.Visible = True 
      ElseIf rdoSCISSORS.Checked = True Then 
       lbltie.Visible = True 
      End If 
     End If 




    End Sub 

    Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblwin.Click 

    End Sub 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     picROCK.Visible = False 
     picROCK2.Visible = False 
     picPAPER2.Visible = False 
     picPAPER.Visible = False 
     picSCISSORS.Visible = False 
     picSCISSORS2.Visible = False 
     lblwin.Visible = False 
     lbltie.Visible = False 
     lbllose.Visible = False 
     rdoROCK.Checked = False 
     rdoPAPER.Checked = False 
     rdoSCISSORS.Checked = False 

    End Sub 
End Class 
+0

對於GET情況下,不要否則UseShotgun();) – 2011-04-11 22:54:56

+0

一個真正的程序員™將使用的控制的陣列,從而既不如果也不SELECT語句中使用。查找DRY(不要重複自己)。 – 2011-04-11 23:35:02

回答

1

你可以使用重構你的代碼Select Case

Select Case rdoROCK.Checked 
     Case True 
      picROCK.Visible = True 
     Case False 
      picROCK.Visible = False 
End Select 

或者爲了簡潔:

picROCK.Visible = rdoROCK.Checked 

到你的主,我會創建一個枚舉,以及對可讀性:

Enum RPS 
    Paper = 1 
    Rock = 2 
    Scissors = 3 
End Enum 

'now deciding what to show for win, lose or draw: 
    Select Case computerChoice 
     Case RPS.Paper 
      UpdateFormOnPaper() 
     Case RPS.Rock 
      UpdateFormOnRock() 
     Case RPS.Scissors 
      UpdateFormOnScissors() 
    End Select 

'a method to update the for Win, Lose or Draw for each choice. 
Sub UpdateFormOnRock()   
    picROCK2.Visible = True 

    Select Case True 
     Case rdoROCK.Checked 
      lbltie.Visible = True 
     Case rdoPAPER.Checked 
      lblwin.Visible = True 
     Case rdoSCISSORS.Checked 
      lbllose.Visible = True 
    End Select 
End Sub 
+0

+1簡潔選項 – 2011-04-11 22:45:57

+1

+1簡要選項; -1甚至建議'select case'來檢查布爾值。 – cHao 2011-04-11 22:49:37

+0

@cHao:你會爲此付出代價嗎?他明確地要求'如何用select case'來完成? :) – 2011-04-11 22:53:07

3

我相信你正在尋找的1,2,或3是你Select Case - 它看起來會是像:

Select Case computerChoice 
    Case 1 
     ' Do what's currently in your [if computerChoice = 1] section 
    Case 2 
     ' Do what's currently in your [if computerChoice = 2] section 
    Case 3 
     ' Do what's currently in your [if computerChoice = 3] section 
End Select 
+0

因此,Case#與隨機生成的數字一致以決定計算機選擇什麼? – annonkek 2011-04-11 22:51:35

+0

沒有看過你的程序邏輯,'Select Case'語句和'If'語句是一樣的,只是有幾條不同的規則。如果你的'如果computerChoice ='語句正常工作,那麼'Select Case'將完成同樣的事情。 – 2011-04-11 22:54:33

+0

所以在前面,我會把它變成這種性質的東西? http://pastebin.com/A39nujdw – annonkek 2011-04-11 22:58:14