坦克大战雏形
作者:互联网
```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表示
}diren[10];
//////////////////////////////坦克初始位置初始化
int center[1][2] = { 6,11};//坦克的中心坐标初始化
int zidan[500][3];//定义子弹数组
int zidannum = 0;//子弹计数器,表示如果发射子弹,用那个zidan数组表示这个子弹
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;
////for (i = 0; i < 10; i++)
////{
// if (diren[i].shengmingzhi > 0)
// {
// 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';
// }
//
////}
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';
}
}
acoollucky
发布了27 篇原创文章 · 获赞 0 · 访问量 102
私信
关注
标签:tanke,map,int,void,雏形,大战,diren,坦克,zidan 来源: https://blog.csdn.net/qq_45812941/article/details/104413322