版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机技术基础课程设计C语言设计报告题目:简单潜艇大战一、选题背景:随着人们生活水平的提高,人们对精神生活的要求也随之提高了,当然,娱乐也成了人们生活中必不可少的一部分,为此,我用C语言编辑了一个简单的简单潜艇大战游戏程序。它操作起来简单方便,运行速度快。二、设计思想:简单潜艇大战就是玩家和电脑对战的游戏,玩家在确保本身不被敌人击中的情况下击中敌人则得分,若被敌人击中游戏结束。此程序利用了if,for,while等多种语句进行了编译,而且多次使用了for语句进行了循环,用if语句进行操作,if语句是用来处理条件选择的一种语句。此游戏可以任意移动玩家的位置。三、程序流程图开始图形初始化否否(敌人
2、在攻击范围之内)(玩家在攻击范围之内)四、程序清单#include<graphics.h>#include<stdlib.h>#include<dos.h>#include<graphics.h>#defineKEY_ESC0x01#defineKEY_SPACE0x39#defineKEY_LEFT0x4b#defineKEY_RIGHT0x4dintspeed=10000;charkey_state128,key_pressed128;/*键盘操作用的变量*/intscore=0;/*得分*/charscorestr10;/*输出分数的变量*
3、/structFire/*子弹的结构体*/intx;inty;intstart;/*是否发射炮弹*/amyfire6;/*屏幕上最多有5个敌人可以发子弹*/structPlay/*玩家的结构体*/intx;inty;structFirefire6;life;play;structAmy/*敌人的结构体*/intx;inty;intspeed;/*敌人的速度*/intcolor;intdirection;life;amy6;voidInitGraph(void);/*图形初始化*/voidCloseGraph(void);/*图形结束*/voidGamePlay(void);/*具体玩游戏*/v
4、oidDrawPlay(void);/*画玩家*/voidDrawAmy(inti);/*画敌人*/画子弹,0去除,1显示*/画子弹,0去除,1显示*/去除原来地方的物体*/voidDrawFire(intx,inty,intn);/*voidDrawAmyFire(intx,inty,intn);/*voidDrawBlack(intx,inty,intcolor);/*voidPrScore();/*输出得分*/intGetKey(intScanCode);/*这里开始都是按键函数*/voidinterruptfar(*OldInt9Handler)();voidfarinterruptN
5、ewInt9();voidInstallKeyboard();voidShutDownKeyboard();voidmain(void)InitGraph();/*图形初始化*/GamePlay();/*具体玩游戏*/CloseGraph();/*图形结束*/voidInitGraph(void)/*图形初始化*/intgd=DETECT,gm;initgraph(&gd,&gm,"c:tc");cleardevice();InstallKeyboard();voidDrawPlay(void)/*画玩家*/setfillstyle(SOLID_FILL,6
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);voidDrawAmy(inti)/*画敌人*/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,
7、amyi.y);elsebar(amyi.x+10,amyi.y-10,amyi.x+20,amyi.y);voidDrawBlack(intx,inty,intcolor)/*去除原来地方的物体*/setfillstyle(SOLID_FILL,color);bar(x-20,y-10,x+20,y);voidDrawFire(intx,inty,intn)/*if(n=0)setfillstyle(SOLID_FILL,BLUE);elsesetfillstyle(SOLID_FILL,0);setcolor(BLUE);fillellipse(x,y,5,5);voidDrawAmyFi
8、re(intx,inty,intn)/*if(n=0)setfillstyle(SOLID_FILL,BLUE);elsesetfillstyle(SOLID_FILL,YELLOW);/*setcolor(BLUE);fillellipse(x,y,3,3);voidPrScore()/*输出得分*/setfillstyle(SOLID_FILL,8);/*bar(30,0,200,40);setcolor(11);/*输出新得分*/settextstyle(0,0,2);sprintf(scorestr,"%d",score);outtextxy(30,20,score
9、str);画子弹,0去除,1显示*/画子弹,0去除,1显示*/敌人的炮弹是黄的*/把原来分数去除*/if(amyfirei.start=1)/*子弹存在*/*/去除原来子弹位置*/显示新位置*/voidGamePlay(void)/*具体玩游戏*/inti,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;i<6;i+)play.firei.start=0;/*一开始的子弹都
10、为没发射状态amyfirei.start=0;amyi.life=0;play.life=1;DrawPlay();/*玩家初始位置*/PrScore();/*输出得分*/randomize();while(1)for(i=0;i<6;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<6;j+)/*判断子弹是否击中敌人.x+
11、22)&&play.firei.y>(amyj.y-14)&&play.firei.y<amyj.y+5)/*击中敌人*/play.firei.start=0;/*子弹消失*/amyj.life=0;/*敌人生命结束*/score+=10;/*得分增加*/DrawFire(play.firei.x,play.firei.y,0);/*去除原来子弹位置*/DrawBlack(amyj.x,amyj.y,BLUE);/*去除敌人*/PrScore();if(play.firei.y>480)/*子弹超出屏幕就等于消失*/play.firei.sta
12、rt=0;DrawFire(play.firei.x,play.firei.y,0);for(i=0;i<6;i+)/*敌人炮弹的产生*/if(amyi.life=1&&amyi.color<14&&amyfirei.start=0)/*敌人发射炮弹的条件*/amyfirei.start=1;amyfirei.x=amyi.x;amyfirei.y=amyi.y-10;for(i=0;i<6;i+)/*敌人炮弹移动以及移动*/DrawAmyFire(amyfirei.x,amyfirei.y,0);amyfirei.y-=2;DrawAmyFi
13、re(amyfirei.x,amyfirei.y,1);/*画敌人炮弹新位置*/if(amyfirei.x>(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.y<96)/*敌人炮弹超出海洋就消失*/amyfirei.start=
14、0;setfillstyle(SOLID_FILL,8);setcolor(8);fillellipse(amyfirei.x,amyfirei.y,3,3);delay(speed);/*间隔时间可以自己定*/if(play.life!=1)/*玩家被击中*/break;for(i=0;i<6;i+)if(amyi.life=0)/*出现一个敌人后就跳出循环*/amyi.life=1;amyi.color=rand()%4+10;/*敌人的颜色*/amyi.y=rand()%300+130;/*高度随机*/amyi.speed=2+rand()%10;/*敌人的移动速度随机*/amyi
15、.direction=rand()%2;/*敌人的移动方向,0左边,1右边出来*/if(amyi.direction=0)amyi.x=-20;elseamyi.x=660;break;if(GetKey(KEY_ESC)/*退出键*/break;if(GetKey(KEY_SPACE)/*发射*/for(i=0;i<6;i+)if(play.firei.start=0)/*发射一颗子弹后跳出循环*/play.firei.x=play.x;play.firei.y=105;play.firei.start=1;break;if(GetKey(KEY_RIGHT)&&pla
16、y.x<620)/*右键盘的控制*/DrawBlack(play.x,play.y,8);play.x+=10;DrawPlay();if(GetKey(KEY_LEFT)&&play.x>20)/*左键的控制*/DrawBlack(play.x,play.y,8);play.x-=10;DrawPlay();for(i=0;i<6;i+)/*显示敌人*/if(amyi.life=1)/*如果敌人存在*/DrawBlack(amyi.x,amyi.y,BLUE);/*原来位置输出海洋颜色*/if(amyi.direction=0)amyi.x+=amyi.sp
17、eed;/*敌人横坐标的变化*/elseamyi.x-=amyi.speed;DrawAmy(i);/*画敌人*/if(amyi.x>660|amyi.x<-20)/*敌人超出屏幕范围就消失*/amyi.life=0;if(play.life=0)/*被击中失败的话*/setcolor(6);settextstyle(0,0,3);outtextxy(250,40,"GAMEOVER");while(1)if(GetKey(KEY_ESC)/*结束游戏按ESC*/break;voidCloseGraph(void)/*图形结束*/ShutDownKeyboard
18、();closegraph();voidfarinterruptNewInt9(void)unsignedcharScanCode,temp;ScanCode=inportb(0x60);temp=inportb(0x61);outportb(0x61,temp|0x80);outportb(0x61,temp&0x7f);if(ScanCode&0x80)ScanCode&=0x7f;key_stateScanCode=0;elsekey_stateScanCode=1;key_pressedScanCode=1;outportb(0x20,0x20);voidInstallKeyboard(void)inti;for(i=0;i<128;i+)key_statei=key_pressedi=0;OldInt9Handler=getvect(9);/*中断向量值*/setvect(9,NewInt9);/*中断程序NewInt9地址存入指定的中断向量表中INT09H*/voidShutDownKeyboard(void)setvect(9,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026年初二化学(综合复习)上学期期末检测卷
- 2026年资产评估能力(资产分析)考题及答案
- 2025年高职建筑工程施工(测量放线)试题及答案
- 2025年中职软件工程(软件设计进阶)试题及答案
- 2025年大学(动画)三维动画制作期末试题及答案
- 2025-2026年九年级地理(区域发展)单元试卷
- 深度解析(2026)《GBT 18311.1-2003纤维光学互连器件和无源器件 基本试验和测量程序 第3-1部分检查和测量 外观检查》
- 深度解析(2026)《GBT 18128-2000应用错误与确认报文》
- 深度解析(2026)《GBT 17980.116-2004农药 田间药效试验准则(二) 第116部分杀菌剂防治苹果和梨树腐烂病疤(斑)复发》
- 深度解析(2026)《GBT 17980.2-2000农药 田间药效试验准则(一) 杀虫剂防治稻纵卷叶螟》
- 药品生产现场管理与过程控制培训ppt
- 风机及塔筒生产全流程检验分析课件
- 网页制作智慧树知到答案章节测试2023年
- 电大专科《建筑制图基础》期末机考试题
- 超星尔雅学习通《大学生心理健康教育(兰州大学版)》2022章节测试答案
- FZ/T 80002-2008服装标志、包装、运输和贮存
- 七巧板题解课件
- 艺术管理学概论-课件
- 男女生正常交往主题班会(50张PPT)
- 铁路典型事故案例分析课件
- 学校卫生防疫工作检查清单(中小学校)
评论
0/150
提交评论