基本信息
源码名称:c++ 坦克大战 小游戏源码(tc库)
源码大小:0.01M
文件格式:.cpp
开发语言:C/C++
更新时间:2018-04-07
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

#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

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];
	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, "C:\\TC20\\BGI");
	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;
		}
		else if (map[i][j] == 9)
		{
			amy[0].x = 1; amy[0].y = 1; amy[0].direction = amy[0].directiontwo = 3;
			amy[0].color = 12;
			DrawAmy(j, i, 0);
		}
	}
	for (i = 1; i<5; i  )
		amy[i].direction = amy[i].fire.direction = -1;
	outtextxy(210, 450, "Edit By www.dotcpp.com");
	settextstyle(0, 0, 2);
	setcolor(9);
	outtextxy(525, 80, "Score");
	setcolor(YELLOW);
	outtextxy(550, 115, "0");
}
void far interrupt NewInt9(void)
{
	unsigned char ScanCode, temp;
	ScanCode = inportb(0x60);
	temp = inportb(0x61);
	outportb(0x61, temp | 0x80);
	outportb(0x61, temp & 0x7f);
	if (ScanCode & 0x80)
	{
		ScanCode &= 0x7f;
		key_state[ScanCode] = 0;
	}
	else
	{
		key_state[ScanCode] = 1;
		key_pressed[ScanCode] = 1;
	}
	outportb(0x20, 0x20);
}

void InstallKeyboard(void)
{
	int i;
	for (i = 0; i<128; i  )
		key_state[i] = key_pressed[i] = 0;
	OldInt9Handler = getvect(9);
	setvect(9, NewInt9);
}

void ShutDownKeyboard(void)
{
	setvect(9, OldInt9Handler);
}

