Visual Basic - 猜颜色程序

时间:2009-03-30 17:18:43

标签: vb.net colors

我正在尝试制作一款小型游戏,其中计算机提供随机颜色代码(红绿黄和蓝),然后你必须尝试猜测它们......我在制作颜色时遇到了麻烦。 / 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

6 个答案:

答案 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)

Arrays in Visual Basic

我不知道你的具体问题是什么,但那个大规模的开关应该只是一系列颜色。如果由于某种原因无法将颜色与=进行比较,请将代码作为整数数组,并使用整数,并在需要显示时查找数组中的颜色。

答案 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

无论如何,谢谢你的可爱答案!