admin管理员组

文章数量:1530518

2024年5月3日发(作者:)

用Visual C++编写属于自己的游戏

我的地盘我做主,编写属于自己的游戏永远是玩家的最高境界。这期程序谷带给大家的是辽

宁肖占龙朋友编写的麻将对对碰小游戏,连小编我都爱不释手,欲罢不能。为了节约宝贵的

版面,杂志内的文章有部分删节,完整文章的电子版以及Visual C++项目文件可以在

/11program/200501/

找到,非常适合喜欢Visual C++朋友按

部就班,跟着文章一步步操作。如果你想一睹为快,可以直接下载编译完成的游戏,地址是

/11program/200501/

。游戏虽小但五脏俱全,游戏制作大师难

道不是从编写小游戏起步的吗? ——程序谷栏目编辑 东渐

在这篇文章中我将向大家介绍麻将对对碰游戏的完整制作过程。这个游戏有点类似于早期街

机上四川麻将的玩法,从四周找起,找到两个一样的就可以用鼠标左键确认消除。每人每次

有60秒的时间去完成。此外,按下F1键可以重新开始,ESC退出游戏。我把游戏做成可以

允许两个玩家轮流游戏的竞赛方式,这样你就可以和你的女朋友一起玩,省的她总是埋怨你

忙着玩游戏而忽略了她的存在(见图)。

本游戏是用Visual C++ 6.0、DirectX SDK 7.0编写的。

X SDK

首先介绍一下DirectX SDK。DirectX SDK是微软推出的一套在Windows中开发多媒体程序

的API函数集,可以在

/windows/directx/

上免费获得,目前最新

版本是9.0。

在DirectX SDK的帮助下,程序员可以专注开发游戏本身,涉及到2D、3D、声音以及网络

等的功能,只要直接调用相应组件即可。我们的麻将对对碰只用了其中的图像功能。

2.在VC中配置DirectX SDK

首先安装DirectX SDK。之后,需要在Visual C++中配置一下,指定它的路径:依次选择“工

具”、“选择”菜单,在“目录”页中的Include files中添加DirectX SDK的Include

目录,然后在Library files中添加DirectX SDK的Lib目录。

3.编写游戏

首先在Visual C++中建立一个空的Win32 Appllcation工程。接着,往工程中加入stdafx.h

文件,并且在stdafx.h文件中加入#include ,表示将要使用DirectDraw组件。

在向工程中加入资源文件后,使用Alt+F7调出设置对话框,在General下的Microsoft

Foundation Classes选择use MFC in a Static Libarary。然后加入和

之后为工程建立一个窗口类,在窗口类的头文件中把构造函数声明修改为public。接下来

我们还要定义一些函数和变量,其中DXInit()为DirectDraw的初始化函数,它是DirectX

编程的核心,所有的绘图初始化都在其中。当然,DXInit()只是建立了主绘图页、实现后缓

冲区和主绘图页的连接,并没有建立幕后内存区。函数loabmp()中实现了建立幕后内存区

和显示位图的功能。

如何使用这三个绘图页呢?为了避免闪烁现象,我们首先把位图贴到幕后内存区中,然后在

贴到后缓冲区,再利用翻页的方式绘出要显示的位图内容。以上操作分别由BitFast()贴图

函数和Filp()翻页函数完成。具体的使用方法,请参阅有关资料。

为了方便以后的游戏操作,我就麻将图像排成序号:1-9代表1-9万、10-18代表1-9

条、19-29代表1-9饼、28-34分别代表东、南、西、北、中、发、白。这样作的好处是

简化了判断条件成立的条件,因为麻将每张都有四个,所以在麻将信息中加入了n用来判断

该张发出的次数,h是用来存放麻将的类型。

接着使用“插入”、“新建类”建立应用程序类,在Class type对话框中选择Generic

Class,在Name中输入类名CMajiangApp,在Base class(es)中的Derived From中输入

CWinApp。

然后分别为工程添加WM_CREATE、WM_TIMER消息并填写相应代码,从而可以在屏幕上显示

LOGO和麻将图像了。

游戏的主要功能是在play()中完成的,代码非常简单,核心问题就是如果判断所选两个麻

将是否相同。这个过程请参见2004年18期程序谷刊登的《用VC作的一个扑克游戏》一文

中的方法。

为了响应快捷键,向工程加入WM_KEYDOWN消息;为了实现右键取消功能,为工程加入

WM_RBUTTONDOWN消息;为了实现左键选择功能,为工程加入WM_LBUTTONDOWN消息。最后加

入fp()发牌函数、Scoreshow()和timeshow()函数,这样就可以实现游戏的功能了。

4.小结

这个游戏主要应用了当前比较流行的DirectX技术。如果你有兴趣,可以把它改成网络版,

或者可以加上音效。欢迎到我的主页交流,网址是:

/

。 [YY19]

笔者第一次接触到多媒体,是上学时买的一套多媒体光盘,它集成了图像、动画、声音、文

字等多种元素,使得学习的过程有声有色,比如:在学语文时,有配乐朗诵;学化学时,只

要动动鼠标就可以做氧气燃烧等各种化学试验;做数学题时它能帮我判断对错并提示出错原

因等。当时就想,编制多媒体光盘的程序员们,真的是太神奇了。直到后来学会了

本文标签: 游戏麻将加入功能编写