一款用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
.
游戲編寫小結:雖然這是一個非常簡單的游戲程序實例,但還是用到了游戲設計的一些基本思路,比如點的位置判斷,不同的條件設置和判斷,游戲素材的屬性設置和條件控制等。但是,首先在頭腦中形成一個游戲的大體原型才是最重要的。本游戲最終的運行界面: