#.net #vb.net
#.net #vb.net
Вопрос:
Вопрос в том, что я в основном написал игру «Камень, ножницы, бумага» в VB.NET используя инструкции If и задаваясь вопросом, как именно я бы попытался вместо этого применить это к Select Case.
Профессор был довольно ужасен в обучении вещам и до сегодняшнего дня не сообщал нам, что это должен быть 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
Комментарии:
1. не используйте SHOTGUN() для получения другого случая 😉
2. Настоящий программист ™ использовал бы массивы элементов управления, поэтому ни операторы If, ни Select не используются. Поиск ЗАКОНЧЕН (не повторяйтесь).
Ответ №1:
Я полагаю, вы ищете, чтобы 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
Комментарии:
1. таким образом, Case # будет соответствовать случайно сгенерированному числу, чтобы решить, что выберет компьютер?
2. Не глядя на логику вашей программы,
Select Case
оператор — это то же самое, что иIf
оператор, просто с несколькими другими правилами. Если вашиIf computerChoice =
инструкции работают правильно, тоSelect Case
будет делать точно то же самое.3. итак, в предыдущем я бы превратил это во что-то подобное? pastebin.com/A39nujdw
4. Кроме obv, вместо End case был бы End Select, мой плохой ^^
5. Нет, это было бы больше похоже на: pastebin.com/tyafq3dX — вы не можете
Select Case
установить несколько флажков — их вам придется делать по старинке. ASelect Case
позволяет вам взять одно значение (например,computerChoice
) и сравнить его с несколькими значениями. Это не предназначено для того, чтобы помочь вам, когда вы проверяете несколько сценариев (например, установлены ли три разных флажка).
Ответ №2:
Вы могли бы провести рефакторинг своего кода с помощью Select Case
:
Select Case rdoROCK.Checked
Case True
picROCK.Visible = True
Case False
picROCK.Visible = False
End Select
Или для краткости:
picROCK.Visible = rdoROCK.Checked
На вашем основном я бы также создал enum для удобства чтения:
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
Комментарии:
1. 1 за краткий вариант; -1 даже за предложение
select case
проверить логическое значение.2. @Чао: ты бы проголосовал против меня за это? Он явно спросил: «как это можно сделать с помощью select case»? 🙂
3. @p.campbell: Чертовски верно, я бы проголосовал против тебя за это. Еще следующее, что я знаю, я закончу тем, что посмотрю на это в реальном коде, когда кто-то другой увидит это и подумает, что это хорошая идея. 🙂
4. @chao: невероятно; вы отклонили мой ответ за то, что ответили на вопрос парня, а также предложили abosolute лучшее решение ниже? Для ясности: я не «предлагал выбрать регистр для проверки логического значения». Я только ответил на его прямой вопрос, а также на несколько полезных советов.
5. @p.campbell: Нет … я не снижал голос. 1 отменяет значение -1. Чистая оценка: 0. 🙂