实例5--打地鼠(界面实现).doc_第1页
实例5--打地鼠(界面实现).doc_第2页
实例5--打地鼠(界面实现).doc_第3页
实例5--打地鼠(界面实现).doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实例五 打地鼠(界面实现部分)【程序说明】打地鼠是一个以前非常流行的游戏,这个游戏的版本也是层出不穷。虽然游戏界面一直在变换,但是它的核心代码却变化不大。由于程序的完整代码较长,这里分两个实例来说明这个游戏:界面实现部分和主体部分。前者主要讲解游戏的界面是如何实现的,后者则阐述游戏的主要设计思想和具体的实现代码。本例的程序运行结果如图4-1所示。图5-1 打地鼠【编程思路】 一个成功的游戏除了要有好的游戏思想之外,还必须有精美的素材。这些素材包括图像、声音和影象等。素材的加入可以使游戏更加具有趣味性。而事实上,这些素材的准备和搭配就往往要占去游戏开发的很大一部分时间。下面是本例素材的基本实现方法和步骤:1、用专业的资源制作工具,如图像制作工具,声音制作工具来编辑制作资源文件,将这些文件保存到同一目录下。2、用记事本新建一个RC文件(在保存时选择文件类型为“所有类型”,文件名中键入*.rc)。比如本例的这个资源文件的rc文件内容见图5-2。注意RC文件的格式:名称 类型 实际文件名称。特别要注意图5-2 本例用到的graphics.rc文件的是要确保实际名称是有效存在的。而且.资源类型除CURSOR、BITMAP、WAVE、AVI、ICON等外,还可以字体文件或字符串文件等。本例也有这方面的涉及。3、将rc文件编译成res资源文件。将RC文件和实际资源文件拷到系统盘根目录或Brcc32.exe下(目录为X:BorlandDelphi7Bin),执行Delphi提供的:Brcc32命令:Brcc32graphics.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 begin MenuButtonBitmapbtnOrder, btnUP := TBitmap.Create; MenuButtonBitmapbtnOrder,btnUP.LoadFromResourceName(hInstance,MenuButtonImageNamebtnOrder, btnUP); MenuButtonBitmapbtnOrder, btnOVER := TBitmap.Create; MenuButtonBitmapbtnOrder, btnOVER.LoadFromResourceName(hInstance,MenuButtonImageNamebtnOrder, btnOVER); MenuButtonBitmapbtnOrder, btnDown := TBitmap.Create; MenuButtonBitmapbtnOrder, btnDown.LoadFromResourceName(hInstance,MenuButtonImageNamebtnOrder, btnDOWN); end;图像窗口的实现 round := 128; MainForm.Brush.Style:=bsClear; myRgn := 0; GetWindowRgn(MainForm.Handle, myRgn); DeleteObject(myRgn); myRgn:= CreateroundRectRgn(0,0,MainForm.Width,MainForm.Height, round, round); SetWindowRgn(MainForm.Handle, myRgn, TRUE); SpriteBitmap := TBitmap.Create; SpriteBitmap.LoadFromResourceName(hInstance, SPRITE); MaskBitmap := TBitmap.Create; MaskBitmap.LoadFromResourceName(hInstance, MASK); BitBlt(BufferBitmap.Canvas.Handle, 0, 0, BufferBitmap.Width, BufferBitmap.Height,BackGroundBitmap.Canvas.Handle, 0, 0, SRCCOPY); RatTimer.Enabled := FALSE; LeftTime := 59; Score := 0; Left := (Screen.Width - Width) div 2; Top := (Screen.Height - Height) div 2;end;(2)当主窗口显示之后,控制窗口也同样显示在主窗口的上面,这是下面的代码实现的。注意在MainForm的implementation后加入uses Ctrl。procedure TMainForm.FormShow(Sender: TObject);begin /游戏上半部分界面的显示位置 CtrlForm.Left := MainForm.Left + 69; CtrlForm.Top := MainForm.Top - 100; CtrlForm.Show;end;(3)下面是控制窗口出现的代码,其目的同样也是为了加载素材和进行一些基本设置。procedure TCtrlForm.FormCreate(Sender: TObject);var offset : cardinal; i : integer;begin 控制窗口出现的一些基本设置 CtrlForm.ClientWidth := CtrlBitmap.Width; CtrlForm.ClientHeight := CtrlBitmap.Height; CtrlForm.Canvas.Draw(0, 0, CtrlBitmap); MenuImage.Width := 12; MenuImage.Height := 12; MenuImage.Top := 2; MenuImage.Left := 2; MinImage.Width := 12; MinImage.Height := 12; MinImage.Top := 2; MinImage.Left := CtrlForm.ClientWidth - 14; MinUPBitmap := TBitmap.Create; MinUPBitmap.LoadFromResourceName(hInstance, MINUP); MinDOWNBitmap := TBitmap.Create; MinDOWNBitmap.LoadFromResourceName(hInstance, MINDOWN); MenuBitmap := TBitmap.Create; MenuBitmap.LoadFromResourceName(hInstance, MENU); MinImage.Picture.Bitmap := MinUPBitmap; MenuImage.Picture.Bitmap := MenuBitmap; offset := Cardinal(NewBtnImage); i := 0; while offset = Cardinal(AboutBtnImage) do begin PTImage(offset).Tag := i; PTImage(offset).Width := 30; PTImage(offset).Height := 25; PTImage(offset).Top := 75; PTImage(offset).Left := 25+i*55; PTImage(offset).Picture.Bitmap := MenuButtonBitmapMenuButtonOrder(i), btnUP; i := i + 1; offset := offset + si

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论