程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi掃雷主體界面部分代碼

Delphi掃雷主體界面部分代碼

編輯:Delphi

Delphi掃雷游戲一般都是由主體界面和游戲控制兩部分代碼組成,今天來說游戲的主界面部分如何實現。這個游戲同樣也涉及到資源文件的制作和載入。也正是這些素材的加入,才使本例的掃雷游戲在界面上要比Windows系統自帶的掃雷游戲更能吸引游戲者的目光。下面是素材的准備和加載過程:
1、用圖像制作工具,聲音制作工具來編輯制作資源文件,將這些素材文件保存到同一目錄下。
2、按照前面介紹的方法用記事本新建一個graphic.rc文件,後面會有源碼包供下載。
3、按照前面介紹的方法用brcc32命令將graphic.rc文件編譯成同名的RES資源文件。選擇菜單Tools|Image Editor,然後在Image Editor中選擇File|Open,選中graphics.rc就可以查看這個文件的內容,graphics.res內容會附有源碼包。
4、將生成的graphics.res資源文件拷貝到你所編程序的路徑下,在單元文件{$R *DFM}後或主程序的{$R *.RES}後加上一句{$Rgraphics.res},則將res文件加入去,編譯後資源文件即已包含在可執行文件中了。若有多個資源文件,也按上法依次加入。
5、最後是資源文件在Delphi中的調用方法。

編寫代碼。

(1)在MainForm的OnCreate事件中添加下列代碼,實現對資源文件從RES中的載入,同時實現界面對象的布局。

procedure TMainForm.FormCreate(Sender: TObject);
var  loop : BombStatus;
begin
       {程序運行時的一些基本初始化設置}
     bGameOver := FALSE;
     bGameRunning := FALSE;
     Timer.Enabled := FALSE;
     BombStatusBitmapName[bsNormal] := 113;
     BombStatusBitmapName[bsMaskAsBomb] := 112;
     BombStatusBitmapName[bsNumber0] := 102;
     BombStatusBitmapName[bsNumber1] := 103;
     BombStatusBitmapName[bsNumber2] := 104;
     BombStatusBitmapName[bsNumber3] := 105;
     BombStatusBitmapName[bsNumber4] := 106;
     BombStatusBitmapName[bsNumber5] := 107;
     BombStatusBitmapName[bsNumber6] := 108;
     BombStatusBitmapName[bsNumber7] := 109;
     BombStatusBitmapName[bsNumber8] := 110;

     BombStatusBitmapName[bsExploded] := 111;
     BombStatusBitmapName[bsWrong] := 115;
     BombStatusBitmapName[bsShow] := 114;
     SetWindowLong(Handle,GWL_STYLE, GetWindowLong(Handle,GWL_STYLE) and
not WS_CAPTION);
     BackGroundBitmap := TBitmap.Create;
     BackGroundBitmap.LoadFromResourceID(hInstance, 121);
     ClientWidth := BackGroundBitmap.Width;
     ClIEntHeight := BackGroundBitmap.Height;
     CloseImage.Left := 383;
     CloseImage.Top := 1;
     {“開始”圖象的位置}
     StartBtnImage.Left := 298;
     StartBtnImage.Top := 172;
     StartBtnImage.Picture.Bitmap.LoadFromResourceID(hInstance, 127);
     StartBtnImage.Width := StartBtnImage.Picture.Bitmap.Width;
     StartBtnImage.Height := StartBtnImage.Picture.Bitmap.Height;
     Hour := 0;
     Minute := 0;
     Second := 0;
      //根據設置的游戲級別來設置雷的數目
     If RadioButton1.Checked Then
       BombNumber :=Easy_TotalBombNumber;
     If RadioButton2.Checked Then
       BombNumber :=Middle_TotalBombNumber;
     If RadioButton3.Checked Then
       BombNumber :=High_TotalBombNumber;
     InitBomb;
     Image.Left := 24;
     Image.Top := 53;
     Image.Width := 224;
     Image.Height := 224;
       //加載位圖文件
     for loop := bsNormal to bsShow do
     begin
       BombStatusBitmap[loop] := TBitmap.Create;
       BombStatusBitmap[loop].LoadFromResourceID(hInstance, BombStatusBitmapName[loop]);
     end;
end;

(2)為了將掃雷時間和剩余的雷數顯示在相應的位置,本例構造了DrawTimeAndBombNumber函數。這個函數的代碼如下:

procedure TMainForm.DrawTimeAndBombNumber;
var
   s1, s2, s3, s : string;
   x, y : integer;
begin
  s1 := IntToStr(Second);
  if Second < 10 then
    begin
      S1[2] := s1[1];
      S1[1] := '0';
    end;
  s2 := IntToStr(Minute);
  if Minute < 10 then
    begin
      S2[2] := s2[1];
      S2[1] := '0';
    end;
  s3 := IntToStr(Hour);
  if Hour < 10 then
    begin
      S3[2] := s3[1];
      S3[1] := '0';
    end;
   if BombNumber < 0 then BombNumber := 0;
     s := IntToStr(BombNumber);
   if BombNumber < 10 then
     begin
       s[2] := s[1];
       s[1] := '0';
     end;
   x := 283;
   y := 75;
   with ImageLedLNum do  //顯示所用時間
     begin
        Draw(Canvas, x, y, 10);
        Draw(Canvas, x+10, y, StrToInt(s2[1]));
        Draw(Canvas, x+10+18, y, StrToInt(s2[2]));
        Draw(Canvas, x+10+18+18, y, 11);
        Draw(Canvas, x+10+18+18+10, y, StrToInt(s1[1]));
        Draw(Canvas, x+10+18+18+18+10, y, StrToInt(s1[2]));
     end;
   x := 303;
   y := 132;
   with ImageLedLNum do   //顯示剩余雷數
     begin
       Draw(Canvas, x+10, y, StrToInt(s[1]));
       Draw(Canvas, x+10+18, y, StrToInt(s[2]));
     end;
end;

(3)下面是MainForm的OnPaint事件代碼,主要是用來繪制界面背景、顯示時間和剩余雷數的數字以及排布雷區。

procedure TMainForm.FormPaint(Sender: TObject);
begin   //
  Canvas.Draw(0,0,BackGroundBitmap); // 繪制背景
  DrawTimeAndBombNumber;        //顯示時間和剩余雷數的數字
  ShowBomb;   //排布雷區(代碼略,參考光盤)
end;

本例主要實現了游戲的資源設計和加載部分,比較系統地論述了資源文件在Delphi中的引入方法,包括了素材的准備和加載、界面顯示和設計、計時器的設置等。與前面一個游戲相比較,這個程序的資源調用方法又略微不同。這一點在游戲設計和代碼編寫的時候一定要仔細加以區別。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved