我要“寻找吉祥鸡”

春节特刊

这里奉献给大家一个祝福新年的小游戏——《寻找吉祥鸡》:三只碗下分别藏有两个寿星和一只鸡(吉),如果你能翻开第一只碗就找到这只鸡,那么在新的一年里必带给你吉祥和如意!开发工具选择的是Delphi,完整的程序和相关的代码下载地址:http://www.cpcw.com/05/game.rar。

5-g15-1-1.jpg
程序效果图

一、编程思路

为了增加游戏的趣味性,我们设定了两种游戏方式。一种游戏情况是在头两次玩家点击碗时不会出现鸡,而是随机出现另外两张图片(寿星);另外一种游戏情况则相反,只要在进行选择前按下了回车键,翻开第一个碗看到的就一定是吉祥的鸡的图片。

这个小游戏的编码相对来说比较容易,关键是要注意三点:

1.首先是为了增加界面的友好性,需要制作一个不规则的游戏程序窗口。

2.每只碗被鼠标单击,也就是玩家发送翻开碗命令前,要判断是否按下了回车键。如果按下了回车键,又要判断是否翻开第一个碗。如果是则显示cock.jpg,再次翻开另外的碗后显示剩余的fuzhu1.jpg和fuzhu2.jpg图片。

3.如果在发送翻开碗命令前,没有按下回车键,就在玩家头两次进行的选择中随机显示fuzhu1.jpg和fuzhu2.jpg,最后显示吉祥的鸡的图片。

二、编程要点

1.不规则窗体的制作

在大多数的Windows应用程序中,窗体都是使用的中规中矩的矩形窗体。矩形窗体具有编程实现简单、风格简洁的优点,在普通应用程序中广泛使用。但在娱乐游戏程序中使用就略显呆板了些,这时若用不规则窗体替代原先的矩形窗体,将会使这类程序更添情趣。不规则窗体界面比传统的矩形界面友好很多,改变Windows千篇一律的“标准”界面,一定会给你带来一种清新的感觉。现在就让我们先来了解一下它的工作原理。

不规则窗体的实现原理

所有的 Windows 窗体都位于一个 “region”中,窗体的大小如果超出“region”的范围,Windows 会自动裁剪超出“region”范围那部分的窗体,使其不可见。所以,要创建不规则窗体有两个步骤:第一步就是创建不规则“region”,第二步就是将窗体放到创建的“region”中。

首先用Photoshop准备一张含有目标窗体形状的图片,设置透明色。即将图片中不属于窗体形状的部分,标记成同一种颜色,例如绿色RGB(0,255,0),程序运行后先装入图片。然后逐个扫描图片的每个像素,如这个像素不属于透明色,则在相应位置创建一个只含一个像素的“region”,然后将这些小“region”合并起来就组成了我们需要的形状的“region”。不规则窗体具体实现代码请参考http://www.cpcw.com/05/game.rar。

2.程序界面设计

不规则窗体只是对游戏程序的修饰,下面来看看具体程序的制作。首先还是要先设计一个界面。我们在窗体上放置Image1~Image6,其中Image1~Image3静态显示三个碗(设置picture属性),Image4~Image6将在程序中动态加载jpg图片,完整界面如图1。

5-g15-1-2.jpg
图1

3.JPG的动态加载

Delphi中的TImage控件直接支持Bitmap格式(.bmp)、Icon格式(.ico)和Metafile格式(.emf or .wmf)的图像文件。TImage控件还能显示JPEG格式的图像,但不能直接把文件名赋值给Picture属性,而需要把图像对象赋值给属性Picture的Graphic属性。

动态调用jpg的示例方法为:

procedure TForm1.Image1Click(Sender:TObject);

var

JPEGImage1:TJPEGImage;

Begin

JPEGImage1:=TJPEGImage.Create;//cock

JPEGImage.LoadFromFile('F:\cock.jpg');

Image4.Picture.Graphic:=JPEGImage1;

End;

经过上述处理,就可以动态调用jpg图片了,但存在这样一个问题:如果要在别的计算机上运行此游戏,只有在别的计算机的F盘上也同样放置fuzhu1.jpg、fuzhu2.jpg和cock.jpg,否则程序在运行中将找不到图片。

4.在Delphi中获取文件的相对路径

Delphi提供了一个用于获取相对路径的函数:ExtractFilePath,使用此函数就可解决上述问题:

只需把JPEGImage.LoadFromFile('F:\cock.jpg');替换为:

JPEGImage.LoadFromFile(ExtractFilePath(Application.ExeName) + 'cock.jpg');

这个时候只要把fuzhu1.jpg、fuzhu2.jpg和cock.jpg都放到和主程序一起的同一目录下,程序在运行中就能找到这些图片了。

三、小结

此游戏编码虽然简单,但其中还是有些小知识点值得初学者注意。首先是不规则窗体的制作,然后是在Delphi中如何动态加载jpg文件及获取相对路径的函数的使用,程序最终运行画面见图2,相关源代码及程序的下载地址是http://www.cpcw.com/05/game.rar,通过这个小程序也祝广大读者新春快乐。

5-g15-1-3.jpg
图2