文档库

最新最全的文档下载
当前位置:文档库 > C语言课程设计报告

C语言课程设计报告

C语言课程设计报告

C语言课程设计报告

机房名称

时间

学院

专业班级

姓名

学号

指导教师

小游戏“黄金矿工”设计报告

目录

C语言课程设计报告 (1)

一、课题简述 (3)

二、功能需求 (4)

Ⅰ.程序大体流程图: (4)

Ⅱ.部分函数介绍 (5)

Funcode接口介绍 (5)

三、总体设计 (8)

1.下图为主函数及各级嵌套函数的流程图,部分省略。 (8)

2、操作使用说明 (9)

四、详细设计 (10)

1.主函数模块WinMain()函数模块 (10)

2.部分自己设置定义的函数 (14)

五、运行相关界面及简介 (25)

六、程序运行测试及遇到问题的解决方案 (31)

七、成员分工表 (33)

八、总结与体会 (34)

九、教师评语 (36)

一、课题简述

通过一年的c语言程序设计的学习,我们仅仅掌握了c语言最基本的知识,还有很多内容是我们没有涉及的。所以通过c语言课程设计的学习实践活动和实际演练,使我们能够在实际操作中提高运用c语言解决问题的能力和程序设计的能力。

得知本次课程设计任务是小游戏的设计,我们既兴奋又不安,兴奋是十分期待自己亲手做出的游戏,不安的是我们对funcode这个软件很不了解。幸好这次实践的过程,让我们从做平时简单的小程序过渡到现在的综合应用程序,将学过的c语言知识融入新接触到的funcode操作中,不仅能巩固所学的知识,还能加强对新事物的接受及应用的本领,在不断的挑战问题中大大的提升自己,同时也是对c语言程序设计这门课的深入理解的过程。

而什么样的小游戏是我们能实现而又不乏趣味呢?经过反复思考、讨论,我们小组设计了“黄金矿工”这样一个小游戏:

玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。

1.单机键盘上的空格键进入游戏,金块的总数是20,钻石的总数是2,炸弹的总数是3,石头的总数是4,大小位置是随机的。

2.在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等——抓到一个金子金子加20分,钻石加50分且拉回速度变快,石头加5分且拉回速度变慢,抓到炸弹不加分且炸弹会爆炸。此时矿工是向下摇动转轴。获取到金子等往回拉后,矿工是不断转动转轴,直到金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。

3.加入计分和计时系统。60秒倒计时时间内抓取的金子越多得分越高。

接下来,我们开始思索,要如何实现这些功能,如何将所有功能连接在一起。于是我们先用funcode 熟悉小游戏制作的操作,认真按照老师给我们的实验指南进行练习,反复阅读其内容,并用vc6.0进行对各种小游戏源代码的简单探索。当然,由于技术原因,我们想要设计的软件只是局限于对游戏功能的实现,而实际中正式的欢迎界面,游戏说明等优美的图片,我们并没有进行设计,包括刚开始拟定的金子运动、玩家升级等也取消了。然而,这并不影响我们制作小游戏的热情,而且我们根据其具体的功能进行了组员之间的分工合作。

二、功能需求

Ⅰ.程序大体流程图:

图1. 游戏模块图

空格键 开始游戏

金子、钻石、石头、炸弹随机分布; 钩子摇摆;

计时器倒计时60秒 计分器显示为0分

下键抓取

金子 钻石 石头 炸弹

计分器加20分 计分器加50分

计分器加5分; 拉升速度减缓 计分器加0分 炸弹爆炸

计时器减为0

钩子停止抓取; 游戏结束

按回车键,所有数据清零,回到初始状态

Ⅱ.部分函数介绍

本实验用到的API

extern float dGetScreenLeft(); /*获取世界边界之左边X坐标*/

extern float dGetScreenTop(); /*获取世界边界之上边Y坐标*/

extern float dGetScreenRight(); /*获取世界边界之右边X坐标*/

extern float dGetScreenBottom(); /*获取世界边界之下边Y坐标*/

extern void dSetSpriteWidth( const char *szName, const float fWidth );/*设置精灵外形宽度*/

extern float dGetSpriteWidth( const char *szName );/*dGetSpriteWidth:获取精灵外形宽度*/

extern int dRandomRange( const int iMin, const int iMax ); /*获取一个位于参数1到参数2之间的随机数*/ extern void dSetSpriteRotation( const char *szName, const float fRot ); /*设置精灵的旋转角度*/

extern void dSetSpriteLinearVelocityPolar( const char *szName, const float fSpeed, const float fPolar );

/*设置精灵移动速度*/

