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

下载本文档

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

文档简介

1、文档从网络中收集,已重新整理排版.word版本可编辑:欢迎下载支持.计算机技术基础课程设计C语言设计报告题目:简单潜艇大战一、选题背景:随着人们生活水平的提高,人们对精神生活的要求也随 之提高了,当然,娱乐也成了人们生活中必不可少的一部分, 为此,我用C语言编辑了一个简单的简单潜艇大战游戏程序。 它操作起来简单方便,运行速度快。二、设计思想:简单潜艇大战就是玩家和电脑对战的游戏,玩家在确保 本身不被敌人击中的情况下击中敌人则得分,若被敌人击中 游戏结束。此程序利用了 if, for, while等多种语句进行了 编译,而且多次使用了 for语句进行了循环,用if语句进 行操作,if语句是用来处

2、理条件选择的一种语句。此游戏可 以任意移动玩家的位置。三、程序流程图开始V丿图形初始化否否(敌人在攻击范围之内)(玩家在攻击范困之内)9word版本可编辑欢迎下载支持.四、程序清单include include include #include define KEY_ESC 0x01define KEY.SPACE 0x39define KEY.LEFT 0x4bdefine KEY_RIGHT 0x4dint speed二10000;char key_state128, key_pressed128 ;/*键盘操作用的变量*/int score二0;/*得分*/char scorestrEl

3、O ;/*输出分数的变量*/struct Fire/*子弹的结构体*/int x;int y;int start;/*是否发射炮弹*/amyfire6 ;/*屏幕上最多有5个敌人可以发子弹*/struct Play/*玩家的结构体*/int x;int y;struct Fire fire 16;life;Jplay;struct Amy/*敌人的结构体*/int x;int y;int speed;/*敌人的速度*/int color;int direction;Hfe;amy6;void InitGraph(void) ;/*图形初始化*/void CloseGraph(void) ;/*

4、图形结束*/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 0 ;/*输出得分*/int GetKey (int Sc

5、anCode) ;/*这里开始都是按键函数*/void interrupt far (*01dInt9Handler)();void far interrupt Newlnt9();void InstallKeyboardO ;void ShutDownKeyboard();void main(void)InitGraphO ;/*图形初始化*/GamePlay () ;/*具体玩游戏*/CloseGraphO ;/*图形结束*/void InitGraph(void) /*图形初始化*/int gd二DETECT, gm;initgraph(&gd, &gm, c:tc);cleardevi

6、ce 0;InstalIKeyboard 0;void DrawPlay(void)/*画玩家*/setfillstyle(SOLID.FILL, 6);bar (play. x20, play y10, play. x+20, play. y);setfillstyle(SOLID.FILL, 4);bar (play. x20, play. y-10, play. x10, play. y);void DrawAmy(int :1)/*画敌人*/setfillstyle(SOLID_FILL, amyi color);bar(amyi x20, amyi y10, amyi x+20, a

7、myi y);setfillstyle(SOLID.FILL, GREEN);if(amyi direction=l)bar (amyi x20, amy i y-10, amyi x*10, amyi y);elsebar (amyi x+10, amyi y10, amyi x+20, amyi y);void DrawBlack(int x, int y, int color)/*去除原來地方的物体*/setfillstyle(SOLID.FILL, color);bar (x-20,厂 10, x+20, y);void DrawFire (int x, int y, int n)/*

8、画子弹,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

9、, 3);void PrScoreO/*输出得分*/setfillstyle (SOLID.FILL, 8) ;/*把原來分数去除*/bar (30,0, 200, 40);setcolor (11) ;/*输出新得分*/settextstyle (0,0,2);sprintf(scorestr,score);outtextxy(30,20, scorestr);void GamePlay(void)/*具体玩游戏*/int i, j;setfillstyle(SOLID.FILL, BLUE);bar(0, 100, 640, 480);setfillstyle(SOLID.FILL, 8)

