程序设计基础之飞机大战说明书_第1页
程序设计基础之飞机大战说明书_第2页
程序设计基础之飞机大战说明书_第3页
程序设计基础之飞机大战说明书_第4页
程序设计基础之飞机大战说明书_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、XX大学程序设计根底课内工程说明书学生姓名:XXX学号:XXXXX学院:XXXXXXX班级:XXXXX题目:飞机大战指导教师XXXXXXWXX月XX日1设计目的小标题黑体五号字制作一个简单的飞机大战游戏.2设计内容此飞机大战游戏是一款射击游戏,它随着你的分数增加,而不断改变你的等级,同时等级越高难度就会越大,一旦敌机逃离那么你的分数将会减少,与敌机相撞你的生命值将会减少,按鼠标左键可以连续发射子弹,鼠标移动限制我机移动.3. 本设计所采用的数据结构使用了两个动态链表,分别储存敌机图片的左上角坐标X,Y以及子弹图片的左上角坐标X,Y,删除子弹与敌机以及敌机与我机的碰撞都是基于图片的左上角坐标X,

2、Y来判定.4功能模块详细设计3.1 子弹相关模块3.1.1 详细设计思想当检测到左键按下时,调用添加子弹的函数并进行传参鼠标的位置坐标产生新的子弹;当子弹击中敌机移动子弹的函数来判断是否击中后调用删除子弹函数来删除子弹并释放内存;移动子弹函数在中还包括子弹是否出界并删除的函数;游戏结束后把所有的子弹都删掉.3.1.2 核心代码/子弹intbulletvx=0;intbulletvy=-20;intbulletwidth=6;intbullethigh=11;typedefstructTag_Bulletintx;inty;structTag_Bullet*Next;bullet,*lbulle