extern int dAnimateSpritePlayAnimation( const char *szName, const char *szAnim, const int iRestore );

/*精灵播放动画*/

extern float dGetSpriteLinkPointPosX( const char *szName, const int iId );

/*获取精灵链接点X坐标。链接点是依附于精灵的一个坐标点*/

extern float dGetSpriteLinkPointPosY( const char *szName, const int iId );

/ *获取精灵链接点Y坐标。链接点是依附于精灵的一个坐标点*/

extern void dDrawLine( const float fStartX, const float fStartY, const float fEndX, const float fEndY, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );

/* dDrawLine:两点之间画线*/

Funcode接口介绍

extern void dOnSpriteColSprite( const char *szSrcName, const char *szTarName );

/*精灵与精灵碰撞后将被调用的函数*/

extern int dSpriteMountToSpriteLinkPoint( const char *szSrcName, const char *szDstName, const int iPointId ); /*将一个精灵绑定到另一个精灵上,绑定位置为指定* 的链接点,暂时的成为另一个精灵的一部分,跟随其运动等*/

extern float dGetSpritePositionX( const char *szName ); /*获取精灵X坐标*/

extern float dGetSpritePositionY( const char *szName ); /*获取精灵Y坐标*/

funcode函数

(1)/*主函数入口*/

int PASCAL WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

/*初始化游戏引擎*/

if( !dInitGameEngine( hInstance, lpCmdLine ) )

return 0;

/*在此使用API更改窗口标题*/

dSetWindowTitle("Lesson");

/*引擎主循环,处理屏幕图像刷新等工作*/

while( dEngineMainLoop() )

{

/*获取两次调用之间的时间差,传递给游戏逻辑处理*/

float fTimeDelta = dGetTimeDelta();

/*执行游戏主循环*/

GameMainLoop( fTimeDelta );

};

/*关闭游戏引擎*/

dShutdownGameEngine();

return 0;

}

(2)/*引擎捕捉键盘按下消息后,将调用到本函数*/

void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress ) (3)/*引擎捕捉键盘弹起消息后,将调用到本函数*/

void dOnKeyUp( const int iKey )

(4)/*引擎捕捉到精灵与精灵碰撞之后,调用此函数*/

void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )

(5)/* 引擎捕捉到精灵与世界边界碰撞之后,调用此函数. */

void dOnSpriteColWorldLimit( const char *szName, const int iColSide )

其它函数

(1)出现金块、钻石、炸弹、石头,并增加其碰撞属性void Appear();

(2) 画出链接钩子的线

void line();

(3) 重置游戏初始状态

void begin();

(4) 游戏结束后,清楚剩余金块、钻石、炸弹、石头void Disappear();

三、总体设计

I.下图为主函数及各级嵌套函数的流程图,部分省略。

主函数入口

IntPASCAL WinMain()

设置游戏窗口名字

dSetWindowTitle("Lesson")

引擎主循环

dEngineMainLoop()

执行游戏主循环

GameMainLoop()

g_iGameState=0 g_iGameState=1 g_iGameState=2 g_iGameState=3

游戏初始界面;

初始化游戏

执行

dOnKeyDown

函数

调用Appear()

生成金子等;

钩子自由摆

动;

调用

dOnKeyDown,

钩子运动;

调用

dOnSprite

-ColSprite、

dOnSprite-

ColWorldLimit

实现抓取

键时间到

游戏结束

时间减为0

g_iGameState=4

精灵消失

所有数据重

回到初始状

自动跳转

图 2.主函数流程图

II 、操作使用说明

玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。

1.单机键盘上的空格键进入游戏,金块的总数是20,钻石的总数是2,炸弹的总数是3,石头的总数是4,大小位置是随机的。

2.在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等——抓到一个金子金子加20分,钻石加50分且拉回速度变慢,石头加5分且拉回速度变慢,抓到炸弹不加分且炸弹会爆炸。此时矿工是向下摇动转轴。获取到金子等往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。

3.存在计分和计时系统。60秒倒计时时间内抓取的金子越多得分越高。

精灵与精灵碰撞 void

dOnSpriteColSpr ite()

显示消失及爆炸动画 加分

键盘按下

V oid dOnKeyDown()

开始游戏 case

KEY_SPACE 钩子下降 Case

KEY_DOWNN 状态转换 Case

KEY_ENTER

四、详细设计

1.变量定义部分

变量定义是一个完整的程序中不可或缺的内容。在本次游戏编写中,我们根据程序需要,也不可缺少的设置了许多变量,下面我们简单介绍一下全局变量和主函数之中的部分变量:

(1)定义全局变量

///////////////////初始化物品数量////////////////////////////////////////

int g_iGoldCount=20; //金子数量

int g_iBombCount=3; //炸弹数量

int g_iDiaCount =2; //钻石数量

int g_iStoneCount=4; //石头数量

////////////////////////////初始化计时计分///////////////////////////////

float g_iGameScore = 0; //初始化得分

float g_fGameTime = 60.f; //计时,设定初始计时

bool g_bStart = 0; //计时,定义开始计时的状态

////////////////////////////设置钩子自由旋转的定义///////////////////////////////

float g_fHookRotation = 0.f;

int g_iGameState = 0; //定义游戏初始状态

float g_fEmptyHookSpeed = 15.f;//定义钩子的速度

///////////////////////////设置钩子抓精灵的定义////////////////////////////////

float g_fHookStartPosX; //存储钩子的初始X位置

float g_fHookStartPosY; //存储钩子的初始Y位置

char szGotGoldName[20] ; //当前抓到金子的名称

char szGotBombName[3] ; //当前抓到炸弹的名称

char szGotDiaName[2] ; //当前抓钻石的名称

char szGotStoneName[2] ; //当前抓石头的名称

(2)主函数之中的局部变量

//////////////////////////设置钩子摇摆///////////////////////////////////

const float fRotateSpeed = 45.f; // 摇摆速度,单位度/秒

int iHookRotToLeft = 1; //钩子摆动的方向:1 ←;0 →

/////////////////////////设置钩子抓金子///////////////////////////////////

g_fHookStartPosX = dGetSpritePositionX("goldhook"); //获取钩子的初始X坐标

g_fHookStartPosY = dGetSpritePositionY("goldhook"); //获取钩子的初始Y坐标dSetSpriteWorldLimitMode("goldhook", WORLD_LIMIT_NULL); //初始化钩子与世界边界碰撞的模式为NULL

2.主函数模块WinMain()函数模块

实现初始化游戏引擎,执行引擎主循环,处理屏幕图像刷新等工作,包括获取两次调用之间的时间差,传递给游戏逻辑处理等。我们通过主函数实现设置初始化游戏状态、钩子摇摆、钩子抓金子、炸弹、石头、钻石等内容。在本游戏中我们设计了5种游戏状态,分别为g_iGameState等于0、1、2、3、4。其中,状态0为游戏初始状态,状态1和2为游戏运行状态,状态3为游戏结束状态,状态4为过渡到初始状态时运用的一个调整状态。

步骤详细介绍:

第一步,游戏初始化,显示初始界面需要的精灵

if( !dInitGameEngine( hInstance, lpCmdLine ) ) // 初始化游戏引擎return 0;

dSetWindowTitle("黄金矿工"); //设置窗口名字dSetWindowTitle("Lesson");

begin(); //调用函数,初始游戏,显示初始精灵第二步,游戏是一直进行的,因此游戏的重点是在while循环中。While循环中使用“float fTimeDelta = dGetTimeDelta(); ”获取两次调用之间的时间差,传递给游戏逻辑处理,达到不断循环。下面介绍一下此循环中使用的语句。

①游戏倒计时,倒计时结束后实现状态跳转到结束状态

/////////////////////////////////////////////////////////////////倒计时///////////////////////////////////////////////////////////////// if(g_bStart) //判断游戏是否开始

