請問如何亂數丟3點在平面上隨機移動呢 |
尚未結案
|
candc
一般會員 ![]() ![]() 發表:3 回覆:7 積分:2 註冊:2003-07-12 發送簡訊給我 |
|
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
如果是我猜的那樣子的話,
那這裡有一個我寫的範例,你可以參考看看,
先在Form上放三個label,和一個timer
加入以下程式碼,就會在畫面上出現0~99的亂數,
如果你timer的interval沒改的話,就是一秒變一次位置
|
candc
一般會員 ![]() ![]() 發表:3 回覆:7 積分:2 註冊:2003-07-12 發送簡訊給我 |
|
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
candc你好,
如果要有規律的話,就不是random了~
可以用迴圈來控制,
而要平行的話,就不要去改變Label的Top,只要讓left改變就行,
只要注意不要讓他跑出Form的邊界範團就好,
把之前的範例改為:
int Label1_locate=1; //宣告成全域變數,記得 void __fastcall TForm1::Timer1Timer(TObject *Sender) { Label1_locate ; if(Label1_locate>=Form1->Width - Label1->Caption.Length()) Label1_locate = 1; //判斷是否超出Form的邊界,超出就重頭 randomize(); Label1->Caption=IntToStr(random(100)); Label1->Left=Label1_locate; }這只有對Label1做而已,其他兩個你可以自行改變, 不一定每次只左移一,可以右移,或一次移多一點~ 你如果覺得一秒太久, 可以把timer的interval設小一點,參考看看 |
candc
一般會員 ![]() ![]() 發表:3 回覆:7 積分:2 註冊:2003-07-12 發送簡訊給我 |
|
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
candc你好,
可用雙隨機變數,
以下範例參考看看:
int Label1_locateX=1; int Label1_locateY=1; int borderX; int borderY; //---------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { borderX = Form1->Width - 50; //定義新邊界 borderY = Form1->Height - 50; } //--------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { int a =random(4); //產生亂數方向 switch(a) { case 0: Label1_locateY--; if(Label1_locateY<=0) Label1_locateY = borderY; break; case 1: Label1_locateY ; if(Label1_locateY>=borderY) Label1_locateY = 1; break; case 2: Label1_locateX--; if(Label1_locateX<=0) Label1_locateX = borderX; break; case 3: Label1_locateX ; if(Label1_locateX>=borderX) Label1_locateX = 1; break; default: break; } randomize(); Label1->Caption=IntToStr(random(100)); Label1->Left = Label1_locateX; Label1->Top = Label1_locateY; } 國泰平安發表人 - gemi0305 於 2003/07/17 15:18:51 |
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
candc
一般會員 ![]() ![]() 發表:3 回覆:7 積分:2 註冊:2003-07-12 發送簡訊給我 |
gemi0305 你好
不好意思 之前想一個方法 就忘了上來看看
想再請教你呢 不好意思喔
現在從另一方向來看@@
亂數給xy值 (x,y) 為座標值
v=t/s 每秒 t距離
可以看成一個圓 圓心為(x,y)
半徑 t 。
(x,y)移動後下一座標(x1,y1)
(x1,y1)=(x,y) (Xy,Yy)
Xy Yy 如何的到ㄋ @@ 知道半徑t 所以我們亂數從 0~t 決定Xy
如此可以知 Yy @@
只是我們要讓他亂跑 所以Xy 與 Yy 值決定後有辦法讓他亂數產生正負嗎
這是我有想到的 可是老實說 我不大知道如何來實作
不好意思 可以給我點意見嗎? ^_^ 謝謝你
|
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
candc
一般會員 ![]() ![]() 發表:3 回覆:7 積分:2 註冊:2003-07-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |