ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:92.53KB ,
资源ID:23288655      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23288655.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(10 C语言课程设计坦克大战提高篇.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

10 C语言课程设计坦克大战提高篇.docx

1、10 C语言课程设计坦克大战提高篇C语言课程设计-坦克大战一、游戏介绍玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中、玩家指挥部被击中或游戏时间到,一局游戏结束。二、实验目的综合应用C语言知识和设计知识开发一款小游戏。三、实验内容初始界面如下图。按下空格键后游戏开始,“空格开始”消失,载入地图,并把玩家坦克设置在指挥部左侧。游戏时间到,比如30秒,玩家坦克被敌方坦克摧毁,或者玩家指挥部被摧毁,一局游戏结束,游戏回到初始界面,并显示上一局的分数。游戏区域为下图中最内部的黑色区域,左上角坐标-26, -22,右下角坐标为26, 22。墙为正方形,边长为4,坦克也是正方形,比墙略小一点。玩家用W

2、ASD键控制坦克上、下、左、右运行,按J键开炮。玩家坦克碰到墙就停下来,需要调转方向才能继续前进。玩家坦克开炮,一炮就能摧毁一块墙,或者一辆敌方坦克。玩家没摧毁一辆敌方坦克,加1分。玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。每隔几秒钟,比如3秒,就会产生一辆敌方坦克。敌方坦克每隔一段时间,比如1秒,就自动开炮。敌方坦克遇到墙就会停下来。停下来的坦克,前方的墙如果被摧毁了,又能继续前进。每隔几秒钟,比如2秒,敌方坦克就会顺时针变换一个方向前进。四、实验准备本实验中可能用到的C语言标准库函数和FunCode APIStdio.h函数原型功能与返回值参数说明与应用举例int sp

3、rintf( char *buffer, const char *format, argument ) ;把格式化的数组写入某个字符串。返回值:字符串长度char szName128;int i=0;sprintf(szName, ”feichong_%d”, i);将字符串”feichong_0”写入到szName中Math.h函数原型功能与返回值参数说明与应用举例double atan2( double y, double x );计算y/x的反正切值。返回值:以弧度表示并介于 -pi 到 pi 之间(不包括 -pi)。如需使用角度,需要转换。float ftan = atan2( (y1

4、-y0), (x1-x0) );计算通过点(x1,y1)到点(x0,y0)的连成的直线与X轴之间的夹角。String.h函数原型功能与返回值参数说明与应用举例extern char *strstr(char *str1, char *str2);找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。 返回值:返回该位置的指针,如找不到,返回空指针。strstr(szName, “feichong”) != NULL说明szName中包含feichongextern int strcmp(const char *s1,const char * s2);比较字符串s1和

5、s2。当s1s2时,返回值s2时,返回值0strcmp(szName, “feichong_0”) = 0说明szName与feichong_0相等FunCode API函数原型功能与返回值参数说明与应用举例float dGetScreenLeft();获取屏幕左边界值float dGetScreenRight();获取屏幕右边界值float dGetScreenTop();获取屏幕上边界值float dGetScreenBottom();获取屏幕下边界值float dGetSpritePositionX(const char* szName);获取精灵中心点的X坐标值szName 精灵名称。

6、所有API均相同。游戏中的精灵的名称不能相同。float dGetSpritePositionY(const char* szName);获取精灵中心点的Y坐标值float dSetSpritePositionX(const char* szName);设置精灵中心点的X坐标值float dSetSpritePositionY(const char* szName);设置精灵中心点的Y坐标值void dSetSpritePosition(const char* szName, const float fPosX, const float fPosY);设置精灵中心点的X和Y坐标值,用来将精灵放

7、置在某个指定位置。dSetSpritePosition(“feichong_0”, 0, 0);将名称为”feichong_0”的精灵的中心点设置在坐标(0, 0)上void dSetSpriteLinearVelocityX(const char* szName, const float fVelX);设置精灵X轴方向速度void dSetSpriteLinearVelocityY(const char* szName, const float fVelY);设置精灵Y轴方向速度void dSetSpriteLinearVelocity(const char* szName, const f

8、loat fVelX, const float fVelY);设置精灵X轴和Y轴方向速度float dGetSpriteRotation(const char* szName);获取精灵的旋转角度 原图的角度 调整后的角度获得的旋转角度即为两张图片的角度差float dSetSpriteRotation(const char* szName, float fRot);设置图片的旋转角度fRot0,图片顺时针旋转;fRot 0.f) / 一局游戏进行中 else / 一局游戏结束 g_bStart = false; else / 游戏结束后处理 6、 一局游戏开始后,在WinMain函数中的主循

9、环里,通过dSetTextValue把(int)g_fGameTime的数值显示在名为“time”的文字精灵里,从而实时显示剩余时间(显示整秒的时间)。7、 一局游戏进行中,每循环一次,g_fGameTime减去一次刷屏的时间。当g_fGameTime0,说明一局游戏时间已完,游戏停止,重新显示“空格开始“字样。注意:g_iStart要改为0,否则下一局就不能正确判断游戏开始或结束。8、 我们定义一个MoveMyTank函数来处理玩家坦克的运动。因为玩家坦克是用键盘控制的,所以需要传递两个参数,一个用来表示按下或松开了哪个键盘,一个用来表示是按下还是松开。按下W键,设置玩家坦克向上的速度;按下

10、A键,设置向左速度;按下S键,设置向下的速度,按下D键,设置向右速度。松开键盘,坦克速度为0。此外,按下键盘时,还需要相应设置坦克朝向iDir。注意:如果函数定义写在函数调用之后,需要在函数调用前面进行声明。void MoveMyTank(int iKey, int iPress)9、 完成函数,我们在dOnKeyDown和dOnKeyUp函数中进行调用。/ 按下键盘if(g_bStart) / 一局游戏进行中 if(iKey = KEY_W | iKey = KEY_A | iKey = KEY_S | iKey = KEY_D ) MoveMyTank(iKey, 1); / 松开键盘if

11、(g_bStart)if(iKey = KEY_W | iKey = KEY_A | iKey = KEY_S | iKey = KEY_D ) MoveMyTank(iKey, 0);10、 玩家坦克开到边界时,让它停止运动。我们在dOnSpriteColWorldLimit函数中,设设置玩家坦克速度为0。if(strcmp(szName, g_pMyTank-szName)=0) / 玩家坦克 dSetSpriteLinearVelocity(g_pMyTank-szName, 0.f, 0.f);11、 因为增加了新功能,我们在一局游戏结束时,就必须考虑到新情况:游戏结束时,坦克已经不在

12、原来位置了;坦克朝向发生变化;游戏结束的时候,玩家正好按下某个控制键,给坦克设置了速度。我们该如何处理这三种情况?实验二 玩家坦克在街道中运行【实验内容】步骤一、一局游戏开始时载入地图。步骤二、一局游戏结束后删除地图。步骤三、玩家坦克碰到墙的话,不能继续前行。【实验思路】 利用数组的值来载入地图,值为0,说明此处为空;值为1,说明此处有墙。 游戏开始后载入地图,但只能载入一次。如果不停载入,会占有大量资源。 游戏结束时,需要把地图中墙都删除。创建一个新的精灵,首先需要给它命名。有规则地给精灵命名,有利于我们对精灵进行处理。我们按照墙生成的先后顺序,分别给精灵命名为:wall0,wall1,wa

13、ll2 设置玩家坦克的碰撞属性,并专门定义一个函数处理玩家坦克发生碰撞后,玩家坦克的响应。【实验指导】1、 增加新的全局变量定义int g_iWallCount = 0; / 记录墙的数量int g_iMap1113; / 地图数组 一局游戏结束后,我们需要卸载地图,也就是把墙都删除了。因此,我们需要知道墙的数量。2、 定义LoadMap函数,用来载入地图。定义一个局部数组并初始化,然后依次赋值给全局数组。局部数组初始化如下:int iMap1113= 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,1,0,1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1,0,1,0,1,0, 0,1,0,1,0,1,1,1,0,1,0,1,0, 0,1,0,1,0,1,0,1,0,1,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,1,0,0,0,0,0, 0,1,0,1,0,0,0,0,0,1,0,1,0,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1