简单坦克大战

幸运的燕郊置业

幸运的燕郊置业

2016-02-19 13:12

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的简单坦克大战教程,一起来看看吧!超容易上手~
今天下午赶出来的,还有很多东西要不要加进去我自己还没决定,因为有些东西以前练过了,而有些东西没练过,还有很多不足之处.
  #include graphics.h
  #include stdlib.h
  #include dos.h
  #include conio.h
  #include bios.h
  #define KEY_ESC 0x01
  #define KEY_SPACE 0x39
  #define KEY_UP 0x48
  #define KEY_LEFT 0x4b
  #define KEY_RIGHT 0x4d
  #define KEY_DOWN 0x50
  /*1石头,2砖块,3水,5老家,8玩家,9敌人*/
  int map[20][20]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                   1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
                   1,0,2,2,2,2,0,0,2,2,2,2,0,0,0,0,0,0,0,1,
     1,0,0,0,0,0,0,0,2,0,0,2,0,1,1,1,1,0,0,1,
                   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
     1,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,0,0,1,
     1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,1,
                   1,0,1,1,1,1,3,3,3,3,0,0,0,0,0,0,0,2,0,1,
                   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
                   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
                   1,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,1,
     1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,3,3,3,0,1,
                   1,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,1,
                   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
                   1,0,0,0,0,3,3,3,1,1,1,1,1,1,1,0,0,0,0,1,
                   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
                   1,0,2,2,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,
                   1,0,2,2,0,0,0,0,2,2,2,0,0,0,2,2,0,0,0,1,
                   1,0,0,0,0,0,0,8,2,5,2,0,0,0,0,0,0,0,0,1,
     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
  strUCt f
  {
   int x;
   int y;
   int direction;
  };
  struct play
  {
   int x;/*行坐标*/
   int y;/*列坐标*/
   int direction;/*方向*/
   struct f fire[5];/*5颗子弹*/
   int score;/*分数*/
  }Playone;
  struct a
  {
   int x;
   int y;
   int color;
   int direction;
   int directiontwo;/*用来判定走的路是否往返*/
   int fireplay;/*是否攻击的变量,随机生成*/
   struct f fire;
  }amy[5];/*敌人的结构体,其实可以添加不同的颜色来表示不同种类的坦克*/
  char key_state[128],key_pressed[128];
  void Init();/*图象驱动开始*/
  void End();/*图象驱动结束*/
  void DrawMap();/*画地图*/
  void DrawWater(int x,int y);/*画水*/
  void DrawBrick(int x,int y);/*画砖*/
  void DrawTone(int x,int y);/*画石头*/
  void DrawHome(int x,int y);/*画老家*/
  void DrawBlack(int x,int y);/*去除内容*/
  void DrawPlay(int x,int y);/*画玩家*/
  void DrawAmy(int x,int y,int i);/*画敌人*/
  void Score();/*输出分数*/
  void GamePlay();/*玩游戏过程*/
  void GameOver();/*游戏失败*/
  void TimeDelay(unsigned long microsec); /*延时函数 传入微秒数*/
  int GetKey(int ScanCode);/*这里开始都是按键函数*/
  void interrupt far (*OldInt9Handler)();
  void far interrupt NewInt9();
  void InstallKeyboard();
  void ShutDownKeyboard();
  void main(void)
  {
   Init();
   DrawMap();
   GamePlay();
   End();
  }
  void TimeDelay(unsigned long microsec) /*延时函数 传入微秒数*/
  {
   union REGS r;
   r.h.ah=0x86;
   r.x.cx=microsec16;
   r.x.dx=microsec;
   int86(0x15,&r,&r);
  }
  void Init()/*图象驱动开始*/
  {int gd=DETECT,gm;
   initgraph(&gd,&gm,"d:cc");
   cleardevice();
   InstallKeyboard();
  }
  void End()/*图象驱动结束*/
  {
   ShutDownKeyboard();
   closegraph();
  }
  void DrawTone(int x,int y)/*画石头*/
  {
  setfillstyle(SOLID_FILL,7);
  bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);
  }
  void DrawWater(int x,int y)/*画水*/
  {
   setfillstyle(SOLID_FILL,BLUE);
   bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);
  }
  void DrawBrick(int x,int y)/*画砖*/
  {
  setfillstyle(SOLID_FILL,6);
  bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);
  setcolor(15);
  line(100+x*20-9,50+y*20-4,100+x*20+9,50+y*20-4);
  line(100+x*20-9,50+y*20+4,100+x*20+9,50+y*20+4);
  line(100+x*20-4,50+y*20-9,100+x*20-4,50+y*20+9);
  line(100+x*20+4,50+y*20-9,100+x*20+4,50+y*20+9);
  }
  void DrawHome(int x,int y)/*画老家*/
  {
   setcolor(0);
   setfillstyle(SOLID_FILL,GREEN);
   fillellipse(100+x*20,50+y*20,9,9);
  }
  void DrawBlack(int x,int y)/*去除内容*/
  {
   setcolor(0);
   setfillstyle(SOLID_FILL,0);
   bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);
  }
  void DrawPlay(int x,int y)/*画玩家*/
  {
   setcolor(4);/*玩家为红色*/
   circle(100+x*20,50+y*20,7);
   switch(Playone.direction)/*判定玩家方向*/
   {
   case 1:line(100+x*20,50+y*20,100+x*20,50+y*20-9);break;/*上*/
   case 2:line(100+x*20,50+y*20,100+x*20+9,50+y*20);break;/*右*/
   case 3:line(100+x*20,50+y*20,100+x*20,50+y*20+9);break;/*下*/
   case 4:line(100+x*20,50+y*20,100+x*20-9,50+y*20);break;/*左*/
   }
  }
  void DrawAmy(int x,int y,int i)/*画敌人*/
  {
   if(amy[i].color==12)
   setcolor(12);
   else if(amy[i].color==13)
   setcolor(13);
   else/*这里是判定三种颜色的坦克*/
   setcolor(14);
   circle(100+x*20,50+y*20,7);
   switch(amy[i].direction)/*判定玩家方向*/
   {
   case 1:line(100+x*20,50+y*20,100+x*20,50+y*20-9);break;/*上*/
   case 2:line(100+x*20,50+y*20,100+x*20+9,50+y*20);break;/*右*/
   case 3:line(100+x*20,50+y*20,100+x*20,50+y*20+9);break;/*下*/
   case 4:line(100+x*20,50+y*20,100+x*20-9,50+y*20);break;/*左*/
   }
  }
  void Score()/*输出分数*/
  {
   char s[10];
   Playone.score+=10;
   sprintf(s,"%d",Playone.score);
   setfillstyle(SOLID_FILL,0);
   bar(550,100,640,130);
   settextstyle(0,0,2);
   setcolor(YELLOW);
   outtextxy(550,115,s);
  }
  void DrawMap()/*画地图*/
  {int i,j,k;
   for(i=0;i20;i++)
    {
    for(j=0;j20;j++)
     if(map[i][j]==1)
      DrawTone(j,i);
     else if(map[i][j]==2)
      DrawBrick(j,i);
     else if(map[i][j]==3)
      DrawWater(j,i);
     else if(map[i][j]==5)
      DrawHome(j,i);
     else if(map[i][j]==8)
      {
      Playone.x=i;
      Playone.y=j;
      Playone.direction=1;
      DrawPlay(j,i);
      for(k=0;k5;k++)
      Playone.fire[k].direction=-1;/*5颗子弹的方向都为-1,表示不存在*/
      }
     else if(map[i][j]==9)
     {
     amy[0].x=1;amy[0].y=1;amy[0].direction=amy[0].directiontwo=3;/*第一个敌人*/
     amy[
  
展开更多 50%)
分享

猜你喜欢

简单坦克大战

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

标准坦克大战攻略

电脑网络
标准坦克大战攻略

s8lol主宰符文怎么配

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

桌面坦克大战攻略

电脑网络
桌面坦克大战攻略

简单潜艇大战

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

lol偷钱流符文搭配推荐

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

HTML5实现经典坦克大战坦克乱走还能发出一个子弹

Web开发
HTML5实现经典坦克大战坦克乱走还能发出一个子弹

《坦克世界》法系坦克迷彩全面介绍

坦克世界 网络游戏
《坦克世界》法系坦克迷彩全面介绍

lolAD刺客新符文搭配推荐

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

加注解的纸条问题

加注解的纸条问题

CSS滤镜技巧:颜色渐变

CSS滤镜技巧:颜色渐变
下拉加载更多内容 ↓