c++坦克大战

#include<Windows.h>
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"Msimg32.lib")
#include<time.h>
#include<fstream>
#include<string>
#include<list>
#include<math.h>
/*********/
#include "process.h"
#include "winsock.h"
#include "string.h"



#define MAX_LOADSTRING 100

#pragma comment(lib,"Msimg32.lib")
#pragma comment(lib,"ws2_32.lib")

//*********************************************
#define Max_Player 2		//最多玩家个数
//服务器发送给客户端
#define Msg_GameBegin	1
#define Msg_Info		2
#define Msg_GameEnd		3
//客户端到服务器
#define Msg_Move		4			//移动         初始X Y 已知 
#define Msg_Tag_UP  5
#define Msg_Tag_DOWN 8
#define Msg_Tag_LEFT  7
#define Msg_Tag_RIGHT 6
// { 0, 3, 2, 1 };	
#define Msg_Stop   9
void DrawThread(void* param);
void DrawAll();
void ConnectServer();
void OnKeyUp(WPARAM wParam);
//void MusicThread(void* param);

HWND g_hWnd;

SOCKET g_sock;

int Speech[2] = { 5, 5 };//速度
int Winner = -1;

wchar_t g_strTip[100] = { 0 };	//提示信息
int code = -1;
/****************************/
using namespace std;
#define WINDOW_WIDTH 1200
#define WINDOW_HEIGHT 760
#define CHERK_S		4		//关卡总数
#define BULLETS_  10										//子弹数
#define HEADP_V       5								//头像运动速度
#define MAP_WIDTH 30									//地图宽
#define MAP_HEIGHT 19								//地图高
#define G_TANKSPEED 5								//坦克速度
#define G_ASPEED 0						//额外的移动速度
#define G_TANKBULLETCD 3							//坦克攻击CD
#define TANKSIZE   40										//坦克大小
#define BULLETSPEED   13								//子弹速度
#define BULLETPOWER 2								//后坐力
#define PLAYER_S		2				//玩家数量
#define ENEMY_S   2								//敌人数量
#define ENEMY1_S  1									//同
#define POINT_2_ENEMY_S      7
#define POINT_2_ENEMY1_S    5
#define BULLET_EXPLAST 10			//子弹爆炸粒子持续时间
#define BULLET_EXP_S  30				//子弹爆炸粒子个数
#define BULLET_EXP_V  15 //		粒子爆炸的速度
#define CAODI  1   //草地
#define LUDI   0		//空路
#define TU  2		//土墙
#define TIE 3   //铁墙
#define BASE 9
#define WEATHER_NUMBER 50		//天气粒子个数
#define ENEMY_BULLETCD		5						//敌人子弹cd
#define BLOCK_SIZE  40							//墙的大小
#define DETECTION_LEVEL			6			//     检测与墙相撞的级别 越低要求越高  不得小于0
#define BULLET_DETECTION_LE  10   //子弹碰撞检测 越大 越靠近坦克中心
#define ENEMY_MOVEHOLD 20					//敌人持续向一个方向移动时间
#define TEXT_X         500  //杀敌显示文字的X坐标
#define POINT_1_F        "image\\level"     //关卡保存文件名
#define PLAYER_POINET_F  "image\\Playerdata"		//双人对抗		玩家进度保存文件名
#define PLAYER_SAVE_MAP "image\\PlayerMap"
#define PLAYER_SELF_MAP "image\\SelfMap"
#define PLAYER_VS_PLAYER "image\\PlayerVsPlayer"				//玩家对抗战
#define P_P_GAME            "image\\PPGame"			//碰碰车
#define PLAYER_SPEECH_F  "image\\speechgame"
#define SURIVE_GAME      "image\\Surivetext"       //求生考验
#define RUNNINGTANKER_GAME "image\\RunningTanker" //你追我赶
#define WINDOW_TITLE L"坦克世界"
#define IP "10.255.125.228"
//#define IP "127.0.0.1"
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void DrawThread(void* param);
VOID Game_Paint(HWND hwnd);
BOOL Game_Init(HWND hwnd);
VOID Game_Bmp(HWND hwnd);
void OnKeyUp(WPARAM wParam);
BOOL Game_ClearUp(HWND hwnd);
//BOOL Game_Pointer(HWND hwnd);
VOID SaveMap(int, char *name);
VOID DrawBulletExp();
VOID LoadMap(int, char *name);
VOID DrawMap(int);
VOID Checkpoint_1();
VOID Checkpoint_2();

VOID CheckppGame();//碰碰车;
VOID CheckSpeechGame();//生死时速
VOID CheckSuriveGame();//求生考验
VOID CheckRunningGame();//你追我赶
VOID LButtonDown(LPARAM);
VOID MessageSend(int x, int y, wchar_t * str);
VOID Editmap();
VOID NewTank(int);
VOID NetWork();
VOID ClearMap();
VOID Weather_System(int Type);

BOOL upJudge(int x, int y, int type);
BOOL downJudge(int x, int y, int type);
BOOL rightJudge(int x, int y, int type);
BOOL leftJudge(int x, int y, int type);
VOID SavePlayerData(int, char*);
BOOL ReadPlayerData(int, char*);
bool g_Stop = true;				//我是否停下
bool g_OStop = true;			//他是否停下
BOOL isgameover;
wchar_t g_str[100];
int g_fram = 0;
bool isnew = true;
bool swappp = false;		//交换闪烁

int g_NowEnemy_s = 0;	//敌人数量剩余标记
int g_NowEnemy_1 = 0;
int g_NowEnemy_2 = 0;

int g_offset = 0;
int g_stage = 0;
bool NetWorkOk = false;
int mode = 0;
int tankertag[4] = { VK_UP, VK_LEFT, VK_DOWN, VK_RIGHT };
int  g_id = 0;   //用于分配的 ID  分配一次 ++
int g_holdType = 3;
int g_color = 0;
int g_tankFlash;			//小
char fileName[35];
int g_CherkPoint = 1;
HPEN g_hPen[7] = { 0 };
int map[MAP_HEIGHT][MAP_WIDTH] = { 0 };
int pos[2][4] = { 'W', 'S', 'A', 'D', VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT };
POINT ptMove[][4] = { 0, -G_TANKSPEED - G_ASPEED, 0, G_TANKSPEED + G_ASPEED, -G_TANKSPEED - G_ASPEED, 0, G_TANKSPEED + G_ASPEED, 0,
0, -G_TANKSPEED, 0, G_TANKSPEED, -G_TANKSPEED, 0, G_TANKSPEED, 0,
0, -TANKSIZE, 0, TANKSIZE, -TANKSIZE, 0, TANKSIZE, 0
};
typedef struct position
{
	int x;
	int y;
	int vx;
	int vy;
	int tag;
	int id;
	position() { x = 100; y = 100; }
}Pos;
class Weather :public Pos
{
public:
	bool exist;
};
Weather Wearther[3][50];

int g_WeartherNum = 0;
class BulletExp :public Pos {
public:
	int last;
	bool isexit;
};
list<BulletExp>g_BulletExpList;
class Bullet : public Pos
{
private:
	BulletExp exp[BULLET_EXP_S];
public:
	VOID BulletExplosion();
	bool isfire;
	int firetime;
	bool isexit;
	Bullet() { vx = BULLETSPEED; vy = BULLETSPEED; tag = 0; isexit = false;  firetime = 15; isfire = false; }
	void Shot(int _x, int _y, int _tag, int _id) {
		isexit = true;
		id = _id;
		tag = _tag;
		if (tag == 0 || tag == 3)
		{
			if (tag == 0)
				y = _y - 10;
			else
				y = _y + 10;
			x = _x;
		}
		else
		{
			if (tag == 1)
				x = _x + 10;
			else
				x = _x - 10;
			y = _y;
		}
	}
};
class Tanker :public Pos {
private:
	int bulletcd;
	int bulletcount;
	int movecd;

	int quality;
public:
	void AddQuilty();
	int GetMotion();
	void DrawBullet2();
	int kill_s;
	bool isexist;
	bool isout(int, int);
	bool ismeet(int _x, int _y);
	void setcount(int c) { bulletcount += c; }
	int getcount() { return bulletcount; }
	Bullet bullets[BULLETS_];
	Tanker() { bulletcount = 0; bulletcd = 10; movecd = -10; isexist = true; vx = 5; vy = 5; kill_s = 0; }
	VOID Shot(int user, int  cd);
	void MoveTank(int _x, int _y);
	void setmap();
	VOID DrawBullet();
};

