实例一 小狗过桥游戏
【程序说明】
本例实现了小狗过桥的游戏。程序一开始,左边小狗开始下落运动,右边浮桥开始向上运动。在窗口单击左键时会出现另一渡桥。通过这个渡桥,左边小狗要达到上升的浮桥,否则就游戏失败。如果小狗遇到上升浮桥,小狗就会和这个浮桥一起向上运动。接近窗口顶端时,两只小狗见面了,游戏成功。游戏成功和失败的结果如图1-1和1-2所示。
图1-1 游戏成功提示 图1-2 游戏失败信息
【编程思路】
本例的游戏主要依靠Timer 控制Image 的运动来实现。Image 运动过程会出现很多中情况。这些情况都要加以考虑。因此,游戏开发需要考虑很多条件,不同的条件的响应事件是不同的。比如,在本例中,假如小狗在渡桥的下方、小狗运动超过窗口边框或者是小狗超过渡桥还没有与之相遇,这些情况游戏都会给出失败提示。而当小狗落在上升的红桥的上方时,小狗随着上升浮桥一起上升,直到与另一只小狗相遇。具体的说明见代码。
【编程步骤】.
1.选择File|New|Application,新建一个应用程序。
2.添加控件和界面布局。向Form 上添加4个Image ,2个Timer 和1个Button 。
3.控件主要属性设置。为了避免图像运动过程中的过分闪烁,这里设置2个Timer 的Interval 为100,Enabled 均为False 。4个Image 里的Picture 内容:Image1为左边小狗,Image2为左边渡桥,Image3为上升浮桥,Image4为右边小狗。其他控件属性设置如图1-3所示。
图1-3 控件属性和布局
4.编写代码。
(1)双击Button1(“重新开始”),然后添加下列代码以响应OnClick 事件,将各对象位置复原,重新开始一个游戏。
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Left:=0; //下移小狗位置复原
Image1.Top:=0;
Image3.Top:=Form1.Height-16; //上升浮桥位置复原
Image4.Visible:=False;
//开启Timer
Timer1.Enabled:=True;
Timer2.Enabled:=True;
end;
(2)双击Timer1,然后添加下列代码以响应OnTimer 事件,实现左端小狗针对不同的具体情况进行不同的运动。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Image1.Top+Image1.Height>Image2.Top Then
{这句代码主要是和后面的Image1.Top:=Image1.Top+4相抵消,小狗就只有水平方向的运动速度了} Image1.Top:=Image1.Top-4;
If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height), Point(Image3.Left,Image3.Top)) Then
Timer1.Enabled:=False;
If (Image1.Top>Image3.Top+Image3.Height) or //小狗位于桥的下放
(Image1.Top+Image1.Height>Form1.Height) or //小狗超过了窗口的下边界
(Image1.Left+Image1.Width>Form1.Width) Then //小狗超过了窗口的右边界
Begin
Timer1.Enabled:=False;
Timer2.Enabled:=False;
showMessage('游戏失败');
end;
Image1.Left:=Image1.Left+4; //小狗右移
Image1.Top:=Image1.Top+4; //小狗下移
end;
(3)双击Timer2,然后添加下列代码以响应OnTimer 事件,实现上升浮桥的不同运动状态。
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Image3.Top:=Image3.Top-2;
If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height), Point(Image3.Left,Image3.Top)) Then
Image1.Top:=Image1.Top-2; //Image1和Image3一起向上运动
If Image3.Top=40 Then //快接近顶端时,停止Timer2
Begin
Image4.Left:=Image3.Left+Image3.Width; //两只小狗见面
Image4.Top:=Image1.Top;
Image4.Visible:=True;
Timer2.Enabled:=False;
Application.MessageBox('成功了!两只小狗见面了!',' 游戏成功',1);
end;
end;
(4)在Form1的OnMouseMove 事件中添加下列代码,判断鼠标左键是否按下,再决定渡桥是否显示出来,还是将渡桥复原。
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If ssLeft in Shift Then
Begin
Image2.Visible:=True; //当按下左键时,渡桥可见
Image2.Left:=x;
Image2.Top:=y;
end
Else
Begin
{没有按下左键但鼠标又在移动时,渡桥放置在左下角,使左边小狗可以继续下移 }
Image2.Left:=10;
Image2.Top:=Height-120;
end;
end;
松开鼠标后,渡桥仍然隐藏,这个实现代码如下:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image2.Visible:=False; //当松开鼠标时,渡桥隐藏
end;
5.保存所有文件,然后按F9运行该程序。
【程序小结】
这是一个非常简单的游戏程序实例。虽然简单,但还是用到了游戏设计的一些基本思路,比如点的位置判断,不同的条件设置和判断,游戏素材的属性设置和条件控制等。但是,首先在头脑中形成一个游戏的大体原型才是最重要的。这一点在后面的实例中会进一步阐述。
实例一 小狗过桥游戏
【程序说明】
本例实现了小狗过桥的游戏。程序一开始,左边小狗开始下落运动,右边浮桥开始向上运动。在窗口单击左键时会出现另一渡桥。通过这个渡桥,左边小狗要达到上升的浮桥,否则就游戏失败。如果小狗遇到上升浮桥,小狗就会和这个浮桥一起向上运动。接近窗口顶端时,两只小狗见面了,游戏成功。游戏成功和失败的结果如图1-1和1-2所示。
图1-1 游戏成功提示 图1-2 游戏失败信息
【编程思路】
本例的游戏主要依靠Timer 控制Image 的运动来实现。Image 运动过程会出现很多中情况。这些情况都要加以考虑。因此,游戏开发需要考虑很多条件,不同的条件的响应事件是不同的。比如,在本例中,假如小狗在渡桥的下方、小狗运动超过窗口边框或者是小狗超过渡桥还没有与之相遇,这些情况游戏都会给出失败提示。而当小狗落在上升的红桥的上方时,小狗随着上升浮桥一起上升,直到与另一只小狗相遇。具体的说明见代码。
【编程步骤】.
1.选择File|New|Application,新建一个应用程序。
2.添加控件和界面布局。向Form 上添加4个Image ,2个Timer 和1个Button 。
3.控件主要属性设置。为了避免图像运动过程中的过分闪烁,这里设置2个Timer 的Interval 为100,Enabled 均为False 。4个Image 里的Picture 内容:Image1为左边小狗,Image2为左边渡桥,Image3为上升浮桥,Image4为右边小狗。其他控件属性设置如图1-3所示。
图1-3 控件属性和布局
4.编写代码。
(1)双击Button1(“重新开始”),然后添加下列代码以响应OnClick 事件,将各对象位置复原,重新开始一个游戏。
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Left:=0; //下移小狗位置复原
Image1.Top:=0;
Image3.Top:=Form1.Height-16; //上升浮桥位置复原
Image4.Visible:=False;
//开启Timer
Timer1.Enabled:=True;
Timer2.Enabled:=True;
end;
(2)双击Timer1,然后添加下列代码以响应OnTimer 事件,实现左端小狗针对不同的具体情况进行不同的运动。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Image1.Top+Image1.Height>Image2.Top Then
{这句代码主要是和后面的Image1.Top:=Image1.Top+4相抵消,小狗就只有水平方向的运动速度了} Image1.Top:=Image1.Top-4;
If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height), Point(Image3.Left,Image3.Top)) Then
Timer1.Enabled:=False;
If (Image1.Top>Image3.Top+Image3.Height) or //小狗位于桥的下放
(Image1.Top+Image1.Height>Form1.Height) or //小狗超过了窗口的下边界
(Image1.Left+Image1.Width>Form1.Width) Then //小狗超过了窗口的右边界
Begin
Timer1.Enabled:=False;
Timer2.Enabled:=False;
showMessage('游戏失败');
end;
Image1.Left:=Image1.Left+4; //小狗右移
Image1.Top:=Image1.Top+4; //小狗下移
end;
(3)双击Timer2,然后添加下列代码以响应OnTimer 事件,实现上升浮桥的不同运动状态。
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Image3.Top:=Image3.Top-2;
If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height), Point(Image3.Left,Image3.Top)) Then
Image1.Top:=Image1.Top-2; //Image1和Image3一起向上运动
If Image3.Top=40 Then //快接近顶端时,停止Timer2
Begin
Image4.Left:=Image3.Left+Image3.Width; //两只小狗见面
Image4.Top:=Image1.Top;
Image4.Visible:=True;
Timer2.Enabled:=False;
Application.MessageBox('成功了!两只小狗见面了!',' 游戏成功',1);
end;
end;
(4)在Form1的OnMouseMove 事件中添加下列代码,判断鼠标左键是否按下,再决定渡桥是否显示出来,还是将渡桥复原。
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If ssLeft in Shift Then
Begin
Image2.Visible:=True; //当按下左键时,渡桥可见
Image2.Left:=x;
Image2.Top:=y;
end
Else
Begin
{没有按下左键但鼠标又在移动时,渡桥放置在左下角,使左边小狗可以继续下移 }
Image2.Left:=10;
Image2.Top:=Height-120;
end;
end;
松开鼠标后,渡桥仍然隐藏,这个实现代码如下:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image2.Visible:=False; //当松开鼠标时,渡桥隐藏
end;
5.保存所有文件,然后按F9运行该程序。
【程序小结】
这是一个非常简单的游戏程序实例。虽然简单,但还是用到了游戏设计的一些基本思路,比如点的位置判断,不同的条件设置和判断,游戏素材的属性设置和条件控制等。但是,首先在头脑中形成一个游戏的大体原型才是最重要的。这一点在后面的实例中会进一步阐述。