-6

ピクチャーボックスを使った簡単なゲームを開発しようとしています

たとえば、それぞれが一意の画像を含む 3 つの異なる画像ボックスがあるとします フォームが読み込まれると、1 つのボックスが表示され、他の 2 つのボックスは非表示になります プレーヤーは、非表示になる前に表示されている画像ボックスをクリックする必要があります (ボックスには時間が指定されています)見えるままにする)

例: ボックス 1 は 5 秒間表示されたままになり、ボックスが 5 秒間クリックされない場合、ボックス 1 は非表示になり、別のランダムなボックスが表示されます。もちろん、ユーザーが画像をクリックすることに成功すると、スコアが更新されます。時間を短くすることで、さまざまなレベルを作成できます。

コードは、おそらくフォーム ロードに配置された 1 つのコードになります。ありがとう

4

2 に答える 2

0

間隔が 5000 のタイマーを使用してから、経過イベント ハンドラーで

Timer.stop()
Losses = Losses + 1
selectNewPictureBox()
Time.start()

次に、ピクチャボックスハンドラーで

Timer.stop()
Wins = Wins + 1
selectNewPictureBox()
Timer.start() 
于 2013-02-28T19:53:30.217 に答える
0

私はおそらくストップウォッチを使用します - ユーザーが正常にクリックしたときにカウントを0にリセットする方法がわからないため、タイマーは難しいでしょう。

次のようにストップウォッチを宣言します。

Private maxWaitTimer As New Stopwatch

次に、おそらく「ゲームループ」タイプのものをフォームロードイベントで使用できます...おそらく次のようなものです:

maxWaitStopwatch.Start()

While(GameIsRunning)
    If maxWaitStopwatch.ElapsedMilliseconds > 5000 Then
        Losses = Losses + 1
        selectNewPictureBox()
        maxWaitStopwatch.Restart()
    Else
        Application.DoEvents() 'this gives the program a chance to execute the picture box click event, among other things (resize, drag, etc... since we are spinning in a loop)    
    End If
    'System.Threading.Thread.Sleep(100) 'uncommenting this line will prevent it from maxing out your processor, although it will be slightly less responsive
End While

画像ボックスは次のように実装できます。

Wins = Wins + 1
selectNewPictureBox()
maxWaitStopwatch.Restart()

基本的に、プログラムはループを回って、タイマーが経過したかどうかを確認し、経過している場合は画像を移動します。

クリック イベントはスコアをインクリメントします。ループの「application.doevents()」部分で実行される可能性があります。

sleep(100) を追加すると、速度がわずかに低下します (約 100 ミリ秒ほど正確ではありません) が、大量の CPU を使用するのを防ぐことができます。おそらく速度の違いに気付かないでしょう。

ただし、これを行うより良い方法があるかもしれません...


編集 - スティーブンが言ったことを反映して、ループの代わりにタイマーを使用した方が良いでしょう:

ユーザーが画像をクリックしたときに stop() を使用し、その後 start() を呼び出します。

(リセットされるとは思いませんでしたが、どうやらリセットされるようです)

于 2013-02-28T17:48:06.893 に答える