class ETank :public Tanker
{
public:
	static int count1;
	static int count;

	int movehold;
	bool HeadpReturn();
	ETank() { x = 100; y = 50; vx = 5; vy = 5; movehold = ENEMY_MOVEHOLD; isexist = false; }
};
ETank g_HeadP[4];
int  ETank::count = ENEMY_S;
int  ETank::count1 = ENEMY1_S;
BOOL g_isGameStart = true;
HDC g_hdc = NULL, g_mdc = NULL, g_bufdc = NULL;

DWORD g_tNow = 0, g_tPre = 0;
Pos g_Pointer;						//开始界面选项指针
Tanker g_Tanker[2];					//玩家坦克
ETank g_ETank[ENEMY_S + 100];
ETank g_ETank1[ENEMY1_S + 100];
RECT g_rect;
Pos g_textPos;
int g_tag = 0;		//方向
int g_tagbuf[] = { 0, 3, 2, 1 };			//方向数组
int g_WearthType = 0;
HBITMAP g_hBackGround = NULL, g_hBackStart = NULL, g_hTanker[2] = { NULL }, g_hPointer = NULL;
HBITMAP g_hBullet[3] = { NULL }, g_hBlock[3] = { NULL }, g_hFire = NULL;
HBITMAP  g_hTank1 = NULL, g_hTank2 = NULL, g_hFAIL = NULL, g_hWin = NULL;
HBITMAP g_hBase = NULL, g_hNohurt[2] = { NULL }, g_hSmallMenu = NULL;
HBITMAP g_hExp[7] = { NULL }, g_hBlock1[10] = { NULL }, g_hWearther[3][4] = { NULL };
HBITMAP g_hHead_P[4] = { NULL };
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	WNDCLASSEX wndclass = { 0 };
	wndclass.cbSize = sizeof(WNDCLASSEX);
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc = WndProc;
	wndclass.hInstance = hInstance;
	wndclass.hIcon = (HICON)::LoadImage(NULL, L"image\\icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
	wndclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
	wndclass.lpszMenuName = NULL;
	wndclass.lpszClassName = L"Tank";
	wndclass.hCursor = (HCURSOR)::LoadImage(NULL, L"image\\Normal Select.cur", IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
	if (!RegisterClassEx(&wndclass))
		return -1;
	HWND hwnd = CreateWindow(L"Tank", WINDOW_TITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT + 40, NULL, NULL, hInstance, NULL);											//返回地址
	g_hWnd = hwnd;
	MoveWindow(hwnd, 100, 20, WINDOW_WIDTH + 28, WINDOW_HEIGHT + 40, true);
	ShowWindow(hwnd, nShowCmd);
	UpdateWindow(hwnd);
	g_NowEnemy_s = ENEMY1_S + ENEMY_S;
	//	g_NowEnemy_1 = ENEMY_S;
	//	g_NowEnemy_2 = ENEMY1_S;
	g_Pointer.x = 60;
	g_Pointer.y = 310;

	PlaySound(L"image\\0BGM.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);

	Game_Init(hwnd);
	Game_Bmp(hwnd);
	//BGM    	PlaySound(L"LOG.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
	MSG msg = { 0 };
	while (msg.message != WM_QUIT)
	{
		if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			g_tNow = GetTickCount();
			if (g_tNow - g_tPre >= 30)			//33帧
				Game_Paint(hwnd);
		}
	}

	UnregisterClass(L"Tank", wndclass.hInstance);

	return 0;

}
//
int g_time = 0;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT paintStruct;
	static	 int sta = 0;
	static	 int sta1 = 0;
	char buf[25] = { 0 };
	switch (message)
	{

	case WM_TIMER:
		switch (wParam)
		{
		case 1:		KillTimer(hwnd, 1); break;
		case 2:		KillTimer(hwnd, 2); break;
		case 8:		g_time++;
			if (g_time >= 60 && g_stage != 1)
			{
				isgameover = true;
				KillTimer(hwnd, 8);
			}break;
		default:isnew = false; break;
		}
		isnew = false;
		break;
	case WM_KEYDOWN:
		if (wParam == VK_BACK)
		{
			sta = 0;
			ShowCursor(false);
			sta1 = 0;
			NetWorkOk = false;
			g_Pointer.y = 310;
			g_Pointer.x = 60;
			g_stage = 0;
		}
		if (wParam == VK_ESCAPE)
		{
			DestroyWindow(hwnd);
		}
		switch (g_stage)
		{
		case 0:
		{
			switch (wParam)
			{
			case 87:
			case VK_UP:					if (sta == 0)break; sta--;		g_Pointer.y -= 70;
				/*	char s[25];
				sprintf(s, "%d_%d(%d,%d",2,4, 700, 600);
				wchar_t t[30];
				swprintf(t, L"%d", strlen(s));
				MessageBox(NULL, t, L"错误", MB_OK); */break;
			case 83:
			case VK_DOWN:			if (sta == 4)break; sta++;	g_Pointer.y += 70; 			 									break;
			case VK_RETURN:
				switch (sta)
				{
				case 0:	//MessageBox(NULL, L"单人游戏", L"开始", MB_OK);		
					g_stage = 1;
					g_CherkPoint = 1;
					LoadMap(g_CherkPoint, POINT_1_F);
					SetTimer(hwnd, 1, 3000, NULL);  //无敌倒计时
					SetTimer(hwnd, 8, 1000, NULL);
					Game_Init(hwnd);
					break;
				case 1:
					g_Pointer.y -= 70; g_Pointer.x = 30;

					sta = 0; g_stage = 2;
					Game_Init(hwnd);
					break;
				case 2:
					ConnectServer();
					g_stage = 4;
					break;
				case 3:
					LoadMap(1, POINT_1_F);
					g_Tanker[0].x = 280;
					g_Tanker[0].y = 600;
					g_stage = 9;
					break;
				case 4:
					SaveMap(1, POINT_1_F);	PostQuitMessage(0);
					break;

				default:break;
				}break;
			}		break;
		case 1:
			if (wParam == 'l' || wParam == 'L')
				if (MessageBox(NULL, L"是否保存进度", L"保存", MB_OKCANCEL) != IDCANCEL)
				{
					SavePlayerData(0, PLAYER_POINET_F);
					SaveMap(0, PLAYER_SAVE_MAP);
					g_stage = 0;
				}
			if (wParam == 't' || wParam == 'T')
			{
				if (ReadPlayerData(0, PLAYER_POINET_F))
				{
					LoadMap(0, PLAYER_SAVE_MAP);
					SetTimer(hwnd, 1, 3000, NULL);  //无敌倒计时
					Game_Init(hwnd);
				}
			}
			if (wParam == 'U' || wParam == 'u')
			{
				if (g_CherkPoint < CHERK_S)
				{
					g_CherkPoint++;
					LoadMap(g_CherkPoint, POINT_1_F);
					SetTimer(hwnd, 1, 3000, NULL);  //无敌倒计时
					Game_Init(hwnd);
				}
			/*	else
				{
					LoadMap(0, PLAYER_SELF_MAP);
					SetTimer(hwnd, 1, 3000, NULL);  //无敌倒计时
					Game_Init(hwnd);
				}*/
			}

			break;
		case 2:
			switch (wParam)
			{
			case 87:
			case VK_UP:					if (sta1 == 0)break; sta1--;		g_Pointer.y -= 70; 							break;
			case 83:
			case VK_DOWN:			if (sta1 == 4)break; sta1++;	g_Pointer.y += 70; 			 				break;
			case VK_RETURN:
				switch (sta1)
				{
				case 0:
					g_stage = 3;
					LoadMap(1, POINT_1_F);
					SetTimer(hwnd, 2, 3000, NULL);
					Game_Init(hwnd);
					break;
				case 1:
					//	g_stage = 5;
					g_Pointer.y -= 70; g_Pointer.x = 30;
					sta1 = 0;
					g_stage = 5;
					LoadMap(1, P_P_GAME);
					Game_Init(hwnd);
					//MessageBox(NULL, L"碰碰车", L"开始", MB_OK);
					break;
				case 2:
					g_Pointer.y -= 140; g_Pointer.x = 30;
					sta1 = 0;
					g_stage = 6;
					LoadMap(1, PLAYER_SPEECH_F);
					Game_Init(hwnd);
					//MessageBox(NULL, L"生死时速", L"开始", MB_OK);
					break;
				case 3:
					g_Pointer.y -= 210; g_Pointer.x = 30;
					sta1 = 0;
					g_stage = 7;
					LoadMap(1, SURIVE_GAME);
					Game_Init(hwnd);
					//MessageBox(NULL, L"求生考验", L"开始", MB_OK);
					break;
				case 4:
					g_Pointer.y -= 280; g_Pointer.x = 30;
					sta1 = 0;
					g_stage = 8;
					LoadMap(1, RUNNINGTANKER_GAME);
					Game_Init(hwnd);
					//MessageBox(NULL, L"你追我赶", L"开始", MB_OK);
					break;
				default:
					break;
				}
			}break;
		case 3:     break;
		case 4:

			OnKeyUp(wParam); break;
		case 5:  break;
		case 6:  break;
		case 7:  break;
		case 8:  break;
		case 9:
			if (mode == 0)
				switch (wParam)
				{
				case 87:
				case VK_UP:				g_Tanker[0].MoveTank(0, -TANKSIZE);			break;
				case 83:
				case VK_DOWN:		g_Tanker[0].MoveTank(0, TANKSIZE);	    		break;
				case 'A':case 'a':
				case VK_LEFT:			g_Tanker[0].MoveTank(-TANKSIZE, 0);			break;
				case 'd':case 'D':
				case VK_RIGHT:		g_Tanker[0].MoveTank(TANKSIZE, 0);				break;
				case VK_SPACE:  		g_Tanker[0].setmap();							break;
				case 'p':case 'P':		mode = 1; break;
				default:break;
				}
			if (wParam == 'o' || wParam == 'O')
				mode = 0;
			if (wParam == 'i' || wParam == 'I')
				ClearMap();
			if (wParam == 'l' || wParam == 'L')
				if (MessageBox(NULL, L"是否保存地图", L"保存", MB_OKCANCEL) != IDCANCEL)
				{
					SaveMap(0, PLAYER_SELF_MAP);
					g_stage = 0;
				}

		}
		g_Tanker[0].tag = 0;
		}
		break;
	case WM_LBUTTONDOWN:
		if (!NetWorkOk)
			LButtonDown(lParam);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd, message, wParam, lParam);
		break;
	}
	return 0;
}
VOID Game_Paint(HWND hwnd)
{
	//BG
	if (g_stage != 4)
	{
		SelectObject(g_bufdc, g_hBackGround);
		BitBlt(g_mdc, 0, 0, g_offset, WINDOW_HEIGHT, g_bufdc, WINDOW_WIDTH - g_offset, 0, SRCCOPY);
		BitBlt(g_mdc, g_offset, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
	}
	if (g_offset >= WINDOW_WIDTH)
		g_offset = 0;
	g_offset += 1;

	if (!isgameover) {
		if (!g_NowEnemy_s&&g_stage!=5&&g_stage!=6&&g_stage!=7&&g_stage!=8)
		{//胜利
			SelectObject(g_bufdc, g_hWin);
			TransparentBlt(g_mdc, 100, 100, 424, 174, g_bufdc, 0, 0, 424, 174, RGB(0, 0, 0));
			BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);

			if (g_CherkPoint < CHERK_S)
			{
				MessageBox(NULL, L"很好这很骚,你赢了,是否开始下一局", L"胜利", MB_OKCANCEL);
				LoadMap(++g_CherkPoint, POINT_1_F);
			}
			else {
				MessageBox(NULL, L"看来我的关卡挡不住你了", L"通关", MB_OKCANCEL);
				g_stage = 0;
			}
			Game_Init(hwnd);
		}
		if (g_stage == 1 || g_stage>2)
			if (g_stage != 4)
				Weather_System(g_WearthType);
		switch (g_stage)
		{
		case 0:
			if (g_Pointer.x > 310)
				g_Pointer.x -= 5;
			else
				g_Pointer.x += 5;
			SelectObject(g_bufdc, g_hBackStart);
			BitBlt(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
			SelectObject(g_bufdc, g_hPointer);
			TransparentBlt(g_mdc, g_Pointer.x, g_Pointer.y, 75, 50, g_bufdc, 0, 0, 75, 50, RGB(27, 27, 27));

			//BitBlt(g_mdc, g_Pointer.x, g_Pointer.y, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
			break;
		case 1:
			Checkpoint_1();
			break;
		case 2:
			if (g_Pointer.x > 310)
				g_Pointer.x -= 5;
			else
				g_Pointer.x += 5;
			SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));
			Rectangle(g_mdc, WINDOW_WIDTH, 0, 200, WINDOW_HEIGHT);
			SelectObject(g_bufdc, g_hSmallMenu);
			BitBlt(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
			SelectObject(g_bufdc, g_hPointer);
			TransparentBlt(g_mdc, g_Pointer.x, g_Pointer.y, 75, 50, g_bufdc, 0, 0, 75, 50, RGB(27, 27, 27));
			//Checkpoint_2();
			break;
		case 3:Checkpoint_2(); break;
		case 4: NetWork();  break;
		case 5:CheckppGame(); break;
		case 6:CheckSpeechGame();
			break;
		case 7:CheckSuriveGame();   break;
		case 8:CheckRunningGame();   break;
		case 9:
			Editmap();
			break;
		default:break;
		}
		if (!NetWorkOk)
			BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
	}

	else
	{
		if (g_stage == 5)
		{
			if (Speech[1] > Speech[0])
			{
				MessageBox(NULL, L"2P玩家胜利", L"1P菜鸡你失败了", MB_OK);
				g_stage = 0;
				Game_Init(hwnd);
				Speech[0] = 5;
				Speech[1] = 5;
				return;
			}
			else //if (g_Tanker[1].x <= 0 || g_Tanker[1].y <= 0 || g_Tanker[1].x >= 28 || g_Tanker[1].y >= 17)
			{
				MessageBox(NULL, L"1P玩家胜利", L"2P菜鸡你失败了", MB_OK);
				g_stage = 0;
				Game_Init(hwnd);
				Speech[0] = 5;
				Speech[1] = 5;
				return;
			}

			/*SelectObject(g_bufdc, g_hFAIL);
			TransparentBlt(g_mdc, 200, 100, 248, 160, g_bufdc, 0, 0, 248, 160, RGB(0, 0, 0));
			BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);*/
		}
		if (g_stage == 6||g_stage==7||g_stage==8)
		{
			if (Winner == 0)
			{
				MessageBox(NULL, L"1P玩家胜利", L"2P菜鸡你失败了", MB_OK);
				g_stage = 0;
				Game_Init(hwnd);
				Speech[0] = 5;
				Speech[1] = 5;
			}
			else
			{
				MessageBox(NULL, L"2P玩家胜利", L"1P菜鸡你失败了", MB_OK);
				g_stage = 0;
				Game_Init(hwnd);
				Speech[0] = 5;
				Speech[1] = 5;
			}
		}
		else
		{
			if (g_stage != 4)
			{
				SelectObject(g_bufdc, g_hFAIL);
				TransparentBlt(g_mdc, 200, 100, 248, 160, g_bufdc, 0, 0, 248, 160, RGB(0, 0, 0));
				BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
			}
			if (MessageBox(NULL, L"菜鸡被打爆了,是否从新开始?", L"失败", MB_OKCANCEL) != IDCANCEL)
			{
				SetTimer(hwnd, 1, 3000, NULL);
				isnew = true;
				LoadMap(g_CherkPoint, POINT_1_F);

			}
			else
			{
				g_stage = 0;
			}
		}
		Game_Init(hwnd);

	}
	g_tPre = GetTickCount();


}

BOOL Game_Init(HWND hwnd)
{
	//	g_WearthType = rand() % 2;
	g_textPos.x = 0;
	g_textPos.y = 150;
	isgameover = false;
	g_time = 0;
	isnew = true;
	srand((unsigned)time(NULL));
	g_tankFlash = -10;
	g_NowEnemy_s = ENEMY1_S + ENEMY_S + g_CherkPoint * 8;
	for (int i = 0, k = 480; i < 2; i++, k += 160)		//
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值