




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机技术基础课程设计C语言设计报告题目:简单潜艇大战一、 选题背景:随着人们生活水平的提高,人们对精神生活的要求也随之提高了,当然,娱乐也成了人们生活中必不可少的一部分,为此,我用C语言编辑了一个简单的简单潜艇大战游戏程序。它操作起来简单方便,运行速度快。二、设计思想:简单潜艇大战就是玩家和电脑对战的游戏,玩家在确保本身不被敌人击中的情况下击中敌人则得分,若被敌人击中游戏结束。此程序利用了if,for,while等多种语句进行了编译,而且多次使用了for语句进行了循环,用if语句进行操作,if语句是用来处理条件选择的一种语句。此游戏可以任意移动玩家的位置。三、程序流程图结束若电脑中弹则玩家得分游戏继续,若玩家中弹则游戏结束图形初始化开始玩家敌人判断是否攻击敌人判断是否攻击玩家否否(敌人在攻击范围之内) (玩家在攻击范围之内)四、程序清单#include #include #include #include #define KEY_ESC 0x01#define KEY_SPACE 0x39#define KEY_LEFT 0x4b#define KEY_RIGHT 0x4dint speed=10000;char key_state128,key_pressed128;/*键盘操作用的变量*/int score=0;/*得分*/char scorestr10;/*输出分数的变量*/struct Fire/*子弹的结构体*/int x;int y;int start;/*是否发射炮弹*/amyfire6;/*屏幕上最多有5个敌人可以发子弹*/struct Play/*玩家的结构体*/int x;int y;struct Fire fire6;life;play;struct Amy/*敌人的结构体*/int x;int y;int speed;/*敌人的速度*/int color;int direction;life;amy6;void InitGraph(void);/*图形初始化*/void CloseGraph(void);/*图形结束*/void GamePlay(void);/*具体玩游戏*/void DrawPlay(void);/*画玩家*/void DrawAmy(int i);/*画敌人*/void DrawFire(int x,int y,int n);/*画子弹,0去除,1显示*/void DrawAmyFire(int x,int y,int n);/*画子弹,0去除,1显示*/void DrawBlack(int x,int y,int color);/*去除原来地方的物体*/void PrScore();/*输出得分*/int GetKey(int ScanCode);/*这里开始都是按键函数*/void interrupt far (*OldInt9Handler)();void far interrupt NewInt9();void InstallKeyboard();void ShutDownKeyboard();void main(void)InitGraph();/*图形初始化*/GamePlay();/*具体玩游戏*/CloseGraph();/*图形结束*/void InitGraph(void)/*图形初始化*/int gd=DETECT,gm;initgraph(&gd,&gm,c:tc);cleardevice();InstallKeyboard();void DrawPlay(void)/*画玩家*/setfillstyle(SOLID_FILL,6);bar(play.x-20,play.y-10,play.x+20,play.y);setfillstyle(SOLID_FILL,4);bar(play.x-20,play.y-10,play.x-10,play.y);void DrawAmy(int i)/*画敌人*/setfillstyle(SOLID_FILL,amyi.color);bar(amyi.x-20,amyi.y-10,amyi.x+20,amyi.y);setfillstyle(SOLID_FILL,GREEN);if(amyi.direction=1)bar(amyi.x-20,amyi.y-10,amyi.x-10,amyi.y);elsebar(amyi.x+10,amyi.y-10,amyi.x+20,amyi.y);void DrawBlack(int x,int y,int color)/*去除原来地方的物体*/setfillstyle(SOLID_FILL,color);bar(x-20,y-10,x+20,y);void DrawFire(int x,int y,int n)/*画子弹,0去除,1显示*/if(n=0)setfillstyle(SOLID_FILL,BLUE);elsesetfillstyle(SOLID_FILL,0);setcolor(BLUE);fillellipse(x,y,5,5);void DrawAmyFire(int x,int y,int n)/*画子弹,0去除,1显示*/if(n=0)setfillstyle(SOLID_FILL,BLUE);elsesetfillstyle(SOLID_FILL,YELLOW);/*敌人的炮弹是黄的*/setcolor(BLUE);fillellipse(x,y,3,3);void PrScore()/*输出得分*/setfillstyle(SOLID_FILL,8);/*把原来分数去除*/bar(30,0,200,40);setcolor(11);/*输出新得分*/settextstyle(0,0,2);sprintf(scorestr,%d,score);outtextxy(30,20,scorestr);void GamePlay(void)/*具体玩游戏*/int i,j;setfillstyle(SOLID_FILL,BLUE);bar(0,100,640,480);setfillstyle(SOLID_FILL,8);bar(0,0,640,99);play.x=200;play.y=99;/*玩家初始位置*/for(i=0;i6;i+)play.firei.start=0;/*一开始的子弹都为没发射状态*/amyfirei.start=0;amyi.life=0;play.life=1;DrawPlay();/*玩家初始位置*/PrScore();/*输出得分*/randomize();while(1) for(i=0;i6;i+)/*查找玩家是否有发射的子弹*/ if(play.firei.start=1)/*发射的子弹*/ DrawFire(play.firei.x,play.firei.y,0);/*去除原来子弹位置*/ play.firei.y+=3; DrawFire(play.firei.x,play.firei.y,1);/*显示新位置*/ for(j=0;j(amyj.x-22)&play.firei.x(amyj.y-14)&play.firei.y480)/*子弹超出屏幕就等于消失*/ play.firei.start=0; DrawFire(play.firei.x,play.firei.y,0); for(i=0;i6;i+)/*敌人炮弹的产生*/ if(amyi.life=1&amyi.color14&amyfirei.start=0)/*敌人发射炮弹的条件*/ amyfirei.start=1; amyfirei.x=amyi.x; amyfirei.y=amyi.y-10; for(i=0;i(play.x-14)&amyfirei.x(play.x+14)&(amyfirei.y+3)100)/*击中玩家*/ play.life=0; amyfirei.start=0; DrawAmyFire(amyfirei.x,amyfirei.y,0); DrawBlack(play.x,play.y,8);/*去除玩家*/ break; if(amyfirei.y96)/*敌人炮弹超出海洋就消失*/ amyfirei.start=0; setfillstyle(SOLID_FILL,8); setcolor(8); fillellipse(amyfirei.x,amyfirei.y,3,3); delay(speed);/*间隔时间可以自己定*/ if(play.life!=1)/*玩家被击中*/ break; for(i=0;i6;i+) if(amyi.life=0)/*出现一个敌人后就跳出循环*/ amyi.life=1; amyi.color=rand()%4+10;/*敌人的颜色*/ amyi.y=rand()%300+130;/*高度随机*/ amyi.speed=2+rand()%10;/*敌人的移动速度随机*/ amyi.direction=rand()%2;/*敌人的移动方向,0左边,1右边出来*/ if(amyi.direction=0) amyi.x=-20; else amyi.x=660; break; if(GetKey(KEY_ESC)/*退出键*/ break; if(GetKey(KEY_SPACE)/*发射*/ for(i=0;i6;i+) if(play.firei.start=0)/*发射一颗子弹后跳出循环*/ play.firei.x=play.x; play.firei.y=105; play.firei.start=1; break; if(GetKey(KEY_RIGHT)&play.x20)/*左键的控制*/ DrawBlack(play.x,play.y,8); play.x-=10; DrawPlay(); for(i=0;i660|amyi.x-20)/*敌人超出屏幕范围就消失*/ amyi.life=0; if(play.life=0)/*被击中失败的话*/ setcolor(6); settextstyle(0,0,3); outtextxy(250,40,GAME OVER);while(1)if(GetKey(KEY_ESC)/*结束游戏按ESC*/break;void CloseGraph(void)/*图形结束*/ShutDownKeyboard();closegraph();void far interrupt NewInt9(void)unsigned char ScanCode,temp;ScanCode=inportb(0x60);temp=inportb(0x61);outportb(0x61,temp | 0x80);outportb(0x61,temp & 0x7f);if(ScanCode&0x80) ScanCode&=0x7f; key_stateScanCode=0; else key_stateScanCode=1; key_pressedScanCode=1; outportb(0x20,0x20);void InstallKeyboard(void)int i;for(i=0;i128;i+)key_statei=key_pressedi=0;OldInt9Handler=getvect(9); /*中断向量值*/setvect(9,NewInt9); /*中断程序NewInt9地址存入指定的中断向量表中INT 09H*/void ShutDownKeyboard(void)setvect(9,OldInt9Handler);int GetKey(int ScanCode)int res;res=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 勇闯比较岛课件
- 新会计收入准则培训课件
- 助贷入门基础知识培训课件
- 新人养猪基本知识培训
- 前进消防基础知识培训课件
- 项目招标文件编写规范与技巧
- 五年级英语单元测试及解析
- 吊篮设备风险评估及隐患排查表
- 高中英语听说训练方案详解
- 前沿知识培训心得课件
- 油罐车蒸罐洗罐操作规程
- 费森CRRT设备操作流程-CVVH
- (完整)医疗器械设计和开发一般过程-配全套表格模板
- 智能渔业养殖系统开发合同
- 组织行为学复习纲要冬课件
- TGDMDMA 0026-2023 牙科种植用导板
- 医院发生火灾的应急预案及处理流程
- LY/T 1828-2009黄连木栽培技术规程
- X射线衍射课件(XRD)
- 常见皮肤病的种类及症状图片、简介大全课件
- 吊篮拆除安全技术交底方案
评论
0/150
提交评论