坦克大战雏形


```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';
	}
}














发布了26 篇原创文章 · 获赞 0 · 访问量 91

猜你喜欢

转载自blog.csdn.net/qq_45812941/article/details/104413322