10、;bar(0, 0, 640, 99);play. x=200;play. y=99; /*玩家初始位置*/for(i=0;i6;i+)play. firei. start二0;/*开始的子弹都为没发射状态*/amyfireLi start二0;amyEi1辻e=0;play. life=l;DrawPlay 0 ;/*玩家初始位置*/PrScore 0 ;/*输出得分*/randomize();while(l)for(i=0;i6;i+)/*查找玩家是否有发射的子弹*/辻(play. firei. start二二 1)/*发射的子弹*/DrawFire (play, f irei. x, p

11、lay. firei. y, 0) ;/*去除原來子弹位置*/ play firei y+=3;DrawFire (play. fireij. x, play. fireZi. y, 1) ;/*显示新位置*/for (j二0 ;j(amyj x22)&play. fireLi x(amyj. y14)&play. firei. y480) /*子弹超出屏幕就等于消失*/play, fire Ci. start=0;DrawFire(play, fire Li, x,play.firei.y,0);for (i=0 ;i6; i+) /*敌人炮弹的产生*/if (amy i. life=l&a

12、my i. color14&amyfireiL start=0)/*敌人发射炮弹 的条件*/amyfirei. start=l;amyfirei. x二amyi. x;amyfirei. y=amyLil. y-10;for (i=0 ;i(play. xl4)&amyfireEi x(play. x+14)&(amyfireEil y+3X100)/*击中玩家*/play. life二0;amyfirei start=0;DrawAmyFire(amyfireli x, amyfireLiZ y, 0);DrawBlack(play, x, play, y, 8) ;/*去除玩家*/brea

13、k;if (amyf ire i. y96) /*敌人炮弹超出海洋就消失*/amyfireEi start=0;setfillstyle(SOLID.FILL, 8);setcolor (8);fillellipse(amyfire Li x, amyfireLi y,3, 3);delay (speed) ;/*间隔时间可以口己定*/if (play. life!=l)/* 玩家被击中 */break;for(i=0;i6;i+)if (amy il. life=0)/*出现一个敌人后就跳出循环*/11word版本可编辑欢迎下载支持.文档从网络中收集,已重新整理排版.word版本可编辑:欢迎

14、下载支持.amy i. color=rand()%4+10;/*敌人的颜色*/amyLi y=rand()%300+130;/*高度随机*/amy i. speed=2+rand()%10;/*敌人的移动速度随机*/amyi. direction=rand()%2;/*敌人的移动方向,0左边,1右边出来*/if (amyi directionO)amyi x=20;elseamyZi x=660;break;辻(GetKey (KEY_ESC) /* 退出键*/break;辻(GetKey (KEY.SPACE) /* 发射*/for(i=0;i6;i+)if (play. firei. st

15、art=0)/*发射一颗子弹后跳出循环*/play. firei x=play. x;play. firei.y=105;play. firei start=l;break;if (GetKey (KEY_RIGHT)&play. x20)/*左键的控制*/DrawBlack(play. x, play. y, 8);play. x=10;DrawPlay0;for (i=0; i660 amy i. x-20)/*敌人超出屏幕范围就消失*/amyli life二0;if (play. life=0)/*被击中失败的话*/setcolor(6);settextstyle(0, 0,3);out

16、textxy(250, 40, GAME OVER);whiled)if(GetKey(KEY_ESC)/*结束游戏按 ESC*/1 lword版本可编辑欢迎下载支持.文档从网络中收集,已重新整理排版.word版本可编辑:欢迎下载支持.break;void CloseGraph(void)/*图形结束*/ShutDonKeyboard ();closegraph();void far interrupt Newlnt9(void)unsigned char ScanCode, temp;ScanCode=inportb(0x60);temp=inportb (0x61);outportb(0x

17、61, temp 0x80);outportb(0x61, temp & 0x7f);if(ScanCode&0x80)ScanCode&二0x7f;key_state EScanCodel=0;elsekey_sta te EScanCodel =1; key_pressedScanCode=1;outportb(0x20,0x20);void InstallKeyboard(void)int i;for(i=0;i128;i+)ke5r_state i =key_pressed li =0;01dInt9Handler=getvect (9) ;/*中断向量值*/setvect (9, Newlnt9) ;/*中断程序Newlnt9 地址存入指定的中断向量表中INT 09H*/void ShutDownKeyboard(void)setvect(9, 01dint9Handler);int GetKey(int ScanCode)int

温馨提示

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

评论

0/150

提交评论