3、t;bulletbullethead;lbulletlbhead=&bullethead,lbtail=&bullethead;/添加子弹-返回添加的子弹指针lbulletpushbullet(intbx,intby);lbulletremovebullet(lbulletit);/删除子弹-返回下一个子弹的指针lbulletfreebullet();/删除全部子弹lbulletmovebullet();/移动子弹/添加子弹lbulletpushbullet(intbx,intby)lbtail=lbtail->Next=(lbullet)malloc(sizeof(bu

4、llet);lbtail->x=bx;lbtail->y=by;lbtail->Next=NULL;returnlbtail;/删除子弹lbulletremovebullet(lbulletIt)lbulletcbullet;for(cbullet=lbhead;cbullet->Next!=NULL;cbullet=cbullet->Next)if(cbullet->Next=It)if(It=lbtail)/尾节点单独处理lbtail=cbullet;cbullet->Next=It->Next;free(It);break;returncb

5、ullet->Next;/清空子弹lbulletfreebullet()for(lbulletcp=lbhead->Next,Nextp;cp!=NULL;)Nextp=cp->Next;free(cp);cp=Nextp;lbhead->Next=NULL;returnlbhead;/移动子弹lbulletmovebullet()for(lbulletcbullet=lbhead->Next;cbullet!=NULL;)cbullet->x+=bulletvx;cbullet->y+=bulletvy;for(lenemycenemy=lenemy

6、head->Next;cenemy!=NULL;cenemy=cenemy->Next)/检测子弹与敌机的碰撞if(pengzhuang1(cbullet,cenemy)inta,b;a=cenemy->x;b=cenemy->y;removebullet(cbullet);removeenemy(cenemy);show(a-35,b-60);pushenemy(rand()%400,0);/敌机死亡,添加新的敌机break;/判断子弹是否出界if(cbullet->x<0|cbullet->x>=WIDTH|cbullet->y<

7、=0|cbullet->y>=HEIGHT)cbullet=removebullet(cbullet);elsecbullet=cbullet->Next;returnlbhead;/检测子弹与敌机是否碰撞intpengzhuang1(lbulletbullet,lenemyenemy)if(!(bullet->x+bulletwidth<enemy->x|bullet->x>enemy->x+enemywidth|bullet->y+bullethigh<enemy->y|bullet->y>enemy-&g

8、t;y+enemyhigh)score+=3;return!(bullet->x+bulletwidth<enemy->x|bullet->x>enemy->x+enemywidth|bullet->y+bullethigh<enemy->y|bullet->y>enemy->y+enemyhigh);3.2 敌机相关模块3.2.1 详细设计思想一开始就随机产生三个敌机,子弹击中敌机就会删除敌机(子弹相关模块中)并调用产生敌机的函数来再产生一个新的敌机;移动敌机的函数中同样检测敌机是否出界并调用删除敌机函数;在用户数据更新

9、函数中:检测我机是否与敌机碰撞;游戏结束之后将所有飞机删除.3.2.2 核心代码/敌机intenemyvx=0;intenemyvy=5;intenemywidth=110;intenemyhigh=84;typedefstructTag_Enemyintx;inty;structTag_Enemy*Next;enemy,*lenemy;enemyenemyhead;lenemylenemyhead=&enemyhead,lenemytail=&enemyhead;lenemypushenemy(intex,intey);/添加敌机-返回添加的敌机指针lenemyremovee

10、nemy(lenemyit);/删除敌机-返回下一个敌机的指针lenemyfreeenemy();/删除全部敌机lenemymoveenemy();/移动敌机/用户数据更新函数voidupdateinput()MOUSEMSGm;while(MouseHit()m=GetMouseMsg();if(m.uMsg=WM_MOUSEMOVE)plancex=m.x;plancey=m.y;cenemy=lenemyhead->Next;cenemy!=NULL;cenemy=cenemy->Next)/检测敌机与我机是否碰撞if(pengzhuang2(plancex,plancey,

11、cenemy)inta,b;a=cenemy->x;b=cenemy->y;removeenemy(cenemy);show(a-35,b-60);pushenemy(rand()%400,0);/TODO:敌机死亡,添加新的敌机break;elseif(m.uMsg=WM_LBUTTONDOWN)pushbullet(plancex+13,plancey+40);charin;if(_kbhit()in=getch();if(in=32)d=3;/添加敌机lenemypushenemy(intbx,intby)lenemytail=lenemytail->Next=(len

12、emy)malloc(sizeof(enemy);lenemytail->x=bx;lenemytail->y=by;lenemytail->Next=NULL;returnlenemytail;/删除敌机lenemyremoveenemy(lenemyIt)lenemycenemy;for(cenemy=lenemyhead;cenemy->Next!=NULL;cenemy=cenemy->Next)if(cenemy->Next=It)if(It=lenemytail)/尾节点单独处理lenemytail=cenemy;cenemy->Next=

13、It->Next;free(It);break;returncenemy->Next;/清空敌机lenemyfreeenemy()Nextp=cp->Next;free(cp);cp=Nextp;)lenemyhead->Next=NULL;returnlenemyhead;)/移动敌机lenemymoveenemy()(for(lenemycp=lenemyhead->Next;cp!=NULL;)(cp->x+=enemyvx;cp->y+=enemyvy;if(cp->x<0|cp->x>=WIDTH|cp->y&l

14、t;=0|cp->y>=HEIGHT)(cp->y=0;cp->x=rand()%410;score-=1;)else(cp=cp->Next;)returnlenemyhead;)/检测敌机与我机是否碰撞intpengzhuang2(intx,inty,lenemyenemy)if(!(x+100<enemy->x|x>enemy->x+enemywidth|y+151<enemy->y|y>enemy->y+enemyhigh)l-;return!(x+100<enemy->x|x>enemy->x+enemywidth|y+151<enemy->y|y>enemy->y+enemyhigh);5心得体会详细从这次的C语言工程开发,我学到了许多东西,主要有:(1)对全局变量和局部变量有了全新的熟悉,局部变量更适合于分函数,在一个分函数中更能发挥它的独特优势,而全局变量更能适于整个工程的使用,便于在各个分函数中使用,但有一定的缺陷,我认为局部变量更加好用.(2)传参的使用可以方便函数之间的联系,使得函数的调用能够发挥更加大的作用,建立分函数之间的独特联系,我也用到了去进行传链表的一个节点的指针,使得链表的功能更加的强大,当然这只是传了节点的指针,但我之

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论