我正在尝试制作一款小型游戏,其中计算机提供随机颜色代码(红绿黄和蓝),然后你必须尝试猜测它们......我在制作颜色时遇到了麻烦。 / p>
颜色是4个按钮的背面颜色。代码长度为四种颜色。然后播放器点击其下方的一些按钮并尝试猜测代码。每次单击都会更改一次颜色。如果玩家猜出正确位置的正确颜色,则显示颜色。
到目前为止,我有这个:
(问题是: 重载决策失败,因为没有使用这些参数调用Public'=':'Public Shared Operator =(left As System.Drawing.Color,right As System.Drawing.Color)As Boolean':参数匹配参数'right'无法转换从'整数'到'颜色'。 (见下面REM颜色1到REM结束)问题是由计算机生成的,用Visual Basic编写的程序,windows窗体应用程序)
Dim turn = 0
Dim generator As New Random
Dim color1 = generator.Next(1, 4)
Dim color2 = generator.Next(1, 4)
Dim color3 = generator.Next(1, 4)
Dim color4 = generator.Next(1, 4)
Private Sub NewToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewToolStripMenuItem.Click
REM color 1
If color1 = 1 Then
color1 = Color.Red
End If
If color1 = 2 Then
color1 = Color.Blue
End If
If color1 = 3 Then
color1 = Color.Yellow
End If
If color1 = 4 Then
color1 = Color.Green
End If
REM color 2
If color2 = 1 Then
color2 = Color.Red
End If
If color2 = 2 Then
color2 = Color.Blue
End If
If color2 = 3 Then
color2 = Color.Yellow
End If
If color2 = 4 Then
color2 = Color.Green
End If
REM color 3
If color3 = 1 Then
color3 = Color.Red
End If
If color3 = 2 Then
color3 = Color.Blue
End If
If color3 = 3 Then
color3 = Color.Yellow
End If
If color3 = 4 Then
color3 = Color.Green
End If
REM color 4
If color4 = 1 Then
color4 = Color.Red
End If
If color4 = 2 Then
color4 = Color.Blue
End If
If color4 = 3 Then
color4 = Color.Yellow
End If
If color4 = 4 Then
color4 = Color.Green
End If
REM End
Button1.BackColor = color1
Button2.BackColor = color2
Button3.BackColor = color3
Button4.BackColor = color4
答案 0 :(得分:5)
color1,color2,color3,color4是整数。
当你写: Dim color1 = generator.Next(1,4)
generator.Next生成一个整数,因此color1定义为整数。 当你写作 color1 = Color.Red
它很混乱,因为你试图将Color设置为一个整数变量。
一般来说编写代码的方法更简洁,但你可能会这样做:
option explicit
Dim color_index as Integer
Dim color1 as System.Drawing.Color
color_index=generator.Next(1,4)
[choosing logic]
color1 = Color.red
[blah blah blah]
Button.backcolor = color1
附加说明: 正如第一个答案所说,真的有更好的方法来写这整篇文章。以下伪代码是我如何处理问题: (对不起,我不记得我头脑中的确切VB语法)
Button_Array = [Button1,Button2,Button3,Button4]
Color_array= [Color.red,Color.blue,Color.green,Color.yellow]
for i in 1 to 4
color_index=generator.Next(1,4)
Button_Array[i].backcolor = Color_array[color_index]
endfor
这更具可读性,更易于维护。 (如果要在原始列表或我的伪代码列表中添加第5个按钮或第5个颜色,请考虑添加多少行
答案 1 :(得分:4)
我不知道你的具体问题是什么,但那个大规模的开关应该只是一系列颜色。如果由于某种原因无法将颜色与=进行比较,请将代码作为整数数组,并使用整数,并在需要显示时查找数组中的颜色。
答案 2 :(得分:4)
问题在于您将colorN
(整数)设置为Color
对象。
作为这里优秀答案的附录......
generator.Next(1,4)
只会返回1到3之间的值!
你真正想要的是:
generator.Next(1,5)
答案 3 :(得分:0)
当你使用Dim color1 = generator.Next(1,4)时,它将color1隐式定义为一个整数,因为这就是generator.Next返回的内容。我建议(为了您自己的利益和任何阅读代码的人的利益)使用“As”来明确定义变量的类型。
看起来您正在尝试使用相同的color1变量来包含颜色的整数和枚举(“颜色”)版本。这会变得非常混乱,因为枚举值也可以直接转换为整数,如果你明确强制发生这种情况,那么你就不会知道某个特定值是代表你自己的颜色编码系统还是系统的。我建议你创建一个生成4种随机颜色中的一种的函数,如下所示:
Function GenerateColor() As Color
Select Case generator.Next(1,5)
Case 1
Return Color.Red
Case 2
Return Color.Blue
Case 3
Return Color.Yellow
Case 4
Return Color.Green
End Select
End Function
并使用该函数初始化随机值。
答案 4 :(得分:0)
你应该建立一个像这样的颜色词典:
private _Generator as Random
private _Colors as Dictionary(of Integer, Color)
private _Color1 as Color
private _Color2 as Color
private _Color3 as Color
private _Color4 as Color
Public Sub New()
_Generator = new Random()
_Colors.Add(1, Colors.Red)
_Colors.Add(2, Colors.Blue)
_Colors.Add(3, Colors.Yellow)
_Colors.Add(4, Colors.Green)
End Sub
Private Sub NewToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewToolStripMenuItem.Click
_Color1 = _Colors(_Generator.Next(1, 4))
_Color2 = _Colors(_Generator.Next(1, 4))
_Color3 = _Colors(_Generator.Next(1, 4))
_Color4 = _Colors(_Generator.Next(1, 4))
Button1.BackColor = _Color1
Button2.BackColor = _Color2
Button3.BackColor = _Color3
Button4.BackColor = _Color
End sub
答案 5 :(得分:0)
感谢您的帮助,但我找到了另一个人Clule of“Coding4fun.com”的帮助。现在正常工作。我所做的就是因为首先说的是通过调用color1例如一个整数然后要求颜色来混淆计算机。我现在所做的就像BlueMonkMN一样开始一个案例即。
Private Function getrandomcolour() As Color
Select Case generator.[Next](1, 6)
Case 1
Return Color.Red
Exit Select
Case 2
Return Color.Green
Exit Select
Case 3
Return Color.Yellow
Exit Select
Case 4
Return Color.Blue
Exit Select
Case 5
Return Color.Pink
Exit Select
Case 6
Return Color.Turquoise
Exit Select
End Select
If Button1.BackColor = Button2.BackColor Then
getrandomcolour()
End If
If Button3.BackColor = Button4.BackColor Then
getrandomcolour()
End If
If Button1.BackColor = Button3.BackColor Then
getrandomcolour()
End If
If Button2.BackColor = Button3.BackColor Then
getrandomcolour()
End If
End Function
无论如何,谢谢你的可爱答案!