BCB小瑪俐設計(一)
由於自己本身也還是學生,因此,難免有些狂言謬論,如果有錯誤之處,還請多多指教,或者,你有些想法也可以提出討論。
個人習慣在寫程式之前,會先想一下遊戲的雛型,比如說遊戲的畫面、規則等等…,這樣才好規劃流程圖,在做流程圖同時順便設計一下公式,接著就開始蒐集資料、參考的圖片,畫些遊戲圖片、使用者介面圖形,再來就開始寫程式,測試,除錯,繼續迴圈,直到完成為止。
以小瑪俐來說,依面板上的水果圖案數量取亂數,比如說有14個,那就設定取亂數1~14,再來就是利用switch來移動LED燈,透過設定物件的Left、Top值來達成目的,使用計時器控制移動的速度。
程式碼:
※bw為LED燈物件
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//全域變數(num中獎的號碼),(pos代表LED燈位置),(sel控制移動速度)
int num,pos = 1,sel;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//點擊開始按鈕
void __fastcall TForm1::bGoClick(TObject *Sender)
{
srand((unsigned)time(NULL)); //取得系統時間作為亂數種子
Timer1->Enabled = true; //開啟計時器1
Timer1->Interval = 100; //設定計時器執行時間
num=rand()%14; //取亂數
num += 56; //將取得的亂數加56,可多繞4圈
sel = num;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
sel--;
if(sel<6) //判斷sel小於6增加計時器執行時間為500(0.5秒執行一次)
Timer1->Interval = 500;
if(sel<3) //判斷sel小於3增加計時器執行時間為1000(1秒執行一次)
Timer1->Interval = 1000;
if(sel==0) //判斷sel等於0關閉計時器
{
Timer1->Enabled = false;
}
pos++; //移動位置加1,等於15(即繞完一圈)回到1
if(pos==15)
pos=1;
switch(pos) //依照pos移動到指定的位置
{
case 1:
bw->Left = 64;
bw->Top = 16;
break;
case 2:
bw->Left = 112;
bw->Top = 16;
break;
case 3:
bw->Left = 160;
bw->Top = 16;
break;
case 4:
bw->Left = 208;
bw->Top = 16;
break;
case 5:
bw->Left = 208;
bw->Top = 64;
break;
case 6:
bw->Left = 208;
bw->Top = 112;
break;
case 7:
bw->Left = 208;
bw->Top = 160;
break;
case 8:
bw->Left = 160;
bw->Top = 160;
break;
case 9:
bw->Left = 112;
bw->Top = 160;
break;
case 10:
bw->Left = 64;
bw->Top = 160;
break;
case 11:
bw->Left = 16;
bw->Top = 160;
break;
case 12:
bw->Left = 16;
bw->Top = 112;
break;
case 13:
bw->Left = 16;
bw->Top = 64;
break;
case 14:
bw->Left = 16;
bw->Top = 16;
break;
}
} |
沒有留言:
張貼留言