{

g_fGameTime -= fTimeDelta; //设置游戏时间

if(g_fGameTime > 0) //判断游戏是否结束{

dSetTextValue("Time", (int)(g_fGameTime)); //设置精灵"时间"显示数值}

if(g_fGameTime<=0 && (g_iGameState==2 || g_iGameState==1))

//判断游戏是否结束,且在运行状态1或2时,其他状态不执行

{

g_iGameState=3; //变成状态3,实现游戏结束}

}

②钩子的自由摆动,此过程是在状态0和1时准备抓金子时出现的

////////////////////////////////////////////////////////////////////钩子自由摆动//////////////////////////////////////////////////// float fThisRotate = fRotateSpeed * fTimeDelta; // 本次旋转的角度

if(g_iGameState == 0 || g_iGameState == 1)

{

float fThisRotate = fRotateSpeed * fTimeDelta;

if( iHookRotToLeft )

{

g_fHookRotation += fThisRotate;

if( g_fHookRotation >= 180.f )

{

g_fHookRotation = 180.f;

iHookRotToLeft = 0;

}

}

else

{

g_fHookRotation -= fThisRotate;

if( g_fHookRotation <= 0.f )

{

g_fHookRotation = 0.f;

iHookRotToLeft = 1;

}

}

dSetSpriteRotation("goldhook",g_fHookRotation); //设置钩子的旋转角度}

③钩子抓金子,钩子抓金子为状态2,不需要钩子自由摆动

/////////////////////////////////////////////////////////////////钩子抓金子/////////////////////////////////////////////////////////// if(g_iGameState == 2)

{

float fSpeedX = dGetSpriteLinearVelocityX("goldhook"); //获取钩子X方向的速度float fSpeedY = dGetSpriteLinearVelocityY("goldhook"); //获取钩子Y方向的速度if( fSpeedX < 0.00001f && fSpeedX > -0.00001f && fSpeedY < 0.00001f && fSpeedY > -0.00001f ) //当速度接近为0时,即可判定其已到达初始点{

dSpriteDismount(szGotGoldName); //解除金块与钩子的锚定dDeleteSprite(szGotGoldName); //删除获取的金块g_iGameState = 1; //回拉结束,设定状态为1,钩子摆动dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation2", 0 );

//播放矿工的动画,即准备拉金子的动画

}

}

④游戏状态3,显示游戏时间停止

if(g_iGameState==3)

{

dSetSpriteVisible( "over",1); //若结束显示Time over }

⑤游戏状态为4时,实现过渡到游戏状态为1

if(g_iGameState == 4)

{

begin(); //调用重置游戏初始化所需精灵g_iGameState = 0 ; //实现游戏状态跳转到初始状态0 g_iGameScore = 0; // 重置游戏分数为0 g_fGameTime = 60.f; // 重置倒计时时间为60 g_bStart=0; // 停止先前状态中的倒计时dSetTextValue("score",(int)0); // 重置游戏分数为0 dSetTextValue("time",(int)60); // 重置倒计时时间为60 dSetSpriteVisible("over",0); //隐藏Timeover dSetSpriteVisible("score",1); //出现计分装置dSetSpriteVisible("time",1); //出现计时装置}

⑥由于钩子的连线也是一直在游戏运行时存在的,故也应放入此循环中

////////////////////////////////////////////////////////设置与钩子链接的线////////////////////////////////////////////////////// line(); //调用画线的函数第四步,游戏结束,关闭游戏引擎,主函数完成

dShutdownGameEngine(); // 关闭游戏引擎return 0;

3.有关系统给定的函数的设置

(1)dOnKeyDown()函数的详述,对于系统内我们主要使用此函数。我们使用空格键控制游戏开始,方向下键控制钩子下落,回车键实现从结束状态到开始状态的过渡。

///////////////////////////////////////按下空格游戏开始///////////////////////////////////////////////

g_fEmptyHookSpeed=15.f; //为之后调整绳子速度做准备if(iKey==KEY_SPACE && g_iGameState == 0) //按下空格键且游戏状态为0时{

g_iGameState = 1; //游戏状态变为1

dSetSpriteVisible( "GameBegin",0); //消失游戏开始

dSetSpriteVisible( "HJKG",0); //消失“黄金矿工”

Appear(); //调用函数出现金子等东西

g_bStart=1; //计时开始的条件}

////////////////////////////////////////////按下下键钩子下降///////////////////////////////////////////

if( iKey==KEY_DOWN && g_iGameState == 1) //按下下键且游戏状态为1时{

g_iGameState = 2; //置游戏状态为2,可用于控制钩子是否摆动

dSetSpriteLinearVelocityPolar("goldhook",g_fEmptyHookSpeed, g_fHookRotation);

//以当前朝向给钩子一个向前的速度

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation1", 0);

//播放挖金者的动作(一个胳膊往下压的动作) ,0 表示播放一次,这里胳膊下压

就是一次

}

////////////////////////////////按下回车键跳转到初始状态///////////////////////////////////////////

if( iKey==KEY_ENTER && g_iGameState == 3 ) //按下回车键且游戏状态为3 {

DisAppear(); //调用函数消除金子等东西

g_iGameState = 4; //游戏状态变为4 }

(2)dOnSpriteColSprite()函数是引擎捕捉到精灵与精灵碰撞之后被调用的,这个函数也是我们本次编程中的重点函数,用于钩子碰到金子等东西之时,同时增加积分系统于此函数之中,每当碰撞发生,对于不同的东西产生不同的加分,其中金子加20分,钻石加50分,石头加5分,炸弹不加分。并且调整了抓石头是与抓其他物品时的速度不同,还未炸弹消失过程中附加了粒子效应。以下是函数详述:

void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )

{

/////////////////////// 发起者为goldhook,接受者含有GoldBlock字段///////////////////////////////////////// if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"GoldBlock")!=NULL )

{

if (dGetSpriteIsMounted(szTarName)==0)

g_iGameScore+=20;

dSpriteMountToSpriteLinkPoint( szTarName, "goldhook", 2 );//将金块锚定在钩子上

dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉金块的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到金块的名称

g_fEmptyHookSpeed = 15.f;

}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除////////////////////////// 发起者为goldhook,接受者含有DiaBlock字段/////////////////////////////////////// if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"DiaBlock")!=NULL )

{

if (dGetSpriteIsMounted(szTarName)==0)

g_iGameScore+=50;

dSpriteMountToSpriteLinkPoint( szTarName, "goldhook", 2 ); //将钻石锚定在钩子上dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉钻石的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到钻石的名称g_fEmptyHookSpeed = 25.f; //提高拉钻石速度}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除///////////////////////////////// 发起者为goldhook,接受者含有BombBlock字段//////////////////////////////

if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"BombBlock")!=NULL )

{

dDeleteSprite(szGotBombName);//炸弹消失

float hPosX=dGetSpritePositionX("goldhook");

float hPosY=dGetSpritePositionY("goldhook");

dPlayEffect("bigbang", 2.f, hPosX, hPosY, 0.f ); //跟随钩子增加粒子效应dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉炸弹的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到炸弹的名称g_fEmptyHookSpeed = 15.f;

}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除/////////////////////////////////// 发起者为goldhook,接受者含有StoneBlock字段///////////////////////////// if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"StoneBlock")!=NULL )

{

if (dGetSpriteIsMounted(szTarName)==0)

g_iGameScore+=5;

dSpriteMountToSpriteLinkPoint( szTarName, "goldhook", 2 ); //将石头锚定在钩子上dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉钻石的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到石头的名称g_fEmptyHookSpeed = 5.f; //减缓拉石头的速度}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除//////////////////////////////////////////////////////////////计分/////////////////////////////////////////////////////////////////////// dSetTextValue("score",g_iGameScore);

}

5. dOnSpriteColWorldLimit()引擎捕捉到精灵与世界边界碰撞之后,调用此函数。此函数相对比较简单,用于处理钩子未抓到物品碰到世界边界时的处理。

void dOnSpriteColWorldLimit( const char *szName, const int iColSide )

{

if(strcmp(szName,"goldhook") == 0)

{

dSpriteMoveTo(szName,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//碰到边界的为钩子时

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//同样设置为回拉,只是没有碰到金子

g_iGameState = 2;

}

}

4.部分自己设置定义的函数

(1)定义金子、钻石、炸弹、石头显示的函数Appear(),其内还添加了少许碰撞属性。这也是我们组本次编程较突出的地方。

void Appear()

{

//与显示金子有关的定义

int g_fGoldBornMinX = 0;

int g_fGoldBornMaxX = 0;

int g_fGoldBornMinY = 0;

int g_fGoldBornMaxY = 0;

//与炸弹有关的定义

int g_fBombBornMinX = 0;

int g_fBombBornMaxX = 0;

int g_fBombBornMinY = 0;

int g_fBombBornMaxY = 0;

//与钻石有关的定义

int g_fDiaBornMinX = 0;

int g_fDiaBornMaxX = 0;

int g_fDiaBornMinY = 0;

int g_fDiaBornMaxY = 0;

//与石头有关的定义

int g_fStoneBornMinX = 0;

int g_fStoneBornMaxX = 0;

int g_fStoneBornMinY =0;

int g_fStoneBornMaxY = 0;

///////////////////////////////////////////////////////////设置金子///////////////////////////////////////////////////////////// g_fGoldBornMinX = dGetScreenLeft() + 5; //金子左边界g_fGoldBornMaxX = dGetScreenRight() - 5; //金子右边界g_fGoldBornMinY = dGetScreenTop() + 20; //金子上边界g_fGoldBornMaxY = dGetScreenBottom() - 5; //金子下边界int iLoop = 0; //循环变量控制int iSize= 4, iPosX = 0, iPosY = 0; //iSize表示金块大小的变量dSetSpriteCollisionSend("goldhook", 1); //钩子抓金子的定义dSetSpriteCollisionReceive("goldTemplate", 1);

//在WinMain的复制金子前给金块加上接受碰撞属性

for( iLoop = 0; iLoop < g_iGoldCount; iLoop++ )

{

if( iLoop < 10 ) //生成10个小金块,大小为4 {

iSize= 4;

}

else if( iLoop >= 10 && iLoop < 16 ) //生成6个中金块,大小为6 {

iSize= 6;