本章旨在探討初級智慧動物如何移動。
在說明如何移動之前,我們要先瞭解 Processing 的座標系統。Processing 是以螢幕的左上角落為座標原點 (0, 0),水平方向為 X 軸,往右為正(+),往左為負(-);垂直方向為 Y 軸,往下為正(+),往上為負(-)。旋轉方向順時針為正(+),逆時針為負(-)。您可以參考 https://processing.org/tutorials/drawing/
最初出現的地方
為了方便觀察,最開始我們會將初級智慧動物置放於螢幕中央,如此牠不至於很快就走出螢幕而消失不見。程式碼如下:
size(800, 600) // 設置螢幕大小,水平為 800 單位,垂直為 600 單位
int cx = width / 2 // cx 表動物目前的水平座標位置
int cy = height / 2 // cy 表動物目前的垂直座標位置
width 和 height 都是公用變數,其意思分別是螢幕的水平尺寸和垂直尺寸,在此處也就是 800 x 600。
如果我們希望初級智慧動物是隨意出現在螢幕的任一角落,我們可以使用亂數函式 random,程式碼可以修改如下:
size(800, 600) // 設置螢幕大小,水平為 800 單位,垂直為 600 單位
int cx = (int)random(0, width) // cx 表動物目前的水平座標位置
int cy = (int)random(0, height) // cy 表動物目前的垂直座標位置
因為 random 傳回的值是 float 的格式,為了要配合 cx 和 cy 的 int 格式,所以我們要在前面加上 (int) 做格式轉換的動作。
然後,我們畫出一個 5x5 單位的正方形來代表初級智慧動物,程式碼如下:
rect(cx, cy, 5, 5);
完整程式碼如下:
int cx, cy;
void setup() {
size(800,600);
cx = width / 2;
cy = height / 2;
}
void draw() {
rect(cx, cy, 5, 5);
}
更改為隨機出現在任一位置,完整程式碼如下:
int cx, cy;
void setup() {
size(800,600);
frameRate(2); // 指定影格速率,每秒執行 2 次 draw 函式
}
void draw() {
background(155); // 指定背景顏色,此處有刷新螢幕的作用
cx = (int)random(0, width);
cy = (int)random(0, height);
rect(cx, cy, 5, 5);
}
移動碼
初級智慧動物會依據移動碼的數值來移動。移動碼又可分為水平分量與垂直分量。分量的值愈大表移動速度愈快,反之則愈慢,若為 0 則表示靜止不動。
我們用變數 xv 和 yv 分別代表水平分量和垂直分量的移動值,將位置變數 cx 和 cy 分別加入變數 vx 和 vy,就可以讓初級智慧動物產生移動的效果。
移動有方向性,所以 xv 和 yv 有正負的分別。另外為了限制移動的速度,此處我們將移動分量暫時限定於 -5 ~ 5 之間。
程式碼如下:
int vx = (int)random(-5, 5);
int vy = (int)random(-5, 5);
cx += vx;
cy += vy;
完整程式碼如下:
int cx, cy;
void setup() {
size(800,600);
cx = width / 2;
cy = height / 2;
frameRate(10);
}
void draw() {
background(155);
int vx = (int)random(-5, 5);
int vy = (int)random(-5, 5);
cx += vx;
cy += vy;
rect(cx, cy, 5, 5);
}
延伸閱讀
亂數 random 函式 https://processing.org/reference/random_.html
沒有留言:
張貼留言