int GetKey(int ScanCode)
{
	int res;
	res = key_state[ScanCode] | key_pressed[ScanCode];
	key_pressed[ScanCode] = 0;
	return res;
}
void GameOver()
{
	setcolor(0);
	setfillstyle(SOLID_FILL, 0);
	fillellipse(100   9 * 20, 50   18 * 20, 9, 9);
	nosound();
	setcolor(RED);
	settextstyle(0, 0, 4);
	outtextxy(150, 5, "GAME OVER");
	while (1)
	{
		if (GetKey(KEY_ESC))
			break;
	}
}
void GamePlay()
{
	int i, j, lose = 0;
	int t = 0;
	randomize();
	while (1)
	{
		for (i = 0; i<5; i  )
		{
			if (amy[i].fire.direction>0)
				putpixel(100   amy[i].fire.y * 20, 50   amy[i].fire.x * 20, 11);
		}
		for (i = 0; i <= 4; i  )
		{
			if (Playone.fire[i].direction>0)
				putpixel(100   Playone.fire[i].y * 20, 50   Playone.fire[i].x * 20, 11);
		}
		TimeDelay(500000);
		for (i = 0; i<5; i  )
		{
			if (amy[i].fire.direction>0)
				putpixel(100   amy[i].fire.y * 20, 50   amy[i].fire.x * 20, 0);
		}
		for (i = 0; i <= 4; i  )
		{
			if (Playone.fire[i].direction>0)
				putpixel(100   Playone.fire[i].y * 20, 50   Playone.fire[i].x * 20, 0);
		}
		for (i = 0; i <= 4; i  )
		{
			if (Playone.fire[i].direction<0)
				continue;
			if (Playone.fire[i].direction == 1)
			{
				Playone.fire[i].x--; Playone.fire[i].y = Playone.fire[i].y;
			}
			else if (Playone.fire[i].direction == 2)
			{
				Playone.fire[i].y  ; Playone.fire[i].y = Playone.fire[i].y;
			}
			else if (Playone.fire[i].direction == 3)
			{
				Playone.fire[i].x  ; Playone.fire[i].y = Playone.fire[i].y;
			}
			else if (Playone.fire[i].direction == 4)
			{
				Playone.fire[i].y--; Playone.fire[i].y = Playone.fire[i].y;
			}

			if (map[Playone.fire[i].x][Playone.fire[i].y] == 1)
				Playone.fire[i].direction = -1;
			if (map[Playone.fire[i].x][Playone.fire[i].y] == 2)
			{
				Playone.fire[i].direction = -1;
				DrawBlack(Playone.fire[i].y, Playone.fire[i].x);
				map[Playone.fire[i].x][Playone.fire[i].y] = 0;
			}
			if (map[Playone.fire[i].x][Playone.fire[i].y] == 5)
			{
				lose = 1; break;
			}
			for (j = 0; j<5; j  )
			{
				if (amy[j].direction<0)
					continue;
				if (amy[j].x == Playone.fire[i].x&&amy[j].y == Playone.fire[i].y)
				{
					Playone.fire[i].direction = -1;
					DrawBlack(Playone.fire[i].y, Playone.fire[i].x);
					map[Playone.fire[i].x][Playone.fire[i].y] = 0;
					amy[j].fire.direction = amy[j].direction = -1;
					Score();
				}
			}
		}
		for (i = 0; i<5; i  )
		{
			if (amy[i].direction<0 || amy[i].fire.direction<0)
				continue;
			if (amy[i].fire.direction == 1)
			{
				amy[i].fire.x--; amy[i].fire.y = amy[i].fire.y;
			}
			else if (amy[i].fire.direction == 2)
			{
				amy[i].fire.y  ; amy[i].fire.x = amy[i].fire.x;
			}
			else if (amy[i].fire.direction == 3)
			{
				amy[i].fire.x  ; amy[i].fire.y = amy[i].fire.y;
			}
			else if (amy[i].fire.direction == 4)
			{
				amy[i].fire.y--; amy[i].fire.x = amy[i].fire.x;
			}

			if (map[amy[i].fire.x][amy[i].fire.y] == 1)
				amy[i].fire.direction = -1;
			if (map[amy[i].fire.x][amy[i].fire.y] == 2)
			{
				amy[i].fire.direction = -1;
				DrawBlack(amy[i].fire.y, amy[i].fire.x);
				map[amy[i].fire.x][amy[i].fire.y] = 0;
			}
			if (map[amy[i].fire.x][amy[i].fire.y] == 5)
			{
				lose = 1; break;
			}
			if (amy[i].fire.x == Playone.x&&amy[i].fire.y == Playone.y)
			{
				for (j = 0; j<5; j  )
					Playone.fire[j].direction = -1;
				amy[i].fire.direction = -1;
				DrawBlack(amy[i].fire.y, amy[i].fire.x);
				map[amy[i].fire.x][amy[i].fire.y] = 0;
				lose = 1; break;
			}
		}
		nosound();
		for (i = 0; i<5; i  )
		{
			if (amy[i].direction<0)
				continue;
			while (1)
			{
				amy[i].directiontwo = random(4)   1;
				if (amy[i].direction == 1 && amy[i].directiontwo == 3)
					continue;
				if (amy[i].direction == 3 && amy[i].directiontwo == 1)
					continue;
				if (amy[i].direction == 2 && amy[i].directiontwo == 4)
					continue;
				if (amy[i].direction == 4 && amy[i].directiontwo == 2)
					continue;
				if (amy[i].directiontwo == 3 && (map[amy[i].x   1][amy[i].y] == 3 || map[amy[i].x   1][amy[i].y] == 1 || map[amy[i].x   1][amy[i].y] == 2))
					continue;
				if (amy[i].directiontwo == 1 && (map[amy[i].x - 1][amy[i].y] == 3 || map[amy[i].x - 1][amy[i].y] == 1 || map[amy[i].x - 1][amy[i].y] == 2))
					continue;
				if (amy[i].directiontwo == 2 && (map[amy[i].x][amy[i].y   1] == 3 || map[amy[i].x][amy[i].y   1] == 1 || map[amy[i].x][amy[i].y   1] == 2))
					continue;
				if (amy[i].directiontwo == 4 && (map[amy[i].x][amy[i].y - 1] == 3 || map[amy[i].x][amy[i].y - 1] == 1 || map[amy[i].x][amy[i].y - 1] == 2))
					continue;
				DrawBlack(amy[i].y, amy[i].x);
				amy[i].direction = amy[i].directiontwo;
				if (amy[i].direction == 1)
				{
					amy[i].x--; amy[i].y = amy[i].y;
				}
				if (amy[i].direction == 3)
				{
					amy[i].x  ; amy[i].y = amy[i].y;
				}
				if (amy[i].direction == 2)
				{
					amy[i].y  ; amy[i].x = amy[i].x;
				}
				if (amy[i].direction == 4)
				{
					amy[i].y--; amy[i].x = amy[i].x;
				}
				if (amy[i].x == Playone.x&&amy[i].y == Playone.y)
					lose = 1;
				if (map[amy[i].x][amy[i].y] == 5)
					lose = 1;
				DrawAmy(amy[i].y, amy[i].x, i);
				if (amy[i].fire.direction<0)
					amy[i].fireplay = random(4);
				if (amy[i].fireplay == 1 && amy[i].fire.direction<0)
				{
					amy[i].fire.direction = amy[i].direction;
					amy[i].fire.x = amy[i].x;
					amy[i].fire.y = amy[i].y;
				}
				break;
			}
		}
		if (lose)
		{
			GameOver(); break;
		}
		if (GetKey(KEY_ESC))
			break;
		if (GetKey(KEY_UP))
		{
			if (Playone.direction == 1 && map[Playone.x - 1][Playone.y] != 1 && map[Playone.x - 1][Playone.y] != 2)
			{
				if (map[Playone.x - 1][Playone.y] == 3)
					continue;
				DrawBlack(Playone.y, Playone.x);
				Playone.x--;
				Playone.direction = 1;
				DrawPlay(Playone.y, Playone.x);
			}
			else
			{
				DrawBlack(Playone.y, Playone.x);
				Playone.direction = 1;
				DrawPlay(Playone.y, Playone.x);
			}
		}
		else if (GetKey(KEY_DOWN))
		{
			if (Playone.direction == 3 && map[Playone.x   1][Playone.y] != 1 && map[Playone.x   1][Playone.y] != 2)
			{
				if (map[Playone.x   1][Playone.y] == 3)
					continue;
				DrawBlack(Playone.y, Playone.x);
				Playone.x  ;
				Playone.direction = 3;
				DrawPlay(Playone.y, Playone.x);
			}
			else
			{
				DrawBlack(Playone.y, Playone.x);
				Playone.direction = 3;
				DrawPlay(Playone.y, Playone.x);
			}
		}
		if (GetKey(KEY_RIGHT))
		{
			if (Playone.direction == 2 && map[Playone.x][Playone.y   1] != 1 && map[Playone.x][Playone.y   1] != 2)
			{
				if (map[Playone.x][Playone.y   1] == 3)
					continue;
				DrawBlack(Playone.y, Playone.x);
				Playone.y  ;
				Playone.direction = 2;
				DrawPlay(Playone.y, Playone.x);
			}
			else
			{
				DrawBlack(Playone.y, Playone.x);
				Playone.direction = 2;
				DrawPlay(Playone.y, Playone.x);
			}
		}
		if (GetKey(KEY_LEFT))
		{
			if (Playone.direction == 4 && map[Playone.x][Playone.y - 1] != 1 && map[Playone.x][Playone.y - 1] != 2)
			{
				if (map[Playone.x][Playone.y - 1] == 3)
					continue;
				DrawBlack(Playone.y, Playone.x);
				Playone.y--;
				Playone.direction = 4;
				DrawPlay(Playone.y, Playone.x);
			}
			else
			{
				DrawBlack(Playone.y, Playone.x);
				Playone.direction = 4;
				DrawPlay(Playone.y, Playone.x);
			}
		}
		if (GetKey(KEY_SPACE))
		{
			for (i = 0; i<5; i  )
			if (Playone.fire[i].direction<0)
			{
				sound(300);
				Playone.fire[i].direction = Playone.direction;
				Playone.fire[i].x = Playone.x;
				Playone.fire[i].y = Playone.y;
				break;
			}
		}
		if (map[Playone.x][Playone.y] == 5)
			lose = 1;
		for (i = 0; i<5; i  )
		{
			if (amy[i].direction<0)
				continue;
			if (amy[i].x == Playone.x&&amy[i].y == Playone.y)
				lose = 1;
		}
		if (lose)
		{
			GameOver(); break;
		}
		t  ;
		if (t == 30)
		{
			t = 0;
			for (i = 0; i<5; i  )
			if (amy[i].direction<0)
			{
				amy[i].direction = amy[i].directiontwo = 3;
				amy[i].x = 1;
				amy[i].y = random(3);
				if (amy[i].y == 0)
					amy[i].y = 1;
				else if (amy[i].y == 1)
					amy[i].y = 9;
				else
					amy[i].y = 18;
				amy[i].color = random(3)   12;
				DrawAmy(amy[i].y, amy[i].x, i);
				break;
			}
		}
	}
}