1、如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断1.1.4、 需求分析 整个游戏程序通过在处理鼠标响应事件中伴随着绘图。程序通过调试运行,实现了设计目标,能够满足连连看游戏玩家的需要,关于连连看的功能描述如下:运行游戏并进行初始化工作,将整个游戏区域分成纵向和横向扩展的若干个小方块,并且这些小方块是由多种动物图案成对地分布于游戏区域的不同位置。玩家可以通过选取相同的两个物件来对它们进行消除的操作,直到将游戏区域中的所有方块对都被消除后为胜利1.2、 总体设计1.2.1、 系统的开发环
2、境 Intel(R) Core(TM) i5-2430M 4G内存 500G硬盘 Microsoft Windows 7 Microsoft eMbedded visual C+ 4.0 New Emulator_SDK1.2.2、 系统的总体功能1.2.3、 系统的结构及模块1.2.4、 功能说明1)游戏地图设计对于整个游戏区域,可以把它看作一个是由若干个小方块构成的地图,而且每一个小方块放置着不同的动物图案,可将其称之为图案小方块。这些图案小方块零散地分布在地图的不同位置区域,并且每一个图案小方块都有与其对应的完全一样的另外一个小方块,整个游戏游戏区域被抽象成一个有坐标位置属性的平面,平面
3、上零散地分布着若干个小方块,并且这些小方块的物种起码是成对出现的。经过前面的描述和分析后,可以把游戏区域地图用一个数组m_Player;来表示。m_Player;是把地图设计成一个动态分配的int整形一维数组,对地图中的行列数的表达,用一个转换法则即可。可以在PocketLianDlg类对象定义中添加地图核心数据的成员变量,具体如下: /地图位置相关属性组 int* m_Player; /动态地图数据头指针(一维数组) int m_nRow; /地图的行数(虚拟) int m_nCol; /地图的列数(虚拟) 2) 初始化游戏界面 该部分主要由执行窗口创建函数及位图加载函数来实现。通过数据的初
4、始化及位图资源的加载为用户呈现一个游戏初始的界面。 3) 图片的选择该功能主要由鼠标来完成。在OnLButtonDown()事件函数中通过鼠标的点击事件选取所要消除的两个相同图片。4) 图形的判断与消除对于第(2)步所选的两个图片,对其连通性进行判断:如果两图片直线连通,则相互消去;如果两图片连接为一个拐点且相通,则相互消去;如果两图片连接为两个拐点且相通,则相互消去;否则,不能消去。 5) 判断游戏是否死锁或结束如果所有的图片全部消去,则提示“游戏结束!”的信息。当游戏玩家不可能在消去任意两个图片时,游戏进入死锁状态。此时提示相关信息二、 系统的详细设计2.1、 游戏地图设计经过前面的描述和
5、分析后,可以把游戏区域地图用一个数组m_Player来表示。m_Player是把地图设计成一个动态分配的int整形一维数组,对地图中的行列数的表达,用一个转换法则即可。上面的成员变量中定义了一个整形指针标量m_Player,用于记录动态分配出来的一维数组地图空间的首地址。对于地图区域中的某个小方块的类型,可以用一个整形的ID来进行识别。这里为标识地图的行列位置分别添加m_nRow和m_nCol变量,到此,地图的数据结构已经设计好。 在PocketLianDlg类的构造函数对地图数据进行相关的初始化:#define ROWCOUNT 7 /7 /8 /9 #define COLCOUNT 12
6、/12 /14 /16CPocketLianDlg:CPocketLianDlg(CWnd* pParent /*=NULL*/) : CDialog(CPocketLianDlg:IDD, pParent) m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); m_nY1=-1; m_nX1=-1; m_nRow=ROWCOUNT; m_nCol=COLCOUNT; m_Player=new intm_nRow*m_nCol;CPocketLianDlg() delete m_Player;PocketLianDlg类对象的实现中,定义了一些关于地图行
7、列数的宏,如ROWCOUNT和COLCOUNT,并且在PocketLianDlg类对象的构造函数中,进行了行列的真实确认赋值,并根据当前行列数的大小对地图数据空间进行动态创建。因为地图数据是用new在堆栈动态创建的,所以在销毁该对象时要将这些内存空间释放,见代码所示在PocketLianDlg类对象的析构函数中调用delete将m_Player指向的所有空间都释放掉。2.2、 初始化界面首先调用CenterWindow()函数创建一个居中的窗口,再执行m_bitmap.LoadBitmap()函数来加载指定的位图资源,然后通过调用m_MemDC.CreateCompatibleDC() 创建一
8、个与指定设备兼容的内存设备上下文环境(DC),再调用CreateCompatibleBitmap()函数创建与指定的设备环境相关的设备兼容的位图;最后调用FillMemDC()函数填充所创建的窗口。该部分的实现代码下:BOOL CPocketLianDlg:OnInitDialog() CDialog:OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); CenterWindow(GetDesktopWindow(); /创建一个居中的窗口 m_bitmap.LoadBitmap(IDB_BITMAP_129); /加
9、载指定的位图资源 CClientDC dc(this);/创建一个与指定设备兼容的内存设备上下文环境 m_MemDC.CreateCompatibleDC(&dc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&dc,m_nCol*FRONTWIDTH+5,m_nRow*FRONTHEIGHT+5); /创建与指定的设备环境相关的设备兼容的位图 m_MemDC.SelectObject(&bitmap); int n=GetTickCount(); srand(n);/time(NULL); CDWordArray arPlayer; for(
10、int i=0;i(m_nCol*m_nRow)/4;i+) for(int j=0;j=0) return false; return true;三、 系统实现与调试3.1、 调试过程刚开始调试程序时出现错误如图:解决方法:当安装的文件目录查找文件,然后拷贝文件地址Microsoft eMbedded visual C+ 4.0 下的菜单栏 toolOptionsDirectories如图调试程序时再次出现错误如图:当安装的文件目录查找文件,找到文件然后把查找的文件名分别修改为mfcee400d.libmfcce500d.lib olecc500d.lib olecc500d.lib3.2、
11、 系统运行的结果1)、初始界面截图2)、相邻图像的消除和边界双折线图像的消除3)、图像选定的标志4)、单折线图像的消除5)、游戏结束四、 附有程序代码打印 PocketLianDlg.cpp程序代码: / PocketLianDlg.cpp : implementation file#include stdafx.hPocketLian.hPocketLianDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#define BKCOLOR RGB(128,128
12、,128)#define FRONTWIDTH (39+2)#define FRONTHEIGHT (39+12)#define BKWIDTH 46#define BKHEIGHT 56#define ROWCOUNT 7 /7 /8 /9/ CPocketLianDlg dialog /AFX_DATA_INIT(CPocketLianDlg) / NOTE: the ClassWizard will add member initialization here /AFX_DATA_INIT / Note that LoadIcon does not require a subsequen
13、t DestroyIcon in Win32void CPocketLianDlg:DoDataExchange(CDataExchange* pDX)DoDataExchange(pDX); /AFX_DATA_MAP(CPocketLianDlg) the ClassWizard will add DDX and DDV calls here /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CPocketLianDlg, CDialog) /AFX_MSG_MAP(CPocketLianDlg) ON_WM_LBUTTONDOWN() ON_WM_PAINT() /AFX_M
14、SG_MAPEND_MESSAGE_MAP()/ CPocketLianDlg message handlers / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog / Set big icon / Set small icon / center to the hpc screen / TODO: Add extra initialization here /ZeroMemory(m_Player,sizeof(m_Player);FillMemDC() CDC MemDC; MemDC.CreateCompatibleDC(& CBitmap bitmap1; bitmap1.LoadBitmap(IDB_BITMAP_129); MemDC.SelectObject(&bitmap1); m_MemDC.Fill
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1