实例5--打地鼠(界面实现)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实例五打地鼠(界面实现部分)
【程序说明】
打地鼠是一个以前非常流行的游戏,这个游戏的版本也是层出不穷。虽然游戏界面一直在变换,但是它的核心代码却变化不大。由于程序的完整代码较长,这里分两个实例来说明这个游戏:界面实现部分和主体部分。前者主要讲解游戏的界面是如何实现的,后者则阐述游戏的主要设计思想和具体的实现代码。本例的程序运行结果如图4-1所示。
图5-1 打地鼠
【编程思路】
一个成功的游戏除了要有好的游戏思想之外,还必须有精美的素材。这些素材包括图像、声音和影象等。素材的加入可以使游戏更加具有趣味性。而事实上,这些素材的准备和搭配就往往要占去游戏开发的很大一部分时间。下面是本例素材的基本实现方法和步骤:
1、用专业的资源制作工具,如图像制作工具,声音制作工具来编辑制作资源文件,将这些文件保存到同一目录下。
2、用记事本新建一个RC文件(在保存时选择文件类型为“所有类型”,文件名中键入*.rc)。比如本例的这个资源文件的rc文件内容见图5-2。注意RC文件的格式:名称类型实际文件名称。特别要注意
图5-2 本例用到的graphics.rc文件
的是要确保实际名称是有效存在的。而且.资源类型除CURSOR、BITMAP、WA VE、A VI 、ICON等外,还可以字体文件或字符串文件等。本例也有这方面的涉及。
3、将rc文件编译成res资源文件。将RC文件和实际资源文件拷到系统盘根目录或Brcc32.exe下(目录为X:\Borland\Delphi7\Bin),执行Delphi提供的:Brcc32 命令:Brcc32 graphics.rc (回车)。如果编译成功,则会生成一个结尾为res的文件,这个文件就是我们需要的资源文件——graphics.res。选择菜单Tools|Image Editor,然后在Image Editor中选择File|Open,选中graphics.rc就可以查看这个文件的内容,如图5-3所示。
图5-3 graphics.res内容
4、将生成的graphics.res资源文件拷贝到你所编程序的路径下,在单元文件{$R *DFM}后或主程序的{$R *.RES}后加上一句{$Rgraphics.res},则将res文件加入去,编译后资源文件即已包含在可执行文件中了。若有多个资源文件,也按上法依次加入。
5、最后是资源文件在Delphi中的调用方法。具体可参考下面的代码。
【编程步骤】.
1.首先,按【编程思路】的方法设计游戏素材。然后,选择File|New|Application,新建一个应用程序。
2.主窗口设计。首先向Form上添加2个Timer、1个PopupMenu,然后对这些控件进行布局,2个Timer的Name分别是ScoreTimer和RatTimer,Enabled分别为False和True,Interval分别为1000和40,如图4-2所示。这个窗口是作为主窗口的(图5-1的下半部分)。
图5-3 主窗口的控件和窗口布局
3.控制窗口设计。选择File|New||Form,然后向Form上添加7个Image和1个ImageList,如图5-4所示。双击ImageList1,然后按Add载入10个数字位图,如图5-5所示。
图5-4 控制窗口
图5-5 ImageList1的内容
4.编写代码。
打地鼠游戏分为两个部分来说明。本部分的代码大都是面向界面的,而且由于篇幅有限,只介绍主要的代码。完整代码可以参考光盘内容。
(1)在程序运行后,要进行一些必要的设置:初始数据的设置,素材的载入和具体的位置,计时设置,等。这些都是通过下列代码来实现。在这段代码中,有不少自定义的函数,这在代码中说明。
procedure TMainForm.FormCreate(Sender: TObject);
var
myRgn : HRGN;
round : integer;
btnOrder : MenuButtonOrder;
begin
{程序运行的初始设置}
GameRunning := FALSE;
GamePause := FALSE;
InitData; //初始数字的设置
HandStatus := Hand_Up; //锤子松开
{设置素材的位置和显示}
BackGroundBitmap := TBitmap.Create;
BackGroundBitmap.LoadFromResourceName(hInstance, 'BACKGROUND');
BufferBitmap := TBitmap.Create;
BufferBitmap.Width := BackGroundBitmap.Width;
BufferBitmap.Height := BackGroundBitmap.Height;
MainForm.ClientWidth := BackGroundBitmap.Width;
MainForm.ClientHeight := BackGroundBitmap.Height;
OKUPButtonBitmap:= TBitmap.Create;
OKUPButtonBitmap.LoadFromResourceName(hInstance, 'OKUP');
OKDOWNButtonBitmap:= TBitmap.Create;
OKDOWNButtonBitmap.LoadFromResourceName(hInstance, 'OKDOWN');
CtrlBitmap := TBitmap.Create;
CtrlBitmap.LoadFromResourceName(hInstance, 'CONTROL');
for btnOrder := btnOrderNEW to btnOrderABOUT do