简单潜艇大战

2016-02-19 13:11 6 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
  

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

延伸阅读
标签: 法国面包 奶油
秘制熏肉 1.将鸡腿鸡爪洗净,放到开水锅里焯一下去掉血水捞出备。 2.砂锅加水烧开后加入焯好的鸡腿鸡爪,加入葱、姜、花椒、大料、料酒等所有调味料一起煮30分钟左右,煮到用筷子能轻松将鸡腿戳透时将鸡腿等取出。 3.取4张面巾纸,每一张纸折叠两次,叠放在无油无水干净的蒸锅底部。在面巾纸上均匀地洒上茶叶和糖(茶和糖的比例是1:1)...
学习做菜其实并不难,植树物大战僵尸从准备到做好大约,今天为大家要推荐的是2019植树物大战僵尸最正宗的做法教程,超简单又好吃的做法。 星球大战翻糖蛋糕(6寸海绵蛋糕体) 主料 低筋粉180克;玉米油60克;牛奶80克;鸡蛋5个;白糖120g;黄油100g;糖粉100g;翻糖膏适量;干佩斯适量; ...
标签: 法国面包 奶油
龙井茶熏肉 1、把卤汁材料入锅煮滚,改用小火煮30分钟。 2、加入肉块煮10分钟,取出沥干,切片。 3、铺一张锡纸在锅内,加入熏料拌匀。 4、放入架子,排上肉片(肉片不可重叠),盖着煮至冒出白烟,关火焗5分钟。 5、取出刷上一层薄油即可。 小诀窍 1、肉片刷上一层油,可避免表面过干,鸡肉即可免此步骤。 2、锅里冒出白烟就要...
标签: 法国面包 咖喱
咖哩雞 1. 雞件用醃料拌勻。 2. 洋蔥切碎片、番茄切丁、切蒜泥。 3. 下油後加少許牛油,炒洋蔥至透明加入番茄,下鹽、少許水,略煮,盛起。 4. 下油後加少許牛油,炒蒜泥,爆炒雞件後加入洋蔥與番茄,倒下鮮奶及調味煮10分鐘後加入椰奶稍煮,完成盛起。 小诀窍 牛油炒蒜泥容易過火,倒下蒜泥後馬上關火,放下洋蔥後重新開火。 咖...
标签: 法国面包 咖喱
咖哩释迦 1.将释迦略为沖先后,剥开取果肉、去籽;苹果去皮切片;青椒、洋葱切末备用。 2.热油锅,爆香洋葱、青椒、咖哩粉,加入猪肉片略炒,再放入高汤煮滚后,陆续放入释迦、苹果、太白粉水、酒、盐、牛奶煮呈浓稠状即可。 咖哩雞 1. 雞件用醃料拌勻。 2. 洋蔥切碎片、番茄切丁、切蒜泥。 3. 下油後加少許牛油,炒洋蔥至透明加入...

经验教程

425

收藏

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