⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tank041.c

📁 通过c语言编写的坦克大战游戏
💻 C
📖 第 1 页 / 共 5 页
字号:

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


 for(n=0;n<15;n++)   /*降落伞*/
    {
     JIANG_LUO_SAN[n].LIVE=0;
     JIANG_LUO_SAN[n].x=0;              /*当前坐标X*/
     JIANG_LUO_SAN[n].y=0;              /*当前坐标Y*/


     JIANG_LUO_SAN[n].nonce_fram=1;   /*当前帧号*/
     JIANG_LUO_SAN[n].fram_time=0;    /*每帧记时*/
     JIANG_LUO_SAN[n].fram_MAX_time=6;

     JIANG_LUO_SAN[n].MAX_fram=16;  /*最大帧数*/



     JIANG_LUO_SAN[n].kind=0;

    }


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
 /*飞机初始化*/

 for(n=0;n<3;n++)
 {
  PLANE[n].LIVE=0;
  PLANE[n].x=0;
  PLANE[n].y=0;


 PLANE[n].BOMB_XROF=4;
 PLANE[n].BOMB_XROF_MAX_TIME=4;

 PLANE[n].BOMB_FIRE=0;
 PLANE[n].BOMB_N=0;


 PLANE[n].BOMB_X=0;
 PLANE[n].BOMB_Y=0;
 PLANE[n].BOMB_kind=0;

 PLANE[n].kind=0;

 }


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

 /*初始化箱子*/

for(n=0;n<3;n++)
 {
  GOODS_BOX[n].LIVE=0;
  GOODS_BOX[n].x=0;
  GOODS_BOX[n].y=0;
  GOODS_BOX[n].MAP_A=0;
  GOODS_BOX[n].MAP_B=0;
  GOODS_BOX[n].kind=0;

 }


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

 camera_update(PLAYER[0].X1,PLAYER[0].Y1);  /* 设置相机位置 */

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/




  /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

  /*初始化玩家*/

 for(n=0;n<NPC_max_num;n++)   /*初始化玩家*/
    {
     PLAYER[n].LIVE=0;
    }

 /*-----------------*/



 /*player*/
 PLAYER[0].kind=1; INIT_PLAYER_ID(0,1);   INIT_PLAYER(0); /*初始化 其他属性*/


 /*建筑物*/
 PLAYER[1].kind=1; INIT_PLAYER_ID(1,10);  INIT_PLAYER(1); /*初始化 其他属性*/











     /*-----------------*/
     /*玩家*/
     PLAYER[0].LIVE=1;

     PLAYER[0].MAP_B=14;
     PLAYER[0].MAP_A=16;

     PLAYER[0].X1=MAP_X0+PLAYER[0].MAP_B*32+15;
     PLAYER[0].Y1=MAP_Y0+PLAYER[0].MAP_A*32+15;

     PLAYER[0].X0=PLAYER[0].X1;
     PLAYER[0].Y0=PLAYER[0].Y1;

     PLAYER[0].angle[1]=PLAYER[0].angle[0];

     PLAYER[0].o_angle[1]=PLAYER[0].angle[1];






     /*-----------------*/


     /*-----------------*/
     /*玩家的建筑物*/
     PLAYER[1].LIVE=1;

     PLAYER[1].MAP_B=14;
     PLAYER[1].MAP_A=14;

     PLAYER[1].X1=MAP_X0+PLAYER[1].MAP_B*32+15;
     PLAYER[1].Y1=MAP_Y0+PLAYER[1].MAP_A*32+15;

     PLAYER[1].X0=PLAYER[1].X1;
     PLAYER[1].Y0=PLAYER[1].Y1;

     PLAYER[1].angle[0]=0; PLAYER[1].o_angle[0]=0;
     PLAYER[1].angle[1]=PLAYER[1].angle[0];

     PLAYER[1].o_angle[1]=PLAYER[1].angle[1];






/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/




  position_mouse(361, 321);


 A_BOMB_LIVE=0;

TimeM=GAME_MAX_TIME_M;     /*时间 分*/
TimeS=0;     /*时间 秒*/


alert01x=0;   /*警告声音防止重复*/
alert02x=0;

 /*NPC复活的间隔时间*/
 PLAYER_RISE_TIME=5;  PLAYER_RISE=0; /*玩家*/

 ENEMY_RISE_TIME=5;  ENEMY_RISE=0;  /*敌人*/

 FRIEND_RISE_TIME=5 ; FRIEND_RISE=0;  /*朋友*/


 ENEMY_N=0; FRIEND_N=0; /*记录数量*/

 adage_N=0; /*格言编号*/

 V=0;  /*增援信号*/

 WIN=0;  /**/

END=0;

 WAIT_GAME_EXIT=0;  /*任务结束 等待退出游戏*/
 WAIT_GAME_EXIT_TIME=10;

 EXIT_MISSION_SOUND=0; /*任务结束声音 开关*/

 PLAYER_KILL=0;
 PLAYER_DEAD=0;/*玩家死亡次数*/


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


image_01 = create_bitmap(SCREEN_W, SCREEN_H); /*建立图位*/
  rectfill(image_01,0,0,639,479,BLACK);

play_sample(start_music, 255, pan, pitch, TRUE); /*循环播放开始音乐*/

while(1)
{

 if(key[KEY_ENTER]){
                    break;
                   }

 if(key[KEY_ESC]){
                    goto EXIT_GAME;
                 }



 /*----------------------------*/

if (mouse_b == 1) /*左键按下*/
   {
      mb=1; /*左键按过了*/

   }



if (mouse_b == 0)
   {

     if(mb==1)/*左键按过*/
       {
         if(mouse_x>=293 && mouse_x<=344  && mouse_y>=251 && mouse_y<=303 )
         { 
          mb=0;

          play_sample(start_sound, 255, pan, pitch, FALSE);

          break;
         }

         mb=0;
       }

   }





 /*----------------------------*/

/*画封面*/




  draw_sprite (buffer, bmp,100,100); /*logo*/
 draw_sprite (buffer, COVER,0,0); /*画封面*/


 textout_ex(buffer, font,"VER 0.41", 569+1,461+1, BLACK,-1); /*显示版本*/
 textout_ex(buffer, font,"VER 0.41", 569,461, LIGHTGRAY,-1);




         if(mouse_x>=293 && mouse_x<=344  && mouse_y>=251 && mouse_y<=303 )
         { 
           alphaimage(291,248,COVER_YUAN,200);
         }







     draw_sprite (buffer, bmp_mouse ,mouse_x-8,mouse_y-8);  /*显示鼠标*/


 blit(buffer, screen, 0,0, 0,0,SCREEN_W, SCREEN_H); /*双缓冲图位输出到屏幕*/

}







 for(n=0;n<=255;n+=15)
 {
   draw_sprite (buffer, COVER,0,0); /*画封面*/

  alphaimage(0,0,image_01,n);

  blit(buffer, screen, 0,0, 0,0,SCREEN_W, SCREEN_H); /*双缓冲图位输出到屏幕*/

  rest(60);

 }





  rectfill(image_01,0,0,639,479,WHITE); /*白屏 为以后原子弹做闪屏效果*/


 stop_sample(start_music);

 position_mouse(280, 240);

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

 /*大循环开始*/


 while(END!=1)
{


      if(WAIT_GAME_EXIT==1 && WAIT_GAME_EXIT_TIME==7) /*任务结束报告 发声 */
      {
       if(EXIT_MISSION_SOUND==0)
         {
          if(WIN==1) /*女声 MISSION COMPLETED*/
            {
             play_sample(win_sound, 255, pan, pitch, FALSE);
            }

          else        /*女声 MISSION FAILED*/
            {
             play_sample(failed_sound, 255, pan, pitch, FALSE);
            }



          EXIT_MISSION_SOUND=1;   /*不再出现*/
         }

      }







      if(TimeM==0&&TimeS==0)  /*游戏时间到了 准备退出*/
        {


         WAIT_GAME_EXIT=1;

         if(PLAYER[1].LIVE==1)
         WIN=1; /*核设施存在 胜利*/


        }






      if(TimeM<GAME_MAX_TIME_M && TimeS==56) /*女声 警告敌人逼近*/
        {
         if(alert02x==0)
         {
          play_sample(alert02_sound, 255, pan, pitch, FALSE);
          alert02x=1;
         }

        }

      if(TimeM<GAME_MAX_TIME_M && TimeS==54) /*拉响警报*/
        {
         if(alert01x==0)
         {
          play_sample(alert01_sound, 255, pan, pitch, FALSE);
          alert01x=1;
         }

        }







    /*最后一分钟飞机投放信号弹增援出现*/

      if(TimeM==1&&TimeS==10)
        {
              if(PLANE[2].LIVE==0)   /*初始化飞机*/
                {
                 INIT_PLANE(2,15 *32+15,16 *32+15+10, 1, 3,1);  /*初始化飞机*/

                }

        }






/*时间中断处理*/
if(TimeDelayUnit(1.0)){


                       if(TimeM>=0) /*记时 减秒*/
                       {
                       TimeS--;
                       if(TimeS<0) { TimeS=59; TimeM--; }  /*IF满60秒为1分钟*/
                                               if(TimeM<0) { TimeM=0; TimeS=0; } /*补丁*/

                       }



                       if(PLAYER[0].LIVE==0)
                       {
                        PLAYER_RISE_TIME--; /*玩家等待 复活*/
                        if(PLAYER_RISE_TIME<=0) { PLAYER_RISE=1; }
                       }


                       if(V==0 && ENEMY_N < ENEMY_SUM)
                       {
                        ENEMY_RISE_TIME--; /*敌人等待 复活*/
                        if(ENEMY_RISE_TIME<=0) { ENEMY_RISE=1; }
                       }


                       if(V==1 && FRIEND_N < FRIEND_SUM)
                       {
                        FRIEND_RISE_TIME--; /*朋友等待 复活*/
                        if(FRIEND_RISE_TIME<=0) { FRIEND_RISE=1; }
                       }




                  if(WAIT_GAME_EXIT==1)
                    {

                     WAIT_GAME_EXIT_TIME--;
                     if(WAIT_GAME_EXIT_TIME<=0) END=1;


                    }





                      }




/*++++++++++++++++++++++++子弹飞行++++++++++++++++++++++++++++*/


/*玩家的子弹*/


       for(n=0;n<BB_max_num;n++)
          {
           if(BB[n].RUN==1)
             {


              /*------------------------*/
                /*子弹移动*/



                 MOVE_TO3(BB[n].oa,&BB[n].PX,&BB[n].PY,BB[n].Speed); /*移动*/



              /*------------------------*/



              if(DZ(BB[n].PX,BB[n].PY,BB[n].opx,BB[n].opy)<= BB[n].Speed+1 ) /*子弹接近目标点*/

                         {   /*子弹 消失*/
                           BB[n].RUN=0;
                           BB[n].PX=BB[n].opx;
                           BB[n].PY=BB[n].opy;




  INIT_A_BAO(BB[n].PX,BB[n].PY,BB[n].weapon_number);  /* 初始化一个爆炸 坐标X,坐标Y,武器编号*/


                for(i=0;i< NPC_max_num ;i++)  /*计算伤害*/
                 {
                  if(PLAYER[i].LIVE==1)
                    {
                     if(DZ(BB[n].PX,BB[n].PY,PLAYER[i].X1,PLAYER[i].Y1)<=weapon[BB[n].weapon_number].Bao_range)/*杀伤范围*/
                           /*IF在杀伤范围内*/
                       {

                       MAX_Damage= weapon[ BB[n].weapon_number ] . MAX_Damage[  PLAYER[i].Armor  ] ; /*最大杀伤值*/
                       MIN_Damage= weapon[ BB[n].weapon_number ] . MIN_Damage[  PLAYER[i].Armor  ] ; /*最小杀伤值*/

                       PLAYER[i].HP -= Xrand( MIN_Damage , MAX_Damage ); /*随机计算伤害*/

                       if(PLAYER[i].HP<=0 )
                         {
                          if(PLAYER[i].kind!=PLAYER[ BB[n].NPC_number ].kind)
                            {
                             PLAYER[ BB[n].NPC_number ].kill++;

                             if(BB[n].NPC_number==0) PLAYER_KILL++;

                            }

                         }


                       }


                    }


                 }





                          }  /*if子弹接近目标点*/














             }


          }







/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

 for(n=0;n<BAO_max_num;n++)   /*爆炸处理*/
    {
     if(BAO[n].LIVE==1)
       {
        BAO[n].fram_time--;
        if(BAO[n].fram_time<=0)
          {


           if(BAO[n].nonce_fram==1) /*爆炸第一帧 触发事件*/
             {
              if(BAO[n].Bao_number==4)  play_sample(BAO_SOUND_04, 255, pan, pitch, FALSE); /*爆炸4声音*/

              else if(BAO[n].Bao_number==5)  play_sample(BAO_SOUND_05, 255, pan, pitch, FALSE); /*爆炸5声音*/

              else if(BAO[n].Bao_number==6)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -