Invasion - 使用 DirectDraw 的电脑游戏






4.92/5 (27投票s)
2002年1月6日
2分钟阅读

395039

7618
这个类似“太空侵略者”的游戏最初是用DirectX 6编写的,但我修改了一些内容,以便你可以使用最新版本的DirecX SDK。它只使用了Windows API和DirectX库(这里没有MFC)。祝你玩得开心!
这是我第一次尝试使用DirectX库编写电脑游戏。它最初是为DirectX 6库编写的,但我做了一些修改,使其能够与最新的SDK一起工作。代码基于Windows API,没有任何对MFC库的引用。编译此代码所需的只是VC++和DirectX SDK,可以在http://www.microsoft.com/directx找到。
所有处理都在应用程序消息队列中没有消息时完成,通过调用UpdateFrame()
函数。如你所见,我在代码中没有使用很多类,几乎所有的代码都基于函数调用。可用的唯一类是
Alpha
:这个类用作将字符绘制到屏幕的引用。这允许我们使用位图将字母绘制到屏幕上(这样用户就不需要在系统中安装额外的字体)。
Extra
:定义屏幕上的一个“额外”元素,它可以是弹药箱、奖励箱、武器升级箱或护盾充电器。
Ovni
:这个类代表将被击落的UFO!只是为了解释类别的名称……Ovni在葡萄牙语中是UFO的意思。由于我是一个巴西人,并且会说葡萄牙语,因此代码中有些内容使用我的本地语言(不用担心,注释都是英文的:o))
Bullet
:这代表在银河战场上飞行的子弹。
每个类都有一个“内置”的链表,将在代码中大量使用。每个类都有一个通用的Draw
函数,用于以其当前状态将特定对象绘制到屏幕上。
代码中的几乎所有内容都已注释,但如果你遇到任何问题,请给我发邮件。
玩得开心!
更新
2002年6月4日:我已删除一个内存泄漏(directdraw接口未被释放),并改进了表面创建函数(winmain.cpp,第3190行)。现在我尝试在VIDEOMEMORY上创建每个表面。如果函数返回DDERR_OUTOFMEMORY,我尝试在SYSTEMMEMORY上重新创建它(winmain.cpp,第3242行)。