2009-03-30 4 views
1

コンピュータがランダムな色のコード(赤緑色の黄色と青色)を与える小さなゲームを作ろうとしていて、それを試してみる必要があります...困っています色をランダムにしています。Visual Basic - カラープログラムを推測する

色は4つのボタンのバックカラーです。コードは4色です。プレイヤーはその直下のいくつかのボタンをクリックし、コードを推測しようとします。クリックするたびに色が変わります。プレーヤーが正しい場所にある正しい色を推測すると、色が明らかになります。

これまでのところ、私はこれを持っている:

(問題がある。「公共共有演算子は=(右、System.Drawing.Colorとして左:「=」は公開これらの引数で呼び出されることができませんので オーバーロードの解決に失敗しましたAs System.Drawing.Color)As Boolean ':引数一致のパラメータ' right 'は' Integer 'から' Color 'に変換できません(REMカラー1〜REM Endを参照)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 

答えて

4

Arrays in Visual Basic

あなたの具体的な問題は何もわかりませんが、大規模なスイッチは単なる色の配列でなければなりません。何らかの理由で色を=と比較できない場合は、コードを整数の配列にして、整数で動作させ、表示する必要があるときに配列の色を調べます。

4

colorN(整数)をColorオブジェクトに設定しているという問題があります。すでにここ優れた答えに補遺として

...

generator.Next(1,4) 

のみ1と3間の値を返します!あなたが本当に欲しい

は次のとおりです。

generator.Next(1,5) 
5

カラー1、カラー2、カラー3、color4は整数です。

あなたが書き込み: 暗いカラー1 = generator.Next(1、4)

generator.Next整数を生成するので、カラー1を整数として定義されます。 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 

追加注記: は、最初の答えは、この全体のことを書くためのより良い方法は実際にあります、言うように。ずっと読みやすく、そしてより保守だこと


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 

(申し訳ありませんが、私は私の頭の上から正確なVBの構文を覚えていない):次の擬似コードは、私が問題にアプローチしたい方法です。 (5番目のボタン、5番目の色を元のリストに追加する場合、または擬似コードのリストに追加する行数を考慮する)

0

Dim color1 = generator.Next 、4)、暗黙的にcolor1を整数として定義しています。これはgenerator.Nextが返すものですからです。あなたの変数の型を明示的に定義するために "As"を使用することをお勧めします(あなた自身の利益とあなたのコードを読んだ人のために)。

同じcolor1変数を使用して、カラーの整数型と列挙型( "Color")バージョンの両方を含むように見えます。明示的に強制すると列挙された値を整数に直接変換することもできますし、特定の値が独自の色分けシステムまたはシステムを表すかどうかはわかりません。私はこのような4つのランダムな色の1つを生成する関数を作成することをお勧めします:

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 

この関数を使用してランダムな値を初期化します。

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 
0

おかげで、私は別の男、「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 

とにかくあなたの可愛い答えをありがとう!