简单潜艇大战

2016-02-19 13:11 12 1 收藏

下面这个简单潜艇大战教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 编程语言 】

/*简单潜艇大战
    全局变量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
  

来源:http://www.tulaoshi.com/n/20160219/1603277.html

延伸阅读
PSP《换装大战》PSP汉化版主要剧情攻略 游戏要点: 装备: 既然这游戏叫换装大战,那么游戏的核心就在衣服上了。这游戏深刻的告诉我们一个道理:有一张好脸不如有一身好能力,有一身好能力不如有一件好衣服。是的,这游戏的关键就是衣服。有一件好的衣服,你可以轻松干掉BOSS;没有一身...
拯救肌肤补水大战 下面跟着爱美图老师小编一起看看夜猫子如何挽救问题肌肤吧。 肌肤拯救第一招:熬夜时要及时补水 熬过夜的脸颊干得让人崩溃,散粉根本不敢用。整个底妆浮在脸上,再好的粉底伺候,疲惫的脸也不“吃”妆。皮肤缺水就会显得干燥。缺水的原因包括环境因素和护理不当。 熬夜时应该让室内空气...
《植物大战僵尸》植物篇 1.小豌豆射手(暂时这么叫吧……):“我一直纳闷我哪来这么多豌豆……” 旁边的大豌豆射手:“我也一直纳闷我跟你外表差不多怎么我的嗓子眼就这么长?” 后面的三头豌豆射手(...
魔兽争霸《忍者村大战》卡卡西 VS 日向宁次1V1个人技巧心得 KK打NC。能抢到蓝牌就抢。抢到蓝牌等10J留蓝杀野。然后回家回蓝回血。继续清野。在清野的同时。如果兵是压到NC的中路那里。KK就可以顺便引上。 前期可别跟NC有啥摩擦。打你的经济就行。各种狠压经济。见到NC丢几个JN就跑。KK20多...
《星球大战:克隆战争》第六关流程攻略 开始MS还是在敌人基地 到前边开锁,没任何难度。。。。绿色部分重合就可以了 到了这边后干掉涌出来的敌人 这里也是开锁,也是没有任何难度,三处绿色部分...

经验教程

934

收藏

80
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部