[NXC] 彈跳球 V1.1

        在上次介紹彈跳球的程式中,有一個小問題,就是球的移動速度沒辦法太快。因為若是要球的移動速度快的話,就必須減短每次迴圈等待的時間 (原本是0.04秒) ,然而,迴圈每次執行時都會把螢幕清空,縮短等待時間的話就會造成螢幕清空速度太快,反而就看不到球了,這樣要怎麼辦呢?

        其實答案很簡單,我們只要讓迴圈不要每次執行時都把螢幕清空就好了。請看:

task main()
{
       int ball_x = Random(61)+20;          // 隨機產生球的起始x座標
       int ball_y = Random(31)+20;         // 隨機產生球的起始y座標
       int del_x = 1;                                         // 球的方向向量
       int del_y = 1;
       int count = 0;                                        // 新增一變數當計數器

       CircleOut(ball_x,ball_y, 2);           // 在螢幕上輸出球 o (半徑為2的圓) 
       while(true)
       {
              if( count%6 == 0 )                       // 當迴圈執行次數是6的倍數時,清空螢幕
             {                                                          // 其中 % 是取餘數的運算子
                      ClearScreen();
             }

              ball_x = ball_x + del_x;              // 移到下一個位置
              ball_y = ball_y + del_y;             
              CircleOut(ball_x,ball_y, 2);        // 在新的位置輸出球
              if( ball_x <= 2 || ball_x>=96)    // 若打到邊界則反彈
              {
                     del_x = del_x*-1;
                     PlayTone(440,1);
              }
              if( ball_y <= 5 || ball_y >= 61)
              {
                     del_y = del_y*-1;
                     PlayTone(440,1);
               }
               Wait(20);

               count++;                                           // 迴圈每執行一次計數器就加1
      }
}

如此我們就可以自己設定螢幕清空的頻率了! 鼓勵各位嘗試看看!

然而如果要用NXT-G來寫的話就又更困難了,因為NXT-G沒有取餘數的指令,所以可能要想其他辦法。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *