云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 05+C++课程设计 - 迷你高尔夫 - 图文

05+C++课程设计 - 迷你高尔夫 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/6/2 10:16:50

#define #define #define

RIGID_BLOCK BLACK_HOLE GOLF_EXIT

1 2 3

// 以下3个分别为方块阻挡物、黑洞、出口的值

3、 进入LessonX.cpp中添加上面的成员变量的初始化:

1) 在构造函数中把m_iGameState的值由0改为1:

m_iGameState = 1; 2) 在构造函数中添加下面代码:

m_iRigidBlockCount m_iBlackHoleCount m_iGolfExitCount m_iCurLevel

= = = =

0; 0; 0; 1;

//球的初始X坐标 //球的初始Y坐标

// 本关卡创建的阻挡物方块数量 // 本关卡创建的黑洞数量

m_iControlStartX = 0; m_iControlStartY = 0;

3) 对于const类型的成员变量,我们需要在函数外面单独进行初始化,在文件最后面添加如下代码:

const float CGameMain::m_fGridStartX const float CGameMain::m_fGridStartY

=-27.5f; =-27.5f;

const float CGameMain::m_fGridSize =5.f;

const int CGameMain::m_iLevelData1[GRID_COUNT][GRID_COUNT] = { {0, 0, 0, 0,

0, 0, 0,

{0, 0, 0, 0, {0, 0, 0, 0,

0, 0, 0,

0, 0, 0,

0, 0, 0,

0, 0, 0, 0}, 0, 0, 0, 0}, 0, 0, 0, 0},

RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK,0, 0, 0,

0, 0, 0,

0, 0, 0,

{0, 0, 0, RIGID_BLOCK, {0, 0, 0, RIGID_BLOCK,

0, 0, 0,

{0, 0, 0, RIGID_BLOCK, {0, 0, 0, RIGID_BLOCK, {0, 0, 0, 0, GOLF_EXIT, {0, 0, 0, 0, 0, 0, 0, 0, };

{0, 0, 0, 0, {0, 0, 0, 0, {0, 0, 0, 0,

RIGID_BLOCK, RIGID_BLOCK, 0, 0, 0},

RIGID_BLOCK, 0, 0, 0}, RIGID_BLOCK, 0, 0, 0}, BLACK_HOLE, 0, 0, 0}, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0,

0, 0, 0, 0, 0,

RIGID_BLOCK, 0, 0, 0}, 0, 0, 0, 0}, 0, 0, 0, 0}, 0, 0, 0, 0}, 0, 0, 0, 0}

const int CGameMain::m_iLevelData2[GRID_COUNT][GRID_COUNT]={ {0, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, 0, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, 0},

{0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0}, {0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0}, {0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0}, {0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0}, {0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0},

{0, RIGID_BLOCK, 0, 0, 0, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, 0, 0, RIGID_BLOCK, 0},

{0, RIGID_BLOCK, 0, 0, 0, 0, 0, RIGID_BLOCK, 0, 0, RIGID_BLOCK, 0}, {0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, GOLF_EXIT, RIGID_BLOCK, RIGID_BLOCK, 0},

{0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0},

{0, RIGID_BLOCK, 0, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, 0, RIGID_BLOCK, 0}

};

const int CGameMain::m_iLevelData3[GRID_COUNT][GRID_COUNT]={ {0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, RIGID_BLOCK, 0, 0},

{0, 0, RIGID_BLOCK, RIGID_BLOCK, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, RIGID_BLOCK},

{RIGID_BLOCK, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, GOLF_EXIT, 0, 0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, RIGID_BLOCK, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0},

{0, 0, 0, RIGID_BLOCK, 0, 0, 0, 0, 0, 0, RIGID_BLOCK, 0}, {0, 0, 0, 0, BLACK_HOLE, RIGID_BLOCK, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} };

二维数组中0表示该位置不创建精灵,否则根据不同的值创建不同精灵,RIGID_BLOCK(值为1)表示创建一个方块精灵,BLACK_HOLE(值为2)表示创建一个黑洞精灵,GOLF_EXIT(值为3)表示创建一个出口精灵。

4) 进入GameInit函数里面,将球的运动状态初始化为静止,添加下面代码:

m_iMoveState=0;

4、 游戏初始化的时候,首先我们需要将前边添加的精灵全部删除掉,因此需要自定义

的创建清除所有精灵函数ClearAllSprite()来实现这个功能。 1) 进入LessonX.h文件的CGameMain类中添加该函数的声明:

void ClearAllSprite();

