在上次介紹彈跳球的程式中,有一個小問題,就是球的移動速度沒辦法太快。因為若是要球的移動速度快的話,就必須減短每次迴圈等待的時間 (原本是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沒有取餘數的指令,所以可能要想其他辦法。