```c
#include<stdlib.h>
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#define WIDTH 128
#define HEIGHT 32
#define UP 1
#define BUTTOM 2
#define RIGHT 3
#define LEFT 4
char map[HEIGHT][WIDTH+3]={{"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"},
{"^8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888^\n"},
{"^8 8^\n"},
{"^8 @@ 8^\n"},
{"^8 @@ 8^\n"},
{"^8 @@ 8^\n"},
{"^8 @@ 8^\n"},
{"^8 @@@@@@@@@ 8^\n"},
{"^8 @@ @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@@ 8^\n"},
{"^8 @@@@@@ @@ @ @@@@@@ @ 8^\n"},
{"^8 @ @ @@@@@@ @ 8^\n"},
{"^8 @ @ @ 8^\n"},
{"^8 @ @ @ 8^\n"},
{"^8 @ @ 8^\n"},
{"^8 @ @@ @ 8^\n"},
{"^8 @ @@@@ @@ @ 8^\n"},
{"^8 @ @@@@ @@ @@@@ @ 8^\n"},
{"^8 @ @@@@ @ 8^\n"},
{"^8 @ @ 8^\n"},
{"^8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ 8^\n"},
{"^8 @ @ @@@ @ @ 8^\n"},
{"^8 @ @ @@@ @ @ 8^\n"},
{"^8 @@ @ @ @@@ @ @ 8^\n"},
{"^8 @@@@ @ @ @ @@@@@@@ 8^\n"},
{"^8 @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ 8^\n"},
{"^8 8^\n"},
{"^8 8^\n"},
{"^8 8^\n"},
{"^8 8^\n"},
{"^8 8^\n"},
{"^8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888^\n"},
{"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"} };
int tanke[4][2]={{7,10},
{7,11},
{6,11},
{8,11}};
struct {
int x[4];
int y[4];
int shengmingzhi;
}diren[10];
int center[1][2] = { 6,11};
int zidan[500][3];
int zidannum = 0;
void kaishitanke(void);
void printmap(void);
int movetanke(void);
int movezidan(void);
void zidanchushihua(void);
void gameover(void);
void direnxinxichushihua(void);
void direnxianshi(void);
int main(void)
{
direnxinxichushihua();
direnxianshi();
kaishitanke();
printmap();
while(1)
{
Sleep(10);
system("cls");
if (!movetanke())
{
gameover();
return 0;
}
movezidan();
direnxianshi();
printmap();
}
return 0;
}
void kaishitanke(void)
{
int i;
for (i = 0; i < 4; i++)
map[tanke[i][1]][tanke[i][0]] = '#';
}
int movetanke(void)
{
int i=0,j=0;
if (GetAsyncKeyState('W') && map[tanke[0][1] - 2][tanke[0][0]] != '@' && map[tanke[0][1] - 1][tanke[0][0]] != '@' && map[tanke[1][1] - 1][tanke[1][0]] != '@' && map[tanke[3][1] - 1][tanke[3][0]] != '@')
{
map[tanke[0][1]][tanke[0][0]] = ' ';
map[tanke[1][1]][tanke[1][0]] = ' ';
map[tanke[2][1]][tanke[2][0]] = ' ';
map[tanke[3][1]][tanke[3][0]] = ' ';
tanke[0][1] = center[0][1]-1; tanke[0][0] = center[0][0];
tanke[1][1] = center[0][1]; tanke[1][0] = center[0][0]-1;
tanke[2][1] = center[0][1]; tanke[2][0] = center[0][0];
tanke[3][1] = center[0][1]; tanke[3][0] = center[0][0]+1;
map[tanke[0][1]][tanke[0][0]] = '#';
map[tanke[1][1]][tanke[1][0]] = '#';
map[tanke[2][1]][tanke[2][0]] = '#';
map[tanke[3][1]][tanke[3][0]] = '#';
if (GetAsyncKeyState('W'))
{
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <=0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = ' ';
tanke[i][1]--;
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH|| tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = '#';
}
}
}
center[0][1] = tanke[2][1]; center[0][0] = tanke[2][0];
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
return 1;
}
else if (GetAsyncKeyState('A') && map[tanke[0][1]][tanke[0][0] - 2] != '@' && map[tanke[0][1]][tanke[0][0]-1] != '@' && map[tanke[1][1]][tanke[1][0]-1] != '@' && map[tanke[3][1]][tanke[3][0]-1] != '@')
{
map[tanke[0][1]][tanke[0][0]] = ' ';
map[tanke[1][1]][tanke[1][0]] = ' ';
map[tanke[2][1]][tanke[2][0]] = ' ';
map[tanke[3][1]][tanke[3][0]] = ' ';
tanke[0][1] = center[0][1]; tanke[0][0] = center[0][0]-1;
tanke[1][1] = center[0][1]+1; tanke[1][0] = center[0][0];
tanke[2][1] = center[0][1]; tanke[2][0] = center[0][0];
tanke[3][1] = center[0][1]-1; tanke[3][0] = center[0][0];
map[tanke[0][1]][tanke[0][0]] = '#';
map[tanke[1][1]][tanke[1][0]] = '#';
map[tanke[2][1]][tanke[2][0]] = '#';
map[tanke[3][1]][tanke[3][0]] = '#';
if (GetAsyncKeyState('A'))
{
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = ' ';
tanke[i][0]--;
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = '#';
}
}
}
center[0][1] = tanke[2][1]; center[0][0] = tanke[2][0];
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
return 1;
}
else if (GetAsyncKeyState('S') && map[tanke[0][1] + 2][tanke[0][0]] != '@' && map[tanke[0][1] + 1][tanke[0][0]] != '@' && map[tanke[1][1] + 1][tanke[1][0]] != '@' && map[tanke[3][1] + 1][tanke[3][0]] != '@')
{
map[tanke[0][1]][tanke[0][0]] = ' ';
map[tanke[1][1]][tanke[1][0]] = ' ';
map[tanke[2][1]][tanke[2][0]] = ' ';
map[tanke[3][1]][tanke[3][0]] = ' ';
tanke[0][1] = center[0][1]+1; tanke[0][0] = center[0][0] ;
tanke[1][1] = center[0][1]; tanke[1][0] = center[0][0]+1;
tanke[2][1] = center[0][1]; tanke[2][0] = center[0][0];
tanke[3][1] = center[0][1]; tanke[3][0] = center[0][0]-1;
map[tanke[0][1]][tanke[0][0]] = '#';
map[tanke[1][1]][tanke[1][0]] = '#';
map[tanke[2][1]][tanke[2][0]] = '#';
map[tanke[3][1]][tanke[3][0]] = '#';
if (GetAsyncKeyState('S'))
{
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = ' ';
tanke[i][1]++;
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = '#';
}
}
}
center[0][1] = tanke[2][1]; center[0][0] = tanke[2][0];
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
return 1;
}
else if (GetAsyncKeyState('D') && map[tanke[0][1]][tanke[0][0] + 2] != '@' && map[tanke[0][1]][tanke[0][0] + 1] != '@' && map[tanke[1][1]][tanke[1][0] + 1] != '@' && map[tanke[3][1]][tanke[3][0] + 1] != '@')
{
map[tanke[0][1]][tanke[0][0]] = ' ';
map[tanke[1][1]][tanke[1][0]] = ' ';
map[tanke[2][1]][tanke[2][0]] = ' ';
map[tanke[3][1]][tanke[3][0]] = ' ';
tanke[0][1] = center[0][1]; tanke[0][0] = center[0][0] +1;
tanke[1][1] = center[0][1] + 1; tanke[1][0] = center[0][0];
tanke[2][1] = center[0][1]; tanke[2][0] = center[0][0];
tanke[3][1] = center[0][1] - 1; tanke[3][0] = center[0][0];
map[tanke[0][1]][tanke[0][0]] = '#';
map[tanke[1][1]][tanke[1][0]] = '#';
map[tanke[2][1]][tanke[2][0]] = '#';
map[tanke[3][1]][tanke[3][0]] = '#';
if (GetAsyncKeyState('D'))
{
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT|| tanke[i][1] <= 0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = ' ';
tanke[i][0]++;
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH|| tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
map[tanke[i][1]][tanke[i][0]] = '#';
}
}
}
center[0][1] = tanke[2][1]; center[0][0] = tanke[2][0];
if (tanke[i][0] <= 0 || tanke[i][0] >= WIDTH || tanke[i][1] >= HEIGHT || tanke[i][1] <= 0)
{
return 0;
}
return 1;
}
else
{
return 1;
}
}
void printmap(void)
{
int i=0;
for(i=0;i<HEIGHT;i++)
{
printf("%s",map[i]);
}
printf("子弹:%d\n", 499-zidannum);
printf("diren【0】=%d\n", diren[0].shengmingzhi);
}
int movezidan(void)
{
int i = 0,j=0;
if (zidannum == 499)
zidannum = 0;
if (GetAsyncKeyState(VK_SPACE))
{
if (tanke[0][0] == center[0][0]&&tanke[0][1]==center[0][1]-1)
{
zidan[zidannum][0] = center[0][0];
zidan[zidannum][1] = center[0][1] - 2;
zidan[zidannum++][2] = UP;
}
else if (tanke[0][0] == center[0][0] && tanke[0][1] == center[0][1] + 1)
{
zidan[zidannum][0] = center[0][0];
zidan[zidannum][1] = center[0][1] + 2;
zidan[zidannum++][2] = BUTTOM;
}
else if (tanke[0][0] == center[0][0] - 1 && tanke[0][1] == center[0][1])
{
zidan[zidannum][0] = center[0][0]-2;
zidan[zidannum][1] = center[0][1];
zidan[zidannum++][2] = LEFT;
}
else if (tanke[0][0] == center[0][0] + 1 && tanke[0][1] == center[0][1])
{
zidan[zidannum][0] = center[0][0] + 2;
zidan[zidannum][1] = center[0][1];
zidan[zidannum++][2] = RIGHT;
}
}
for (i = 0; i < 500; i++)
{
if (zidan[i][1] <= 0 || zidan[i][0] <= 0 || zidan[i][1] >= HEIGHT-1 || zidan[i][0] >= WIDTH )
{
zidan[i][0] = 0;
zidan[i][1] = 0;
zidan[i][2] = 0;
}
if (zidan[i][1] != 0 && zidan[i][0] != 0 && zidan[i][2] == RIGHT)
{
if (map[zidan[i][1]][zidan[i][0] + 1] == '@')
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][0] = 0;
zidan[i][1] = 0;
zidan[i][2] = 0;
}
else
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][0]++;
map[zidan[i][1]][zidan[i][0]] = ':';
}
}
else if (zidan[i][1] != 0 && zidan[i][0] != 0 && zidan[i][2] == LEFT)
{
if (map[zidan[i][1]][zidan[i][0] - 1] == '@')
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][0] = 0;
zidan[i][1] = 0;
zidan[i][2] = 0;
}
else if (map[zidan[i][1]][zidan[i][0]-1] == map[diren[0].y[3]][diren[0].x[3]])
{
diren[0].shengmingzhi--;
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][0] = 0;
zidan[i][1] = 0;
zidan[i][2] = 0;
}
else
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][0]--;
map[zidan[i][1]][zidan[i][0]] = ':';
}
}
else if (zidan[i][1] != 0 && zidan[i][0] != 0 && zidan[i][2] == UP)
{
if (map[zidan[i][1] - 1][zidan[i][0]] == '@')
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][0] = 0;
zidan[i][1] = 0;
zidan[i][2] = 0;
}
else
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][1]--;
map[zidan[i][1]][zidan[i][0]] = ':';
}
}
else if (zidan[i][1] != 0 && zidan[i][0] != 0 && zidan[i][2] == BUTTOM)
{
if (map[zidan[i][1] + 1][zidan[i][0]] == '@')
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][0] = 0;
zidan[i][1] = 0;
zidan[i][2] = 0;
}
else
{
map[zidan[i][1]][zidan[i][0]] = ' ';
zidan[i][1]++;
map[zidan[i][1]][zidan[i][0]] = ':';
}
}
}
return 1;
}
void zidanchushihua(void)
{
int i = 0;
for (i = 0; i < 500; i++)
{
zidan[i][0] = 0;
zidan[i][1] = 0;
zidan[i][2] = 0;
}
}
void gameover(void)
{
printf("GAME OVER!\n");
}
void direnxinxichushihua(void)
{
int i=0;
while (1)
{
diren[i++].shengmingzhi = 0;
if (i >= 10)
break;
}
diren[0].shengmingzhi = 10;
diren[0].x[0] =6 ; diren[0].y[0] = 2;
diren[1].x[0] =5 ; diren[1].y[0] = 3;
diren[2].x[0] =6; diren[2].y[0] = 3;
diren[3].x[0] =7; diren[3].y[0] = 3;
}
void direnxianshi(void)
{
int i = 0;
if (diren[0].shengmingzhi <= 0)
{
map[diren[0].y[0]][diren[0].x[0]] = ' ';
map[diren[1].y[0]][diren[1].x[0]] = ' ';
map[diren[2].y[0]][diren[2].x[0]] = ' ';
map[diren[3].y[0]][diren[3].x[0]] = ' ';
}
else
{
map[diren[0].y[0]][diren[0].x[0]] = 'E';
map[diren[1].y[0]][diren[1].x[0]] = 'E';
map[diren[2].y[0]][diren[2].x[0]] = 'E';
map[diren[3].y[0]][diren[3].x[0]] = 'E';
}
}