使用DirectX开发经典俄罗斯方块游戏

俄罗斯方块是一款经典的电子游戏,其核心玩法是通过移动和旋转下落的方块,使其在底部连续排列并消除,从而获得分数。本文将介绍如何使用VisualC++DirectX开发一个简单的俄罗斯方块游戏。

游戏控制

游戏的控制非常简单。使用左箭头和右箭头键来移动方块向左或向右,上箭头或'R'键来旋转方块,下箭头键来加速方块下落,中心键(5)来直接下落方块。

游戏目标

游戏的目标是让方块连续排列成一行。当一行被填满时,该行会被消除,玩家会获得相应的分数。

开发所需软件

要构建该项目,需要以下软件:

  • VisualC++6.0
  • DirectX8.0 SDK(DirectX 7.0 SDK也应该可以使用,但作者未进行测试)

运行游戏所需软件

要运行游戏,需要:

  • DirectX7.0
  • Windows 2000或Win9x操作系统

代码概览

代码中包含了许多注释,这将有助于理解代码。

项目结构

该项目由以下类组成:

  • CBlockList
  • CDisplay
  • CFlooredBlocks
  • CShape
  • CSurface

类CDisplay和CSurface由Microsoft创建,并随DirectX SDK一起提供。作者使用DirectX 8 SDK开发了这款游戏,它应该可以在DirectX 7上正常工作,但作者未进行测试。要运行游戏,只需要DirectX 7。需要调整项目设置以反映DirectX SDK路径。

游戏逻辑

游戏开始时会创建两个形状。一个是当前下落的形状,另一个是下一个形状。当一个形状触底时,它会被添加到已放置的方块列表中,并创建一个新的下一个形状。

每消除一行方块,玩家将获得10 * NumberOfLinesRemoved * NumberOfLinesRemoved * GameSpeed的分数。当一个形状触底,并且一些方块在灰色线上方时,游戏结束。可以通过菜单开始新游戏。

游戏速度和模式

在级别菜单下,可以选择游戏速度。如果将游戏设置为疯狂模式,将获得奇怪的形状。在游戏中添加自己的形状也很容易。只需要将形状添加到数组并更新数组信息即可。

形状定义

m_pStockShapes数组保存了形状定义。

const short CShape::m_pStockShapes[] = { 11, // No Of shapes in the array 2, // No of orientation shapes 4, // No Of blocks for this shape 2, 1, 2, 2, 3, 2, 3, 3, // O1 1, 2, 2, 2, 2, 1, 3, 1, // O2 0, // Each shape ends with a 0 };

方块结构

SBlock结构保存了方块的坐标和颜色。

struct SBlock { short nX, nY, nColor; };

CBlockList类

CBlockList将是CShape类和CFlooredBlocks类的父类。它包含维护链表的方法。

class CBlockList { public: bool IsOccupied(short nX, short nY); bool Insert(SBlock Block); bool Add(const SBlock Block); void Display(short nX=0, short nY); bool Delete(SBlock Block); void Destroy(); };

CFlooredBlocks类

CFlooredBlocks维护已放置在地板上的方块列表。所有下落的形状都被添加到这个列表中。

class CFlooredBlocks : public CBlockList { RECT m_rcBoundary; // Holds the playing area public: void Display(); short CheckAndRemoveContinuousBlocks(); IncrementYabove(short nY); bool IsOccupied(short nX, short nY); bool Insert(SBlock Block); };

CShape类

CShape类从给定的数组中创建形状。它有助于移动形状并检查它是否超出边界或撞到其他方块。

class CShape : public CBlockList { CFlooredBlocks* m_pFlooredBlocks; public: bool CreateRandShape(); bool MoveTo(int x1, int y1); bool MoveRight(); bool MoveLeft(); bool MoveDown(); bool Rotate(); void Display(); void ConvertToSpaceCoord(); bool SetMaxNoOfShapesAllowed(short nMax); };
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485