WEB开发网
开发学院软件开发C++ 简单坦克大战 阅读

简单坦克大战

 2008-03-08 12:43:44 来源:WEB开发网   
核心提示:今天下午赶出来的,还有很多东西要不要加进去我自己还没决定,因为有些东西以前练过了,简单坦克大战,而有些东西没练过,还有很多不足之处.#include <graphics.h>#include <stdlib.h>#include <dos.h>#include <conio.h
今天下午赶出来的,还有很多东西要不要加进去我自己还没决定,因为有些东西以前练过了,而有些东西没练过,还有很多不足之处.
#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=microsec>>16;
 r.x.dx=microsec;
 int86(0x15,&r,&r);
}
void Init()/*图象驱动开始*/
{int gd=DETECT,gm;
 initgraph(&gd,&gm,"d:\\tc\\tc");
 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[

Tags:简单 坦克 大战

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接