C++语言课程设计一 拼图游戏
一、实验内容
玩家通过鼠标单击相邻位有空位的方块来移动方块,从而最终将一副散乱的图片拼成完整的图片。要求如下:
1. 游戏的初始界面如图一,单击空格键进入游戏,进入游戏之后系统将完成的图片分
成大小相同的15分并随机摆放成如图二。
图 一
图 二
2. 启动游戏,单击空格键进入游戏。通过鼠标单击周围有空格的方块来移动方块,直
到全图拼接成图二中右下角的图案样式,游戏结束,重新回到图一界面。
3. 游戏的原理是定义一个4 * 4的方块矩阵(二维数组),前15个的值按顺序从1-15依
次递增,第16个留空为0。按照这个顺序排列的矩阵值代表游戏胜利。初始化的时候,将该16个矩阵值随机排布即得到本局关卡。为0的空位代表附近上下左右的4个方块可以移动过来
4. 每次单击鼠标左键,方块移动一格。鼠标必须移动到方块范围内单击才能有效移动
方块。
二、实验指南
实验一 开始实验
【实验任务】
步骤一、打开FunCode,创建一个的C++语言项目; 步骤二、导入Puzzle模板。
【实验思路】 按实验指导完成。
【实验指导】
1、 打开FunCode,点击“项目”菜单,选择“创建C++工程”
注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。 2、 点击菜单“项目”中的“导入地图模块”,如图一。跳出一个对话框,选中“Puzzle”
模板,点击“导入到工程”按钮,如图二。
图 一 图 二 3、 导入成功后的,界面如下图所示:
实验二 单击空格键,开始游戏
【实验内容】
步骤、启动游戏显示“空格开始”,单击空格键进入游戏初始界面。
【实验思路】
系统会自动响应OnKeyDown函数来响应键盘按下消息,这部分代码实现在main.cpp里。我们要做的就是通过在main.cpp的OnKeyDown函数里实现我们的代码。当用户单击键盘上的空格键之后,设置GameBegin即“空格开始”精灵不可见。
【实验指导】
1、 进入LessonX.h文件中添加“空格开始”精灵变量的声明以及我们自定义处理系统
响应键盘按下消息的函数OnKeyDown的声明(如系统已给出,则省略定义OneKeyDown的步骤):
CSprite* iCtrlPress );
m_spGameBegin;
//\空格开始\精灵
void OnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int
2、 进入LessonX.cpp的构造函数里面初始化“空格开始”精灵成员变量:
m_spGameBegin
=
new CSprite(\
在文件的最后面添加OnKeyDown函数的定义代码:
void CGameMain::OnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress ) { }
3、 空格键的键值为KEY_SPACE,当系统判断玩家单击了空格键以及游戏的状态时未进行(即m_iGameState的值0)则游戏开始设置m_iGameState的值为1,同时隐藏掉“空格开始”精灵。在步骤2的函数里面添加下面的代码:
if( KEY_SPACE == iKey && 0 == m_iGameState ) {
}
m_iGameState =
1;
// 隐藏提示开始文字
m_spGameBegin->SetSpriteVisible(0);
4、 进入Main.cpp函数里面,将系统捕获到的键盘按下消息的参数传给我们自定义的函
数,需要在OnKeyDown函数里面添加下面一行代码:
g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);
至此,本实验结束。
实验三 初始化随机显示方块
【实验内容】
步骤一、添加一个4x4的二维数组,将图案分成15份,随机摆放,剩下一个位置留空,用于移动方块。
【实验思路】
游戏的原理是在一个4 * 4的方块矩阵(二维数组),前15个的值按顺序从1-15依次递增,第16个留空,我们设置为一个名称为“NULL”的精灵。按照这个顺序排列的矩阵值代表游戏胜利。
精灵名称依次是PictureBlock1,PictureBlock2…PictureBlock15。因此,初始化的时候,用一个数组iRandData顺序保存1到15,对应表示15个方块精灵。再用一个二维数组m_iBlockState[4][4]表示这16个位置。
每次随机从iRandData中取一个值,赋给m_iBlockState,表示某个位置放置哪张方块图
片。
为了保证同一张方块图片不会被重复使用,每次从iRandData随机取一个值以后,将该随机数后面的数组值往前移一位,并且数组大小减1。
【实验指导】
1、 进入LessonX.h里面,添加如下的变量声明:
1) 添加成员变量声明:
static const float 的起始坐标 static const float static const float int
m_fBlockStartY m_fBlockSize ;
;
// 屏幕高度75 / 4块 = 18.75每块的大小.
//
二维数组,存储N*N的
m_fBlockStartX;// 按方块大小,在编辑器里摆放的第一块方块
编辑器里预先摆放好的方块宽和高必须与此值一致
m_iBlockState[BLOCK_COUNT][BLOCK_COUNT]; 矩阵方块信息
CSprite* m_spBlock[BLOCK_COUNT*BLOCK_COUNT];//方块精灵
注意,m_fBlockStartX,m_fBlockStartY,m_fBlockSize三个变量是不能改变的,
因此我们需要将它们设置为const类型,const在c++里面表示只读,即后面程序只能读取使用它的值而不能对其进行赋值改变。C++类中的成员变量如果是const类型,则需要在其前面加上一个static的声明,即静态变量的声明,这样,我们才能在cpp文件里面使用这个变量。 2) 添加BLOCK_COUNT的#define声明:
在LessonX.h的#include后面添加下面一行:
#define BLOCK_COUNT
4
// N * N 的矩阵方块,一个N的大小
#define相当于告诉编译器,如果遇到BLOCK_COUNT则它相当与一个int类型的变量,且值为4。使用#define可以方便改变我们需要的值。
2、 进入LessonX.cpp中在最后面添加下面的成员变量的声明:
const float CGameMain::m_fBlockSize=18.75f; const float CGameMain::m_fBlockStartX=-40.625f; const float CGameMain::m_fBlockStartY=-28.125f;
因为这三个变量的类型是const类型,因此我们不能在构造函数里面定义它,需要单独拿出来进行定义。相当于c里面的全局变量的定义。
3、 进入LessonX.cpp中的GameInit函数里面填写初始化代码。
1) 填写下面几行变量的定义:
int int
iLoopX
= 0, iLoopY
= 0, iLoop = 0;
iOneIndex = 0, iRandIndex = 0;
// 用做随机的数组,当随机抽取到此数组中的一个时,比如随机到第五个,则将第五个取出来用
// 第五个后面的数组都往前移动一位,将第五个覆盖掉,数组总数减一,下次再在这剩余的14个数值里随机抽取
int iDataCount 12, 13, 14, 15};
=
BLOCK_COUNT * BLOCK_COUNT - 1;
int iRandData[BLOCK_COUNT * BLOCK_COUNT - 1] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
iDataCount用于记录方块的数目,iRandData是一个二维数组,里面存放了1至15的int值,对应表示1-15个方块精灵,用于后面对方块进行随机生成。每次
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新初中教育03 C++课程设计 - 拼图游戏 全文阅读和word下载服务。
相关推荐: