龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

简单坦克大战

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
今天下午赶出来的,还有很多东西要不要加进去我自己还没决定,因为有些东西以前练过了,而有些东西没练过,还有很多不足之处. #include #include #include #include #include #define KEY_ESC 0x01 #d

今天下午赶出来的,还有很多东西要不要加进去我自己还没决定,因为有些东西以前练过了,而有些东西没练过,还有很多不足之处.

  #include

  #include

  #include

  #include

  #include

  #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=microsec>>16;

   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;i<20;i++)

   {

   for(j=0;j<20;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;k<5;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[

  

  

精彩图集

赞助商链接