2

NetLogo で Frogger のようなゲームを作成しようとしていますが、カウントダウンするタイマーを作成する必要があります。ただし、Frogger を調べて、タイマーを作成するのと同じ手順を使用しましたが、機能しません。お知らせ下さい。

4

1 に答える 1

7

NetLogoでカウントダウンタイマーを作成する方法

これは、カウントダウン タイマーを実装する方法の概要です。これは、リアルタイムのカウントダウンまたはシミュレーション時間のカウントダウンの両方に適用されます。

  1. 残り時間または経過時間を格納する変数を実装します。

    • 各エージェントに独自のカウントダウンが必要な場合を除き、変数は通常グローバル変数です。次に、変数はエージェントの独自の変数になります。

      globals [ count-down ]
      ;; or
      turtles-own [ count-down ]
      
    • 一般的には、残り時間を追跡するのが最善だと思います。カウントダウン変数は、カウントダウンの期間で初期化されます。これにより、(ゲーム内で) カウントダウンを延長するボーナスや、カウントダウンを減らすペナルティを簡単に実装できます。残り時間に加算または減算するだけです。カウントダウンの有効期限が切れる「実際の」時間を追跡する (timer + durationまたは同様のものを使用する) ことは、特にゲームを一時停止できる場合は、一般的にあまり役に立ちません。コーディングが必要な望ましくない影響が発生する可能性があります。

  2. カウントダウンを初期化する手順を実装します。

    to setup-timer
       set count-down 30 ;; a 30 tick timer
       ;; if you have a display of the remaining time, 
       ;; you might want to initialize it here, for example:
       ask patch max-pxcor max-pycor
       [ set plabel-color white 
         set plabel count-down
       ]
    end
    ;; this example is for global count-down.
    ;; for a per-agent count-down, each agent would need
    ;; to initialize its own count-down variable
    
  3. 残り時間を減らす手順を実装してください。

    to decrement-timer
       set count-down count-down - 1
    end
    
  4. カウントダウンが終了したかどうかをテストする手順を実装します。

    to-report timer-expired?
       report ( count-down <= 0 )
    end
    
  5. 残り時間または経過時間を表示する方法を実装します。例えば:

    • パッチ ラベルを使用して時間を表示します。

      to update-timer-display
         ask patch max-pxcor max-pycor [ set plabel count-down ]
      end
      
    • 特別に定義された時計の形をしたタートルを使用して、経過時間を表示します。この例は、NetLogo Models Library にあります。

  6. タイマーが切れたときに発生するアクションを実装します。

    • これは完全にあなた次第です。

    • これには、別のカウントダウンのためにタイマーをリセットすることが含まれる場合があります。

プログラムでカウントダウン タイマーを使用するには、次のことを行う必要があります。

  1. 適切な場合 (ゲームまたはゲームのラウンドの開始時など) にカウントダウン タイマーを初期化します。

  2. タイマーを変更してテストします。

    • これは、「ティック」ごとに 1 回、またはリアルタイムに基づく計算である可能性があります。

      1. 適切なスケジュールでカウントダウンを減らします。
      2. 必要に応じて、タイマーの表示を更新します。
      3. タイマーをテストして、期限切れかどうかを確認します。
      4. 期限切れのタイマーに対処します。

        ;; a "once-per-tick" count-down
        decrement-timer
        update-timer-display
        if timer-expired? [ act-on-expired-timer ]
        ;; rest of the go procedure, then... 
        tick
        
        ;; a "once-per-second" count-down
        every 1 ;; this block runs only once per second
        [ decrement-timer
          update-timer-display
          if timer-expired? [ act-on-expired-timer ]
        ]
        ;; the rest of the go procedure
        tick
        

定期的なイベント

N ティックごとに繰り返しイベントをトリガーする方法が必要な場合は、プロシージャーでmodオペレーターをticksカウンターと共に単純に使用できる場合があります。go

if ticks mod 30 = 0 [ perform-recurring-event ]

上記のコード行ではperform-recurring-event、カウンターが 0 または 30 の倍数に達するたびにプロシージャが実行されますticks。つまり、 30 ごとに実行されticksます。

于 2012-01-19T21:54:30.513 に答える