2) 在LessonX.cpp最后面添加该函数的定义:

void CGameMain:: ClearAllSprite()

{ }

3) 再使用3个循环,分别将上一关卡创建的3种精灵删除掉。在上边定义的函数

中添加如下代码:

int { }

for( iLoop = 0; iLoop < m_vBlackHole.size(); iLoop++ ) { }

for( iLoop = 0; iLoop < m_vGolfExit.size(); iLoop++ ) {

}

m_vGolfExit[iLoop]->DeleteSprite(); m_vBlackHole[iLoop]->DeleteSprite(); m_vRigidBlock[iLoop]->DeleteSprite();

iLoop

= 0;

for( iLoop = 0; iLoop < m_vRigidBlock.size(); iLoop++ )

其中m_vRigidBlock、m_vBlackHole、m_vGolfExit是存储三种精灵的向量数组,每一个循环都遍历一遍向量数组并调用数组中每个精灵的DeleteSprite函数即可。 m_vRigidBlock.size()、m_vBlackHole.size()、m_vGolfExit.size()表示每种精灵的总数。

4) 最后在GameInit()中添加调用此函数的代码:

ClearAllSprite(); 5、 在GameInit()中,我们也需要对关卡进行选择初始化。因此我们需要自定义一个初

始化关卡函数InitLevel ()来实现这个功能。

1) 进入LessonX.h文件的CGameMain类中添加该函数的声明:

void InitLevel();

2) 在LessonX.cpp最后面添加该函数的定义:

void CGameMain:: InitLevel() { }

3) 初始化关卡,要根据当前关卡,选择关卡的数据,即将代表关卡的二维数组中

的数据拷贝到m_iGridData中,同时设置控制球在每个数组中的起始位置。首先把需要的数据初始化为0,代码如下:

// 总数置0,重新创建 m_iRigidBlockCount m_iBlackHoleCount m_iGolfExitCount =

= = 0;

0; 0;

4) 选择关卡我们使用了switch-case结构,程序通过判断switch中的参数进入到

不同的case中去,每个case就是一种情况的实现。代码如下:

// 根据当前关卡,选择关卡数据 switch( m_iCurLevel ) { case 2:

{

} break; { } break;

// Level1 或者g_iCurLevel错误

m_iControlStartX m_iControlStartY =

= 6;

3;

m_iControlStartX m_iControlStartY =

= 9;

5;

memcpy( m_iGridData, m_iLevelData2, sizeof(int) * GRID_COUNT * GRID_COUNT );

case 3:

memcpy( m_iGridData, m_iLevelData3, sizeof(int) * GRID_COUNT * GRID_COUNT );

case 1: default: };

{ } break;

m_iControlStartX m_iControlStartY =

= 6;

5;

memcpy( m_iGridData, m_iLevelData1, sizeof(int) * GRID_COUNT * GRID_COUNT );

memcpy函数作用是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。因为二维数组在内存中的存放方式是连续的,因此我们将源地址拷贝给m_iGridData的起始地址之后,系统后自动根据m_iGridData的下标来找到正确的值。

5) 最后在GameInit()中添加调用此函数的代码:

InitLevel();

至此,本实验结束。

实验三 初始化游戏精灵

【实验内容】 步骤一、创建精灵

步骤二、初始化精灵位置 【实验思路】

遍历二维数组m_iGridData,根据数组值生成对应的精灵实例:值为0的时候不用创建,需要创建的精灵名字前缀为(按照宏定义的1,2,3顺序):RigidBlock, BlackHole, GolfExit。每创建一种精灵,将其总数加1 :m_iRigidBlockCount, m_iBlackHoleCount,m_iGolfExitCount。 【实验指导】

1、 进入LessonX.h,CGameMain类中添加下面成员变量的声明:

CSprite* m_pControlBall;

CSprite* m_pGolfArrow;

//控制球精灵 //指示箭头精灵

搜索更多关于: 05+C++课程设计 - 迷你高尔夫 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

#define #define #define RIGID_BLOCK BLACK_HOLE GOLF_EXIT 1 2 3 // 以下3个分别为方块阻挡物、黑洞、出口的值 3、 进入LessonX.cpp中添加上面的成员变量的初始化: 1) 在构造函数中把m_iGameState的值由0改为1: m_iGameState = 1; 2) 在构造函数中添加下面代码: m_iRigidBlockCount m_iBlackHoleCount m_iGolfExitCount m_iCurLevel = = = = 0; 0; 0; 1; //球的初始X坐标 /

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com