黄金矿工试验报告
中国石油大学(华东)中国石油大学(华东) 程序设计实训报告程序设计实训报告 “黄金矿工”实验报告 游戏截图游戏截图 图一:开始游戏 图二:按下空格键开始游戏,出现金块,钩子转动 图三:按下↓键,钩子停止转动,开始下放,抓取金块 图四:抓完金块后返回初始界面 功能描述功能描述 1、 2、 3、 游戏运行,初始界面出现“空格开始”的提示。 玩家按下空格键,开始游戏。 游戏开始后,界面随机出现 20 个大小不同的金子,并且钩 子开始转动。 4、 5、 6、 按下↓键,钩子停止转动,下放,抓取金子。 抓到金子后,返回到初始位置,被抓到的金子消失。 用户继续按下↓键,继续抓取金子,直到金子被抓取完, 这样一局游戏完成。 7、一局游戏完成后,屏幕重新出现“空格开始”的标志,用 户按下空格可以继续游戏,如此往复。 流程图:流程图: 数据结构:数据结构: 1、g_fGoldBornMinX 2、 3、 4、 金子左边界 g_fGoldBornMaxX金子右边界 g_fGoldBornMinY金子上边界 g_fGoldBornMaxY金子下边界 5、g_iGoldCount屏幕中金子数目 6、g_iGameState设置游戏状态 当前抓到金子的名称7、szGotGoldName[20] 8、g_fHookRotation钩子的转动的角速度 9、 g_fEmptyHookSpeed钩子的下放的初始速度 10、g_fHookStartPosX存储钩子的初始 X 位置 11、g_fHookStartPosY存储钩子的初始 Y 位置 算法描述:算法描述: 游戏状态 g_iGameState 分为三种状态 0,1,2 ,其中0 表示游戏 结束状态,1 表示游戏初始化,2 则表示游戏运行状态; 0 1 的转换为“空格开始” ; 1 2 的转换自然发生,即游戏初始化函数后会自动将游戏状态 从 1 置为 2; 2 表示游戏运行状态,在该状态,按下↓键可以抓取金子; 2 0 的转换为当金子全被抓完后会自动将游戏状态从2 置为 0; 金子精灵的初始化:金子精灵的初始化: 1、创建金子精灵的对象; 2、生成大小为 4 的小金块 10 个、 大小为 6 的中金块 6 个、大小 为 8 的大金块 4 个,并保存tmpName 数组中,随机获取每个金子 的坐标; 3、隐藏“空格开始”精灵; 4、设置屏幕中剩下的金子数目为 20,每当被抓走的一块金子消失 后屏幕中剩下的金子数目减 1; 5、当屏幕中剩下的金子数目为0 时,一局游戏结束,返回初始界 面, “空格开始”精灵出现; 6、重新进行金子精灵的初始化; dOnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress,const bool bCtrlPress ) 游戏开始和控制按钮:游戏开始和控制按钮: 1、游戏还未开始,即游戏状态为 0,如果空格按被下,则将游戏 状态改为 1,此时对程序的数据进行初始化, “空格开始”精灵消失, 金子出现,钩子转动; 2、游戏状态为 0 时并按下空格键后, ,如果按下↓键,钩子开始 下放抓金子,当抓到金子后,游戏的状态变为2 游戏正式开始运行; 3、游戏状态为 2 时,钩子抓住金子后,按照金子的大小设置金子 的速度,金子越大,回拉速度越小; 4、当钩子和金子回到初始位置后,被抓的金子消失; 源代码:源代码: 在Main.cpp文件中 //----------------------------------------------------------------------------- // //----------------------------------------------------------------------------- #include “CommonAPI.h“ #include “stdio.h“ #include “string.h“ voidDrawHookLine(); int g_fGoldBornMinX=0; intg_fGoldBornMaxX =0; intg_fGoldBornMinY =0; intg_fGoldBornMaxY =0; int g_iGoldCount=20; intg_iGameState=2; int flag=1; int flagnum=0; char szGotGoldName[20];//当前抓到金子的名称 float g_fHookRotation = 0.f; float g_fEmptyHookSpeed=35.f; float fTimeDelta; float g_fHookStartPosX; //存储钩子的初始 X 位置 float g_fHookStartPosY; //存储钩子的初始 Y 位置 /////////////////////////////////////////////////////////////////////////////////////////// // // 主函数入口 // ////////////////////////////////////////////////////////////////////////////////////////// int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTRlpLine, intnShow) { // 初始化游戏引擎 if( !dInitGameEngine( hInstance, lpLine ) ) return 0; // 游戏初始化代码 dSetWindowTitle(“黄金矿工“); g_fGoldBornMinX=dGetScreenLeft() + 5;//金子左边界 g_fGoldBornMaxX=dGetScreenRight() - 5;//金子右边界 g_fGoldBornMinY=dGetScreenTop() + 20;//金子上边界 g_fGoldBornMaxY=dGetScreenBottom() - 5;//金子下边界 g_fHookStartPosX = dGetSpritePositionX(“GoldHook“); g_fHookStartPosY = dGetSpritePositionY(“GoldHook“); dSetSpriteCollisionSend(“goldHook“, 1); dSetSpriteCollisionReceive(“goldTemplate“, 1); //获取钩子的初始 X 坐标 //获取钩子的初始 Y 坐标 const floatfRotateSpeed = 45.f;//摇摆速度,单位 度/秒 int iHookRotToLeft = 1;//钩子摆动的方向:1 ← ;0 → float fTimeDelta=dGetTimeDelta(); // 引擎主循环,处理屏幕图像刷新等工作 w