简单潜艇大战

song131069395

song131069395

2016-02-19 13:11

下面这个简单潜艇大战教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!
/*简单潜艇大战
    全局变量speed一开始需要调整,大家的速度不同
    主要练习下这个游戏的基本算法,用简单的图形来模拟
    ----跳蚤侦察-------
  */
  #include graphics.h
  #include stdlib.h
  #include dos.h
  #include graphics.h
  #define KEY_ESC 0x01
  #define KEY_SPACE 0x39
  #define KEY_LEFT 0x4b
  #define KEY_RIGHT 0x4d
  int speed=10000;
  char key_state[128],key_pressed[128];/*键盘操作用的变量*/
  int score=0;/*得分*/
  char scorestr[10];/*输出分数的变量*/
  strUCt Fire/*子弹的结构体*/
  {
   int x;
   int y;
   int start;/*是否发射炮弹*/
  }amyfire[6];/*屏幕上最多有5个敌人可以发子弹*/
  struct Play/*玩家的结构体*/
  {
   int x;
   int y;
   struct Fire fire[6];
   life;
  }play;
  struct Amy/*敌人的结构体*/
  {
   int x;
   int y;
   int speed;/*敌人的速度*/
   int color;
   int direction;
   life;
  }amy[6];
  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:c");
   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,amy[i].color);
   bar(amy[i].x-20,amy[i].y-10,amy[i].x+20,amy[i].y);
   setfillstyle(SOLID_FILL,GREEN);
   if(amy[i].direction==1)
   bar(amy[i].x-20,amy[i].y-10,amy[i].x-10,amy[i].y);
   else
   bar(amy[i].x+10,amy[i].y-10,amy[i].x+20,amy[i].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);
   else
   setfillstyle(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);
   else
   setfillstyle(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.fire[i].start=0;/*一开始的子弹都为没发射状态*/
   amyfire[i].start=0;
   amy[i].life=0;
   }
   play.life=1;
   DrawPlay();/*玩家初始位置*/
   PrScore();/*输出得分*/
   randomize();
   while(1)
   {
     for(i=0;i6;i++)/*查找玩家是否有发射的子弹*/
     {
      if(play.fire[i].start==1)/*发射的子弹*/
      {
       DrawFire(play.fire[i].x,play.fire[i].y,0);/*去除原来子弹位置*/
       play.fire[i].y+=3;
       DrawFire(play.fire[i].x,play.fire[i].y,1);/*显示新位置*/
       for(j=0;j6;j++)/*判定子弹是否击中敌人*/          if(play.fire[i].x(amy[j].x-22)&&play.fire[i].x(amy[j].x+22)&&play.fire[i].y(amy[j].y-14)&&play.fire[i].yamy[j].y+5)/*击中敌人*/
        {
         play.fire[i].start=0;/*子弹消失*/
         amy[j].life=0;/*敌人生命结束*/
         score+=10;/*得分增加*/
         DrawFire(play.fire[i].x,play.fire[i].y,0);/*去除原来子弹位置*/
         DrawBlack(amy[j].x,amy[j].y,BLUE);/*去除敌人*/
         PrScore();
        }
       if(play.fire[i].y480)/*子弹超出屏幕就等于消失*/
       {
        play.fire[i].start=0;
        DrawFire(play.fire[i].x,play.fire[i].y,0);
       }
      }
     }
    for(i=0;i6;i++)/*敌人炮弹的产生*/
    {
     if(amy[i].life==1&&amy[i].color14&&amyfire[i].start==0)/*敌人发射炮弹的条件*/
     {
      amyfire[i].start=1;
      amyfire[i].x=amy[i].x;
      amyfire[i].y=amy[i].y-10;
     }
    }
    for(i=0;i6;i++)/*敌人炮弹移动以及移动*/
    {
     if(amyfire[i].start==1)/*子弹存在*/
     {
     DrawAmyFire(amyfire[i].x,amyfire[i].y,0);
     amyfire[i].y-=2;
     DrawAmyFire(amyfire[i].x,amyfire[i].y,1);/*画敌人炮弹新位置*/
     }
     if(amyfire[i].x(play.x-14)&&amyfire[i].x(play.x+14)&&(amyfire[i].y+3)100)/*击中玩家*/
     {
      play.life=0;
      amyfire[i].start=0;
      DrawAmyFire(amyfire[i].x,amyfire[i].y,0);
      DrawBlack(play.x,play.y,8);/*去除玩家*/
      break;
     }
     if(amyfire[i].y96)/*敌人炮弹超出海洋就消失*/
     {
     amyfire[i].start=0;
     setfillstyle(SOLID_FILL,8);
     setcolor(8);
     fillellipse(amyfire[i].x,amyfire[i].y,3,3);
     }
    }
    delay(speed);/*间隔时间可以自己定*/
    if(play.life!=1)/*玩家被击中*/
    break;
    for(i=0;i6;i++)
    {
     if(amy[i].life==0)/*出现一个敌人后就跳出循环*/
     {
      amy[i].life=1;
      amy[i].color=rand()%4+10;/*敌人的颜色*/
      amy[i].y=rand()%300+130;/*高度随机*/
      amy[i].speed=2+rand()%10;/*敌人的移动速度随机*/
      amy[i].direction=rand()%2;/*敌人的移动方向,0左边,1右边出来*/
      if(amy[i].direction==0)
      amy[i].x=-20;
      else
      amy[i].x=660;
      break;
     }
    }
    if(GetKey(KEY_ESC))/*退出键*/
    break;
    if(GetKey(KEY_SPACE))/*发射*/
    {
     for(i=0;i6;i++)
     if(play.fire[i].start==0)/*发射一颗子弹后跳出循环*/
     {
      play.fire[i].x=play.x;
      play.fire[i].y=105;
      play.fire[i].start=1;
      break;
     }
    }
    if(GetKey(K
  
展开更多 50%)
分享

猜你喜欢

简单潜艇大战

编程语言 网络编程
简单潜艇大战

简单坦克大战

编程语言 网络编程
简单坦克大战

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

潜艇总动员攻略

电脑网络
潜艇总动员攻略

PS打造沙漠潜艇效果

PS PS基础 ps平面设计教程 ps去水印教程
PS打造沙漠潜艇效果

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

潜艇总动员4高清图集

电脑网络
潜艇总动员4高清图集

松鼠大战攻略

电脑网络
松鼠大战攻略

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

JAVA入门教程:第四章

JAVA入门教程:第四章

如何让JBuilder9支持Struts 1.1

如何让JBuilder9支持Struts 1.1
下拉加载更多内容 ↓