2011年7月15日 星期五

BCB小瑪俐設計(一)

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;

  }
}

沒有留言: