一款用Delphi編寫的小游戲——小狗過橋,雖然簡單,但表現出了游戲的眾多功能,對開發Delphi游戲的新手或許會起到參考作用。游戲一開始,左邊小狗開始下落運動,右邊浮橋開始向上運動。在窗口單擊左鍵時會出現另一渡橋。通過這個渡橋,左邊小狗要達到上升的浮橋,否則就游戲失敗。如果小狗遇到上升浮橋,小狗就會和這個浮橋一起向上運動。接近窗口頂端時,兩只小狗見面了,游戲成功。
編程思路:Delphi小狗過橋游戲主要依靠Timer控制Image的運動來實現。Image運動過程會出現很多中情況。這些情況都要加以考慮。因此,游戲開發需要考慮很多條件,不同的條件的響應事件是不同的。比如,在本例中,假如小狗在渡橋的下方、小狗運動超過窗口邊框或者是小狗超過渡橋還沒有與之相遇,這些情況游戲都會給出失敗提示。而當小狗落在上升的紅橋的上方時,小狗隨著上升浮橋一起上升,直到與另一只小狗相遇。具體代碼:
01
unit Unit1;
02
interface
03
uses
04
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
05
Dialogs, ExtCtrls, jpeg, StdCtrls;
06
type
07
TForm1 = class(TForm)
08
Image1: TImage;
09
Timer1: TTimer;
10
Image2: TImage;
11
Image3: TImage;
12
Timer2: TTimer;
13
Image4: TImage;
14
Button1: TButton;
15
procedure Timer1Timer(Sender: TObject);
16
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
17
Y: Integer);
18
procedure Timer2Timer(Sender: TObject);
19
procedure Button1Click(Sender: TObject);
20
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
21
Shift: TShiftState; X, Y: Integer);
22
private
23
{ Private declarations }
24
public
25
{ Public declarations }
26
end;
27
var
28
Form1: TForm1;
29
implementation
30
{$R *.dfm}
31
procedure TForm1.Button1Click(Sender: TObject);
32
begin
33
Image1.Left:=0; //下移小狗位置復原
34
Image1.Top:=0;
35
Image3.Top:=Form1.Height-16; //上升浮橋位置復原
36
Image4.Visible:=False;
37
//開啟Timer
38
Timer1.Enabled:=True;
39
Timer2.Enabled:=True;
40
end;
41
procedure TForm1.Timer1Timer(Sender: TObject);
42
begin
43
If Image1.Top+Image1.Height>Image2.Top Then
44
{這句代碼主要是和後面的Image1.Top:=Image1.Top+4相抵消,
45
小狗就只有水平方向的運動速度了}
46
Image1.Top:=Image1.Top-4;
47
If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height),
48
Point(Image3.Left,Image3.Top)) Then //小狗遇到了橋
49
Timer1.Enabled:=False;
50
If (Image1.Top>Image3.Top+Image3.Height) or //小狗位於橋的下放
51
(Image1.Top+Image1.Height>Form1.Height) or //小狗超過了窗口的下邊界
52
(Image1.Left+Image1.Width>Form1.Width) Then //小狗超過了窗口的右邊界
53
Begin
54
Timer1.Enabled:=False;
55
Timer2.Enabled:=False;
56
showMessage('游戲失敗');
57
end;
58
Image1.Left:=Image1.Left+4; //小狗右移
59
Image1.Top:=Image1.Top+4; //小狗下移
60
end;
61
procedure TForm1.Timer2Timer(Sender: TObject);
62
begin
63
Image3.Top:=Image3.Top-2;
64
If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height),
65
Point(Image3.Left,Image3.Top)) Then
66
Image1.Top:=Image1.Top-2; //Image1和Image3一起向上運動
67
If Image3.Top=40 Then //快接近頂端時,停止Timer2
68
Begin
69
Image4.Left:=Image3.Left+Image3.Width; //兩只小狗見面
70
Image4.Top:=Image1.Top;
71
Image4.Visible:=True;
72
Timer2.Enabled:=False;
73
Application.MessageBox('成功了!兩只小狗見面了!','游戲成功',1);
74
end;
75
end;
76
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
77
Y: Integer);
78
begin
79
If ssLeft in Shift Then
80
Begin
81
Image2.Visible:=True; //當按下左鍵時,渡橋可見
82
Image2.Left:=x;
83
Image2.Top:=y;
84
end
85
Else
86
Begin
87
{沒有按下左鍵但鼠標又在移動時,渡橋放置在左下角,使左邊小狗可以繼續下移 }
88
Image2.Left:=10;
89
Image2.Top:=Height-120;
90
end;
91
end;
92
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
93
Shift: TShiftState; X, Y: Integer);
94
begin
95
Image2.Visible:=False; //當松開鼠標時,渡橋隱藏
96
end;
97
end.
游戲編寫小結:雖然這是一個非常簡單的游戲程序實例,但還是用到了游戲設計的一些基本思路,比如點的位置判斷,不同的條件設置和判斷,游戲素材的屬性設置和條件控制等。但是,首先在頭腦中形成一個游戲的大體原型才是最重要的。本游戲最終的運行界面:
