计算机技术基础c语言课程设计潜艇大战_第1页
计算机技术基础c语言课程设计潜艇大战_第2页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论