#include
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"Msimg32.lib")
#include
#include
#include
#include
#include
/*********/
#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;
};
listg_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) //玩家坦克数组
{
g_Tanker[i].x = k;
g_Tanker[i].y = WINDOW_HEIGHT - 40;
g_Tanker[i].kill_s = 0;
for (int k = 0; k < BULLETS_; k++)
g_Tanker[i].bullets[k].isexit = false;
}
ShowCursor(true);
if (g_stage == 5||g_stage==6||g_stage==7||g_stage==8)
{
g_NowEnemy_1=50;
}
else
{
g_NowEnemy_1 = ENEMY_S + g_CherkPoint * 5;
}
for (int i = 0; i = g_NowEnemy_1)
{
g_ETank[i].isexist = false;
continue;
}
g_ETank[i].x = rand() % 1000 + 50;
g_ETank[i].y = rand() % 50 + 150;
g_ETank[i].isexist = true;
for (int k = 0; k < BULLETS_; k++)
g_ETank[i].bullets[k].isexit = false;
}
if (g_stage == 5||g_stage==6||g_stage==7||g_stage==8)
{
g_NowEnemy_2 = 30;
}
else
{
g_NowEnemy_2 = ENEMY1_S + g_CherkPoint * 3;
}
for (int i = 0; i < ENEMY1_S + 100; i++) //第二类敌人坦克
{
if (i >= g_NowEnemy_2)
{
g_ETank1[i].isexist = false;
continue;
}
g_ETank1[i].x = rand() % 1000 + 50;
g_ETank1[i].y = rand() % 100 + 50;
g_ETank1[i].isexist = true;
for (int k = 0; k < BULLETS_; k++)
g_ETank1[i].bullets[k].isexit = false;
}
return TRUE;
}
VOID Game_Bmp(HWND hwnd)
{
for (int i = 0; i < 2; i++)
{
g_Tanker[i].id = g_id++;
}
for (int i = 0; i < ENEMY_S + 100; i++)
{
g_ETank[i].id = g_id++;
}
for (int i = 0; i < ENEMY1_S + 100; i++)
{
g_ETank1[i].id = g_id++;
}
HBITMAP bmp;
g_hdc = GetDC(hwnd);
g_mdc = CreateCompatibleDC(g_hdc);
g_bufdc = CreateCompatibleDC(g_hdc);
bmp = CreateCompatibleBitmap(g_hdc, WINDOW_WIDTH, WINDOW_HEIGHT);
SelectObject(g_mdc, bmp);
g_hBackGround = (HBITMAP)LoadImage(NULL, L"image\\bg.bmp", IMAGE_BITMAP, WINDOW_WIDTH, WINDOW_HEIGHT, LR_LOADFROMFILE);
g_hBackStart = (HBITMAP)LoadImage(NULL, L"image\\start.bmp", IMAGE_BITMAP, WINDOW_WIDTH, WINDOW_HEIGHT, LR_LOADFROMFILE);
g_hTanker[0] = (HBITMAP)LoadImage(NULL, L"image\\tank1.bmp", IMAGE_BITMAP, 160, 40, LR_LOADFROMFILE);
g_hTanker[1] = (HBITMAP)LoadImage(NULL, L"image\\tank2.bmp", IMAGE_BITMAP, 160, 40, LR_LOADFROMFILE); g_hPointer = (HBITMAP)LoadImage(NULL, L"image\\pointer.bmp", IMAGE_BITMAP, 75, 50, LR_LOADFROMFILE);
g_hBullet[0] = (HBITMAP)LoadImage(NULL, L"image\\bullet1.bmp", IMAGE_BITMAP, 40, 40, LR_LOADFROMFILE);
g_hBullet[1] = (HBITMAP)LoadImage(NULL, L"image\\bullet2.bmp", IMAGE_BITMAP, 40, 40, LR_LOADFROMFILE);
g_hBullet[2] = (HBITMAP)LoadImage(NULL, L"image\\bullet3.bmp", IMAGE_BITMAP, 40, 40, LR_LOADFROMFILE);
g_hSmallMenu = (HBITMAP)LoadImage(NULL, L"image\\menu1.bmp", IMAGE_BITMAP, WINDOW_WIDTH, WINDOW_HEIGHT, LR_LOADFROMFILE);
g_hBlock[0] = (HBITMAP)LoadImage(NULL, L"image\\block1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hBlock[1] = (HBITMAP)LoadImage(NULL, L"image\\block2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hBlock[2] = (HBITMAP)LoadImage(NULL, L"image\\block3.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hFire = (HBITMAP)LoadImage(NULL, L"image\\fire.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hTank1 = (HBITMAP)LoadImage(NULL, L"image\\Enemy1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hTank2 = (HBITMAP)LoadImage(NULL, L"image\\Enemy2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hFAIL = (HBITMAP)LoadImage(NULL, L"image\\gameover.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hWin = (HBITMAP)LoadImage(NULL, L"image\\win.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hBase = (HBITMAP)LoadImage(NULL, L"image\\base.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hNohurt[0] = (HBITMAP)LoadImage(NULL, L"image\\noHurt.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
g_hNohurt[1] = (HBITMAP)LoadImage(NULL, L"image\\noHurt1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
for (int i = 1; i <= 7; i++)
{
wchar_t name[30];
swprintf_s(name, L"image\\exp%d.bmp", i);
g_hExp[i - 1] = (HBITMAP)LoadImage(NULL, name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
}
for (int i = 1; i <= 4; i++)
{
wchar_t name[30];
swprintf_s(name, L"image\\rain%d.bmp", i);
g_hWearther[0][i - 1] = (HBITMAP)LoadImage(NULL, name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
}
for (int i = 1; i <= 4; i++)
{
wchar_t name[30];
swprintf_s(name, L"image\\writer%d.bmp", i);
g_hHead_P[i - 1] = (HBITMAP)LoadImage(NULL, name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
}
for (int i = 1; i <= 3; i++)
{
wchar_t name[30];
swprintf_s(name, L"image\\snow%d.bmp", i);
g_hWearther[1][i - 1] = (HBITMAP)LoadImage(NULL, name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
}
GetClientRect(hwnd, &g_rect);
Game_Paint(hwnd);
}
BOOL Game_ClearUp(HWND hwnd)
{
return TRUE;
}
void DrawMap(int level)
{
for (int i = 0; i < 19; i++)
for (int j = 0; j < 30; j++)
{
if (map[i][j] == 0)
continue;
if (map[i][j] == TIE)
{
SelectObject(g_bufdc, g_hBlock[0]);
BitBlt(g_mdc, j * 40, i * 40, 40, 40, g_bufdc, 0, 0, SRCCOPY);
}
else if (map[i][j] == TU)
{
SelectObject(g_bufdc, g_hBlock[1]);
BitBlt(g_mdc, j * 40, i * 40, 40, 40, g_bufdc, 0, 0, SRCCOPY);
}
else if (map[i][j] == CAODI)
{
SelectObject(g_bufdc, g_hBlock[2]);
BitBlt(g_mdc, j * 40, i * 40, 40, 40, g_bufdc, 0, 0, SRCCOPY);
}
else if (map[i][j] == 9)
{
SelectObject(g_bufdc, g_hBase);
TransparentBlt(g_mdc, j * 40, i * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
}
}
}
void SaveMap(int level, char *name)
{
ofstream out;
if (level != 0)
sprintf_s(fileName, "%s%d.txt", name, level);
else
sprintf_s(fileName, "%s.txt", name);
out.open(name, ios::out);
for (int i = 0; i > g_Tanker[0].x;
in >> g_Tanker[0].y;
in >> g_Tanker[0].tag;
in >> g_NowEnemy_s;
in >> g_CherkPoint;
LoadMap(0, PLAYER_SAVE_MAP);
in.close();
}
VOID SavePlayerData(int level, char*name)
{
ofstream out;
/*if (level != 0)
sprintf_s(fileName, "%s%d.txt", name, level);
else
sprintf_s(fileName, "%s", name);*/
out.open("image\\PlayerData.txt", ios::out);
out << g_Tanker[0].x << " ";
out << g_Tanker[0].y << " ";
out << g_Tanker[0].tag << " ";
out << g_NowEnemy_s << " ";
out << g_CherkPoint;
out.close();
}
void LoadMap(int level, char *name)
{
memset(fileName, 0, sizeof(fileName));
if (level != 0)
sprintf_s(fileName, "%s%d.txt", name, level);
else
sprintf_s(fileName, "%s.txt", name);
ifstream in;
in.open(fileName, ios::in);
if (in.fail())
{
MessageBox(NULL, L"文件打开失败", L"错误", MB_OK);
g_stage = 0;
return;
}
for (int i = 0; i < 19; i++)
for (int j = 0; j < 30; j++)
{
map[i][j] = 0;
if (in.eof())
{
in.close();
return;
}
in >> map[i][j];
}
in.close();
}
void Tanker::setmap()
{
if (map[y / 40][x / 40] == 9)
return;
if (map[y / 40][x / 40] == 0)
{
map[y / 40][x / 40] = g_holdType;
return;
}
g_holdType = --map[y / 40][x / 40];
if (g_holdType <= 0)
{
//map[y / 40][x / 40] = TIE;
g_holdType = TIE;
}
}
void Tanker::Shot(int user, int cd)
{
if (bulletcd>cd)
{
switch (tag) //后坐力
{
case 0:MoveTank(0, BULLETPOWER); break;
case 1:MoveTank(-BULLETPOWER, 0); break;
case 2:MoveTank(BULLETPOWER, 0); break;
case 3:MoveTank(0, -BULLETPOWER); break;
default:break;
}
for (int i = 0; i < BULLETS_; i++)
{
if (!bullets[i].isexit)
{
bulletcd = -cd;
bullets[i].Shot(x, y, tag, id);
return;
}
}
}
else bulletcd++;
}
void Tanker::MoveTank(int _x, int _y)
{
if (ismeet(_x, _y))
{
x += _x;
y += _y;
}
}
void Checkpoint_1()
{
for (int j = 0; j < 4; j++)
{
if (GetKeyState(pos[0][j]) < 0)
{
g_Tanker[0].vx = ptMove[0][j].x;
g_Tanker[0].vy = ptMove[0][j].y;
g_Tanker[0].MoveTank(g_Tanker[0].vx, g_Tanker[0].vy);
g_Tanker[0].tag = g_tagbuf[j];
break;
}
}
for (int i = 0; i Speech[1])
{
if ((g_Tanker[0].x + TANKSIZE) > g_Tanker[1].x&&g_Tanker[0].x < (g_Tanker[1].x + TANKSIZE))
if (g_Tanker[0].y < (g_Tanker[1].y + TANKSIZE) && (g_Tanker[0].y + TANKSIZE) >(g_Tanker[1].y))
{
isgameover = true;
}
}
else if (Speech[0] g_Tanker[1].x&&g_Tanker[0].x < (g_Tanker[1].x + TANKSIZE))
if (g_Tanker[0].y < (g_Tanker[1].y + TANKSIZE) && (g_Tanker[0].y + TANKSIZE) >(g_Tanker[1].y))
{
isgameover = true;
}
}
else
{
isgameover = false;
}
for (int i = 0; i < 2; i++)
for (int j = 0; j < 4; j++)
{
if (GetKeyState(pos[i][j]) < 0)
{
switch (j)
{
case 0:
g_Tanker[i].vx = 0;
g_Tanker[i].vy = -Speech[i];
break;
case 1:
g_Tanker[i].vx = 0;
g_Tanker[i].vy = Speech[i];
break;
case 2:
g_Tanker[i].vx = -Speech[i];
g_Tanker[i].vy = 0;
break;
case 3:
g_Tanker[i].vx = Speech[i];
g_Tanker[i].vy = 0;
}
/*g_Tanker[i].vx = ptMove[i][j].x;
g_Tanker[i].vy = ptMove[i][j].y;*/
g_Tanker[i].MoveTank(g_Tanker[i].vx, g_Tanker[i].vy);
g_Tanker[i].tag = g_tagbuf[j];
break;
}
}
for (int i = 0; i < ENEMY_S+100; i++)
{
if (!g_ETank[i].isexist)
continue;
if (rand() % ENEMY_BULLETCD == 0)
{
//g_ETank[i].Shot(1, ENEMY_BULLETCD);
}
if (g_ETank[i].movehold < 0)
{
g_ETank[i].tag = rand() % 4;
g_ETank[i].movehold = ENEMY_MOVEHOLD;
}
else
g_ETank[i].movehold--;
switch (g_ETank[i].tag)
{
case 0: if (!g_ETank[i].ismeet(0, -g_ETank[i].vy))break; g_ETank[i].y -= g_ETank[i].vy; break;
case 1: if (!g_ETank[i].ismeet(g_ETank[i].vx, 0))break; g_ETank[i].x += g_ETank[i].vx; break;
case 2: if (!g_ETank[i].ismeet(-g_ETank[i].vx, 0))break; g_ETank[i].x -= g_ETank[i].vx; break;
case 3: if (!g_ETank[i].ismeet(0, g_ETank[i].vy))break; g_ETank[i].y += g_ETank[i].vy; break;
}
SelectObject(g_bufdc, g_hTank1);
TransparentBlt(g_mdc, g_ETank[i].x, g_ETank[i].y, 40, 40, g_bufdc, g_ETank[i].tag * 40, 0, 40, 40, RGB(0, 0, 0));
}
for (int i = 0; i < ENEMY1_S+100; i++)
{
if (!g_ETank1[i].isexist)
continue;
if (rand() % ENEMY_BULLETCD == 0)
{
//g_ETank1[i].Shot(2, ENEMY_BULLETCD);
}
if (g_ETank1[i].movehold < 0)
{
g_ETank1[i].tag = rand() % 4;
g_ETank1[i].movehold = ENEMY_MOVEHOLD;
}
else
g_ETank1[i].movehold--;
switch (g_ETank1[i].tag)
{
case 0: if (!g_ETank1[i].ismeet(0, -g_ETank1[i].vy))break; g_ETank1[i].y -= g_ETank1[i].vy; break;
case 1: if (!g_ETank1[i].ismeet(g_ETank1[i].vx, 0))break; g_ETank1[i].x += g_ETank1[i].vx; break;
case 2: if (!g_ETank1[i].ismeet(-g_ETank1[i].vx, 0))break; g_ETank1[i].x -= g_ETank1[i].vx; break;
case 3: if (!g_ETank1[i].ismeet(0, g_ETank1[i].vy))break; g_ETank1[i].y += g_ETank1[i].vy; break;
}
SelectObject(g_bufdc, g_hTank2);
TransparentBlt(g_mdc, g_ETank1[i].x, g_ETank1[i].y, 40, 40, g_bufdc, g_ETank1[i].tag * 40, 0, 40, 40, RGB(0, 0, 0));
}
if (GetKeyState(VK_ADD)<0)
{
g_Tanker[1].Shot(0, G_TANKBULLETCD);//后坐力
}
if (GetKeyState(VK_SPACE) < 0)
{
g_Tanker[0].Shot(0, G_TANKBULLETCD);//后坐力
}
for (int i = 0; i < 2; i++) //画子弹
{
SelectObject(g_bufdc, g_hTanker[i]);
TransparentBlt(g_mdc, g_Tanker[i].x, g_Tanker[i].y, 40, 40, g_bufdc, g_Tanker[i].tag * 40, 0, 40, 40, RGB(0, 0, 0));
g_Tanker[i].DrawBullet2();
}
DrawMap(1); //画地图
/*for (int i = 0; i < ENEMY1_S; i++)
g_ETank1[i].DrawBullet();
for (int i = 0; i < ENEMY_S; i++)
g_ETank[i].DrawBullet();*/
if (isnew)
NewTank(2); //无敌保护罩
SetBkMode(g_mdc, TRANSPARENT);
SetTextColor(g_mdc, RGB(0, 245, 255));
//TextOut(g_mdc, g_Tanker[0].x + 16, g_Tanker[0].y + 20, L"1", 1);
//TextOut(g_mdc, g_Tanker[1].x + 16, g_Tanker[1].y + 20, L"2", 1);
TextOut(g_mdc, WINDOW_WIDTH - 400, 10, L"碰碰车大战", 5);
TextOut(g_mdc, WINDOW_WIDTH - 200, 50, L"玩家2 小键盘控制方向", 11);
TextOut(g_mdc, WINDOW_WIDTH - 200, 90, L"加号发射子弹", 6);
TextOut(g_mdc, WINDOW_WIDTH - 200, 130, L"玩家1 WASD控制方向", 12);
TextOut(g_mdc, WINDOW_WIDTH - 200, 170, L"空格发射子弹", 6);
TextOut(g_mdc, WINDOW_WIDTH - 200, 210, L"升级碾压对方", 6);
wchar_t str[100];
SetTextColor(g_mdc, RGB(255, 10, 10));
//swprintf_s(str, L"敌人剩余数量%d", g_NowEnemy_s);
TextOut(g_mdc, 50, 20, str, wcslen(str));
switch (g_color)
{
case 0: SetTextColor(g_mdc, RGB(255, 10, 10)); ++g_color; break;
// case 1: SetTextColor(g_mdc, RGB(0, 255, 127)); ++g_color; break;
// case 2: SetTextColor(g_mdc, RGB(148, 0, 211)); g_color = 0; break;
}
if (g_textPos.x < WINDOW_WIDTH / 2 + 200)
{
TextOut(g_mdc, g_textPos.x, g_textPos.y, g_str, wcslen(g_str));
g_textPos.x += 5;
}
}
VOID Bullet::BulletExplosion()
{
for (int i = 0; i < BULLET_EXP_S - 1; i++)
{
exp[i].isexit = true;
exp[i].last = 0;
exp[i].x = x;
exp[i].y = y;
//exp[i].vx = BULLET_EXP_V;
//exp[i].vy = BULLET_EXP_V;
g_BulletExpList.push_front(exp[i]);
}
}
VOID DrawBulletExp()
{
for (list::iterator it = g_BulletExpList.begin(); it != g_BulletExpList.end(); ++it)
{
if (!it->isexit)
{
continue;
}
switch (rand() % 4)
{
case 0:
(*it).vx = -(1 + rand() % BULLET_EXP_V);
(*it).vy = -(1 + rand() % BULLET_EXP_V);
break;
case 1:
(*it).vx = (1 + rand() % BULLET_EXP_V);
(*it).vy = (1 + rand() % BULLET_EXP_V);
break;
case 2:
(*it).vx = (1 + rand() % BULLET_EXP_V);
(*it).vy = -(1 + rand() % BULLET_EXP_V);
break;
case 3:
(*it).vx = -(1 + rand() % BULLET_EXP_V);
(*it).vy = (1 + rand() % BULLET_EXP_V);
break;
default:
break;
}
(*it).x += (*it).vx;
(*it).y += (*it).vy;
SelectObject(g_bufdc, g_hExp[rand() % 7]);
BitBlt(g_mdc, (*it).x, (*it).y, 4, 4, g_bufdc, 0, 0, SRCCOPY);
//TransparentBlt(g_mdc, (*it).x, (*it).y, 8, 8, g_bufdc, 0, 0, 8, 8, RGB(255, 255, 255));
if ((*it).last > BULLET_EXPLAST)
{
(*it).isexit = false;
}
else
(*it).last++;
}
}
VOID Editmap()
{
SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));
Rectangle(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
SetBkMode(g_mdc, TRANSPARENT);
SetTextColor(g_mdc, RGB(0, 245, 255));
DrawMap(1);
if (g_tankFlash < 0)
{
SelectObject(g_bufdc, g_hTanker[0]);
TransparentBlt(g_mdc, g_Tanker[0].x, g_Tanker[0].y, 40, 40, g_bufdc, g_Tanker[0].tag * 40, 0, 40, 40, RGB(0, 0, 0));
}
g_tankFlash++;
if (g_tankFlash > 10)
g_tankFlash = -20;
if (mode == 1) {
for (int j = 0; j < 4; j++)
{
if (GetKeyState(pos[1][j]) < 0)
{
g_Tanker[0].vx = ptMove[2][j].x;
g_Tanker[0].vy = ptMove[2][j].y;
g_Tanker[0].MoveTank(g_Tanker[0].vx, g_Tanker[0].vy);
g_Tanker[0].tag = 0;
break;
}
}
if (GetKeyState(VK_SPACE) < 0)
{
g_Tanker[0].setmap();
}
}
TextOut(g_mdc, WINDOW_WIDTH - 200, 50, L"O普通建图", 5);
TextOut(g_mdc, WINDOW_WIDTH - 200, 100, L"P快速建图", 5);
TextOut(g_mdc, WINDOW_WIDTH - 200, 150, L"L保存地图", 5);
TextOut(g_mdc, WINDOW_WIDTH - 200, 200, L"I清空地图", 5);
if (mode == 1)
TextOut(g_mdc, WINDOW_WIDTH / 2 - 100, 50, L"快速编辑地图中", 7);
else
TextOut(g_mdc, WINDOW_WIDTH / 2 - 100, 50, L"普通编辑地图中", 7);
}
VOID Weather_System(int Type)
{
if (g_WeartherNum < WEATHER_NUMBER)
{
Wearther[Type][g_WeartherNum].x = rand() % 500 + 500;
Wearther[Type][g_WeartherNum].y = rand() % 200 + 10;
Wearther[Type][g_WeartherNum].exist = true;
g_WeartherNum++;
}
for (int i = 0; i < WEATHER_NUMBER; i++)
{
if (Wearther[Type][i].exist)
{
SelectObject(g_bufdc, g_hWearther[Type][rand() % 4]);
if (Type != 1)
TransparentBlt(g_mdc, Wearther[Type][i].x, Wearther[Type][i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
else
TransparentBlt(g_mdc, Wearther[Type][i].x, Wearther[Type][i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(255, 255, 255));
if (rand() % 2 == 0)
{
Wearther[Type][i].x += -rand() % 6;
}
else
{
Wearther[Type][i].x += -rand() % 6;
}
Wearther[Type][i].y += 8;
if (Wearther[Type][i].y>WINDOW_HEIGHT)
{
Wearther[Type][i].y = 0;
Wearther[Type][i].x = rand() % WINDOW_WIDTH;
}
}
}
}
bool Tanker::isout(int bufx, int bufy)
{
if (bufx + x > WINDOW_WIDTH - 40 || bufx + x < 0)
return true;
if (bufy + y > WINDOW_HEIGHT - 40 || bufy + y < 0)
return true;
x += bufx;
y += bufy;
return false;
}
bool Tanker::ismeet(int _x, int _y)
{
int bufx = x + _x, bufy = y + _y;
if (bufx > WINDOW_WIDTH - 40 || bufx < 0)
return false;
else if (bufy > WINDOW_HEIGHT - 40 || bufy < 0)
return false;
if (g_stage == 9)
return true;
// 0 , -1 , 1 ,
//bool Judge(int bufxy){ }
//碰撞检测
//坦克撞坦克检测
if (g_stage != 1)
if (id == 1 || id == 0)
{
if (!isnew)
if ((g_Tanker[0].x + TANKSIZE) > g_Tanker[1].x&&g_Tanker[0].x < (g_Tanker[1].x + TANKSIZE))
if (g_Tanker[0].y < (g_Tanker[1].y + TANKSIZE) && (g_Tanker[0].y + TANKSIZE) >(g_Tanker[1].y))
{
if (g_Tanker[0].x >(g_Tanker[1].x + TANKSIZE))
{
g_Tanker[0].isout(6, 0);
g_Tanker[1].isout(-6, 0);
}
else
{
g_Tanker[0].isout(-6, 0);
g_Tanker[1].isout(6, 0);
}
return false;
}
}
int k = PLAYER_S;
if (g_stage == 1)
--k;
// 1
// 0 1 2 3 4 5 2
if (g_stage != 4)
if (id >= PLAYER_S && id < ENEMY_S + PLAYER_S)
{
for (int i = 0; i < k; i++)
{
if ((g_Tanker[i].x + TANKSIZE) >x&&g_Tanker[i].x < (x + TANKSIZE))
if (g_Tanker[i].y < (y + TANKSIZE) && (g_Tanker[i].y + TANKSIZE) >(y))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, g_Tanker[i].x / 40 * 40, g_Tanker[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 5)
{
isgameover = true;
if (g_stage == 6||g_stage==7||g_stage==8)
{
if (i == 0)
{
Winner = 1;
}
else
{
Winner = 0;
}
}
else
{
g_stage = 0;
}
}
}
}
}
// k=1 s=6 s1=4
// id: 0 1 2 3 4 5 6 7 8 9 10
if (g_stage != 4)
if (id >= (ENEMY_S + PLAYER_S))
{
for (int i = 0; i < k; i++)
{
if ((g_Tanker[i].x + TANKSIZE) >x&&g_Tanker[i].x < (x + TANKSIZE))
if (g_Tanker[i].y < (y + TANKSIZE) && (g_Tanker[i].y + TANKSIZE) >(y))
{
isexist = false;
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, x, y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
--g_NowEnemy_s;
++g_Tanker[i].kill_s;
swprintf_s(g_str, L"玩家%d 碾压敌方坦克,目前摧毁数:%d", i + 1, kill_s);
g_textPos.x = TEXT_X;
return false;
}
}
}
if (_y < 0) //上
{
if (map[(bufy) / BLOCK_SIZE][(bufx + DETECTION_LEVEL) / BLOCK_SIZE] <= CAODI&& map[(bufy) / BLOCK_SIZE][(bufx + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] <= CAODI)
return true;
// for (int i = ; i <= bufx / BLOCK_SIZE + 1; i++)
if (map[(bufy) / BLOCK_SIZE][(bufx + DETECTION_LEVEL) / BLOCK_SIZE] != 0 || map[(bufy) / BLOCK_SIZE][(bufx + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] != 0)
{
return false;
}
return true;
}
else if (_y > 0) //下
{
if (map[(bufy + BLOCK_SIZE) / BLOCK_SIZE][(bufx + DETECTION_LEVEL) / BLOCK_SIZE] <= CAODI && map[(bufy + BLOCK_SIZE) / BLOCK_SIZE][(bufx + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] <= CAODI)
return true;
if (map[(bufy + BLOCK_SIZE) / BLOCK_SIZE][(bufx + DETECTION_LEVEL) / BLOCK_SIZE] != 0 || map[(bufy + BLOCK_SIZE) / BLOCK_SIZE][(bufx + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] != 0)
{
return false;
}
return true;
}
else if (_x < 0) //左
{
if (map[(bufy + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE][(bufx) / BLOCK_SIZE] <= CAODI&& map[(bufy + DETECTION_LEVEL) / BLOCK_SIZE][(bufx) / BLOCK_SIZE] <= CAODI)
return true;
if (map[(bufy + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE][(bufx) / BLOCK_SIZE] != 0 || map[(bufy + DETECTION_LEVEL) / BLOCK_SIZE][(bufx) / BLOCK_SIZE] != 0)
{
return false;
}
return true;
}
else if (_x > 0) //右
{
if (map[(bufy + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE][(bufx + BLOCK_SIZE) / BLOCK_SIZE] <= CAODI && map[(bufy + DETECTION_LEVEL) / BLOCK_SIZE][(bufx + BLOCK_SIZE) / BLOCK_SIZE] <= CAODI)
return true;
if (map[(bufy + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE][(bufx + BLOCK_SIZE) / BLOCK_SIZE] != 0 || map[(bufy + DETECTION_LEVEL) / BLOCK_SIZE][(bufx + BLOCK_SIZE) / BLOCK_SIZE] != 0)
{
return false;
}
if (map[(bufy + BLOCK_SIZE) / BLOCK_SIZE][(bufx + DETECTION_LEVEL) / BLOCK_SIZE] == 9 || map[(bufy + BLOCK_SIZE) / BLOCK_SIZE][(bufx + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] == 9)
{
MessageBox(NULL, L"玩家成功突破", L"胜利", NULL);
g_stage = 0;
}
return true;
}
return false;
}
VOID Tanker::DrawBullet2() // 打印子弹图片
{
for (int i = 0; i < BULLETS_; i++)
{
if (!bullets[i].isexit)
continue;
if (id == 0)
{
SelectObject(g_bufdc, g_hBullet[0]);
TransparentBlt(g_mdc, bullets[i].x, bullets[i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(3, 3, 3));
}
else if (id == 1)
{
SelectObject(g_bufdc, g_hBullet[1]);
TransparentBlt(g_mdc, bullets[i].x, bullets[i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(10, 4, 1));
}
else
{
SelectObject(g_bufdc, g_hBullet[2]);
TransparentBlt(g_mdc, bullets[i].x, bullets[i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
}
switch (bullets[i].tag)
{
case 0: bullets[i].y -= bullets[i].vy; break;
case 1: bullets[i].x += bullets[i].vx; break;
case 2: bullets[i].x -= bullets[i].vx; break;
case 3: bullets[i].y += bullets[i].vy; break;
}
//下面为子弹碰撞 事件 检测
//过界 子弹消失
if (bullets[i].x >= WINDOW_WIDTH || bullets[i].x <= 0 || bullets[i].y >= WINDOW_HEIGHT || bullets[i].y <= 0)
{
bullets[i].isexit = false;
// continue;
}
switch (bullets[i].tag) //子弹撞到障碍物{ 0, 3, 2, 1 };
{
case 0:
// if (upJudge(bullets[i].x, bullets[i].y, 0))break;
if (upJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[(bullets[i].y) / 40][bullets[i].x / 40] <= TU)
map[(bullets[i].y) / 40][bullets[i].x / 40] = LUDI;
if (map[bullets[i].y / 40][(bullets[i].x + 30) / 40] <= TU)
map[bullets[i].y / 40][(bullets[i].x + 30) / 40] = LUDI;
}
else if (upJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (upJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id < 2)
{
isgameover = true;
if (id == 0)
Winner = 0;
else
Winner = 1;
}
}
break;
case 3: // if (downJudge(bullets[i].x, bullets[i].y, 0))break;
if (downJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] <= TU)
map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] = 0;
if (map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] <= TU)
map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] = 0;
}
else if (downJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (downJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id<2)
isgameover = true;
}break;
case 2:// if (leftJudge(bullets[i].x, bullets[i].y, 0))break;
if (leftJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[bullets[i].y / 40][bullets[i].x / 40] <= TU)
map[bullets[i].y / 40][bullets[i].x / 40] = LUDI;
if (map[(bullets[i].y + 30) / 40][bullets[i].x / 40] <= TU)
map[(bullets[i].y + 30) / 40][bullets[i].x / 40] = LUDI;
}
else if (leftJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (leftJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id<2)
{
isgameover = true;
if (id == 0)
Winner = 0;
else
Winner = 1;
}
}
break;
case 1://if (rightJudge(bullets[i].x, bullets[i].y, 0))break;
if (rightJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[bullets[i].y / 40][(bullets[i].x + 40) / 40] <= TU)
map[bullets[i].y / 40][(bullets[i].x + 40) / 40] = LUDI;
if (map[(bullets[i].y + 30) / 40][(bullets[i].x + 40) / 40] <= TU)
map[(bullets[i].y + 30) / 40][(bullets[i].x + 40) / 40] = LUDI;
}
else if (rightJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (rightJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id<2)//生死时速关卡除外
{
isgameover = true;
if (id == 0)
Winner = 0;
else
Winner = 1;
}
}
break;
}
/* //子弹 撞击 土墙
if (map[bullets[i].y / 40][bullets[i].x / 40] == 2)
{
bullets[i].isexit = false;
map[bullets[i].y / 40][bullets[i].x / 40] = 0;
}
//子弹 达到 老家 失败
if (map[bullets[i].y / 40][bullets[i].x / 40] == 9)
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
map[bullets[i].y / 40][bullets[i].x / 40] = 0;
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);
g_stage = 0;
isgameover = true;
}
//子弹 撞击 铁墙
if (map[bullets[i].y / 40][bullets[i].x / 40] == 1 )
{
map[bullets[i].y / 40][bullets[i].x / 40] = 2;
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
*/
//敌方子弹 撞击 我的坦克
if (id >= 2)
{
for (int m = 0; m<2; m++)
{
if ((bullets[i].x + TANKSIZE - 10) > g_Tanker[m].x&&bullets[i].x + 10 < (g_Tanker[m].x + TANKSIZE))
if (bullets[i].y + 10 < (g_Tanker[m].y + TANKSIZE) && (bullets[i].y + TANKSIZE - 10) > (g_Tanker[m].y))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, g_Tanker[m].x, g_Tanker[m].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
}
if (g_stage == 1)
break;
}
}
else //我方攻击敌方
{
for (int k = 0; k < ENEMY1_S+100; k++)
{
if (!g_ETank1[k].isexist)
continue;
if ((bullets[i].x + TANKSIZE - BULLET_DETECTION_LE) > g_ETank1[k].x&&bullets[i].x + BULLET_DETECTION_LE < (g_ETank1[k].x + TANKSIZE))
if (bullets[i].y + BULLET_DETECTION_LE<(g_ETank1[k].y + TANKSIZE) && (bullets[i].y + TANKSIZE - BULLET_DETECTION_LE)>(g_ETank1[k].y))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, g_ETank1[k].x, g_ETank1[k].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
g_ETank1[k].isexist = false;
bullets[i].isexit = false;
--g_NowEnemy_s;
++kill_s;
if (id == 0)
{
g_Tanker[0].AddQuilty();
Speech[0]++;
}
else
{
g_Tanker[1].AddQuilty();
Speech[1]++;
}
swprintf_s(g_str, L"玩家%d 已经成功摧毁敌方重型坦克,目前摧毁数:%d", id + 1, kill_s);
g_textPos.x = TEXT_X;
}
}
for (int k = 0; k < ENEMY_S+100; k++)
{
if (!g_ETank[k].isexist)
continue;
if ((bullets[i].x + TANKSIZE - BULLET_DETECTION_LE) > g_ETank[k].x&&bullets[i].x + BULLET_DETECTION_LE < (g_ETank[k].x + TANKSIZE))
if (bullets[i].y + BULLET_DETECTION_LE<(g_ETank[k].y + TANKSIZE) && (bullets[i].y + TANKSIZE - BULLET_DETECTION_LE)>(g_ETank[k].y))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, g_ETank[k].x, g_ETank[k].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
g_ETank[k].isexist = false;
bullets[i].isexit = false;
--g_NowEnemy_s;
++kill_s;
swprintf_s(g_str, L"玩家%d 已经成功摧毁敌方轻型坦克,目前摧毁数:%d", id + 1, kill_s);
g_textPos.x = TEXT_X;
}
}
/*if (g_ETank[0].count == 0 && g_ETank1[0].count1 == 0)
{
}*/
}
}
}
void Tanker::AddQuilty()
{
quality += 20;
}
int Tanker::GetMotion()
{
int Vx = vx, Vy = vy;
if (vx < 0)
Vx = -vx;
if (vy < 0)
Vy = -vy;
return (int)sqrt(Vx*Vx + Vy*Vy)*quality;
}
VOID Tanker::DrawBullet() // 打印子弹图片
{
for (int i = 0; i < BULLETS_; i++)
{
if (!bullets[i].isexit)
continue;
if (id == 0)
{
SelectObject(g_bufdc, g_hBullet[0]);
TransparentBlt(g_mdc, bullets[i].x, bullets[i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(3, 3, 3));
}
else if (id == 1)
{
SelectObject(g_bufdc, g_hBullet[1]);
TransparentBlt(g_mdc, bullets[i].x, bullets[i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(10, 4, 1));
}
else
{
SelectObject(g_bufdc, g_hBullet[2]);
TransparentBlt(g_mdc, bullets[i].x, bullets[i].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
}
switch (bullets[i].tag)
{
case 0: bullets[i].y -= bullets[i].vy; break;
case 1: bullets[i].x += bullets[i].vx; break;
case 2: bullets[i].x -= bullets[i].vx; break;
case 3: bullets[i].y += bullets[i].vy; break;
}
//下面为子弹碰撞 事件 检测
//过界 子弹消失
if (bullets[i].x >= WINDOW_WIDTH || bullets[i].x <= 0 || bullets[i].y >= WINDOW_HEIGHT || bullets[i].y <= 0)
{
bullets[i].isexit = false;
// continue;
}
switch (bullets[i].tag) //子弹撞到障碍物{ 0, 3, 2, 1 };
{
case 0:
// if (upJudge(bullets[i].x, bullets[i].y, 0))break;
if (upJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[(bullets[i].y) / 40][bullets[i].x / 40] <= TU)
map[(bullets[i].y) / 40][bullets[i].x / 40] = LUDI;
if (map[bullets[i].y / 40][(bullets[i].x + 30) / 40] <= TU)
map[bullets[i].y / 40][(bullets[i].x + 30) / 40] = LUDI;
}
else if (upJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (upJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id<2)//生死时速关卡除外
{
isgameover = true;
if (id == 0)
Winner = 0;
else
Winner = 1;
}
}
break;
case 3: // if (downJudge(bullets[i].x, bullets[i].y, 0))break;
if (downJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] <= TU)
map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] = 0;
if (map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] <= TU)
map[(bullets[i].y + 40) / 40][(bullets[i].x + 30) / 40] = 0;
}
else if (downJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (downJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id<2)//生死时速关卡除外
{
isgameover = true;
if (id == 0)
Winner = 0;
else
Winner = 1;
}
}break;
case 2:// if (leftJudge(bullets[i].x, bullets[i].y, 0))break;
if (leftJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[bullets[i].y / 40][bullets[i].x / 40] <= TU)
map[bullets[i].y / 40][bullets[i].x / 40] = LUDI;
if (map[(bullets[i].y + 30) / 40][bullets[i].x / 40] <= TU)
map[(bullets[i].y + 30) / 40][bullets[i].x / 40] = LUDI;
}
else if (leftJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (leftJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id<2)//生死时速关卡除外
{
isgameover = true;
if (id == 0)
Winner = 0;
else
Winner = 1;
}
}
break;
case 1://if (rightJudge(bullets[i].x, bullets[i].y, 0))break;
if (rightJudge(bullets[i].x, bullets[i].y, TU))
{
bullets[i].isexit = false;
if (map[bullets[i].y / 40][(bullets[i].x + 40) / 40] <= TU)
map[bullets[i].y / 40][(bullets[i].x + 40) / 40] = LUDI;
if (map[(bullets[i].y + 30) / 40][(bullets[i].x + 40) / 40] <= TU)
map[(bullets[i].y + 30) / 40][(bullets[i].x + 40) / 40] = LUDI;
}
else if (rightJudge(bullets[i].x, bullets[i].y, TIE))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
else if (rightJudge(bullets[i].x, bullets[i].y, 9))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
if (g_stage != 6 || id<2)//生死时速关卡除外
{
isgameover = true;
if (id == 0)
Winner = 0;
else
Winner = 1;
}
}
break;
}
/* //子弹 撞击 土墙
if (map[bullets[i].y / 40][bullets[i].x / 40] == 2)
{
bullets[i].isexit = false;
map[bullets[i].y / 40][bullets[i].x / 40] = 0;
}
//子弹 达到 老家 失败
if (map[bullets[i].y / 40][bullets[i].x / 40] == 9)
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
map[bullets[i].y / 40][bullets[i].x / 40] = 0;
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);
g_stage = 0;
isgameover = true;
}
//子弹 撞击 铁墙
if (map[bullets[i].y / 40][bullets[i].x / 40] == 1 )
{
map[bullets[i].y / 40][bullets[i].x / 40] = 2;
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, bullets[i].x / 40 * 40, bullets[i].y / 40 * 40, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(1, 1, 1));
bullets[i].isexit = false;
}
*/
//敌方子弹 撞击 我的坦克
if (id >= 2)
{
for (int m = 0; m<2; m++)
{
if ((bullets[i].x + TANKSIZE - 10) > g_Tanker[m].x&&bullets[i].x + 10 < (g_Tanker[m].x + TANKSIZE))
if (bullets[i].y + 10 < (g_Tanker[m].y + TANKSIZE) && (bullets[i].y + TANKSIZE - 10) > (g_Tanker[m].y))
{
SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, g_Tanker[m].x, g_Tanker[m].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
if (!isnew)
isgameover = true;
else
bullets[i].isexit = false;
if (g_stage == 6||g_stage==7||g_stage==8)
{
isgameover = true;
if (m == 0)
Winner = 1;
else
Winner = 0;
}
else
{
isgameover = true;
}
}
if (g_stage == 1)
break;
}
}
else if (id == 0 || id == 1) //我方攻击敌方
{
if (g_stage == 8)
{
if (id == 0)
{
if ((bullets[i].x + TANKSIZE - 10) > g_Tanker[1].x&&bullets[i].x + 10 < (g_Tanker[1].x + TANKSIZE))
if (bullets[i].y + 10 < (g_Tanker[1].y + TANKSIZE) && (bullets[i].y + TANKSIZE - 10) > (g_Tanker[1].y))
{
isgameover = true;
Winner = 0;
}
}
if(id==1)
{
if ((bullets[i].x + TANKSIZE - 10) > g_Tanker[0].x&&bullets[0].x + 10 < (g_Tanker[0].x + TANKSIZE))
if (bullets[i].y + 10 < (g_Tanker[0].y + TANKSIZE) && (bullets[0].y + TANKSIZE - 10) > (g_Tanker[0].y))
{
isgameover = true;
Winner = 1;
}
}
}
for (int k = 0; k < g_NowEnemy_2; k++)
{
if (!g_ETank1[k].isexist)
continue;
if ((bullets[i].x + TANKSIZE - BULLET_DETECTION_LE) > g_ETank1[k].x&&bullets[i].x + BULLET_DETECTION_LE < (g_ETank1[k].x + TANKSIZE))
if (bullets[i].y + BULLET_DETECTION_LE<(g_ETank1[k].y + TANKSIZE) && (bullets[i].y + TANKSIZE - BULLET_DETECTION_LE)>(g_ETank1[k].y))
{
/* SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, g_ETank1[k].x, g_ETank1[k].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
*/
bullets[i].BulletExplosion();
g_ETank1[k].isexist = false;
bullets[i].isexit = false;
--g_NowEnemy_s;
++kill_s;
/* PlaySound(L"image\\BOOM.wav", NULL, SND_FILENAME | SND_ASYNC);
if(g_NowEnemy_s+1==g_NowEnemy_1+g_NowEnemy_2)
PlaySound(L"image\\FB.wav", NULL, SND_FILENAME | SND_ASYNC);
switch (kill_s)
{
case 3:
break;
case 10:PlaySound(L"image\\SGOD.wav", NULL, SND_FILENAME | SND_ASYNC); break;
default:break;
}*/
swprintf_s(g_str, L"玩家%d 已经成功摧毁敌方重型坦克,目前摧毁数:%d", id + 1, kill_s);
g_textPos.x = TEXT_X;
}
}
for (int k = 0; k < g_NowEnemy_1; k++)
{
if (!g_ETank[k].isexist)
continue;
if ((bullets[i].x + TANKSIZE - BULLET_DETECTION_LE) > g_ETank[k].x&&bullets[i].x + BULLET_DETECTION_LE < (g_ETank[k].x + TANKSIZE))
if (bullets[i].y + BULLET_DETECTION_LE<(g_ETank[k].y + TANKSIZE) && (bullets[i].y + TANKSIZE - BULLET_DETECTION_LE)>(g_ETank[k].y))
{
/* SelectObject(g_bufdc, g_hFire);
TransparentBlt(g_mdc, g_ETank[k].x, g_ETank[k].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
*/
bullets[i].BulletExplosion();
g_ETank[k].isexist = false;
bullets[i].isexit = false;
--g_NowEnemy_s; ++kill_s;
/*PlaySound(L"image\\BOOM.wav", NULL, SND_FILENAME | SND_ASYNC);
if (g_NowEnemy_s + 1 == g_NowEnemy_1 + g_NowEnemy_2)
PlaySound(L"image\\FB.wav", NULL, SND_FILENAME | SND_ASYNC );*/
swprintf_s(g_str, L"玩家%d 已经成功摧毁敌方轻型坦克,目前摧毁数:%d", id + 1, kill_s);
g_textPos.x = TEXT_X;
}
}
/*if (g_ETank[0].count == 0 && g_ETank1[0].count1 == 0)
{
}*/
}
}
}
VOID ClearMap()
{
for (int i = 0; i < MAP_HEIGHT; i++)
for (int j = 0; j < MAP_WIDTH; j++)
map[i][j] = LUDI;
}
BOOL upJudge(int x, int y, int type)
{
if (type == 0)
if (map[(y) / BLOCK_SIZE][(x + DETECTION_LEVEL) / BLOCK_SIZE] == 0 && map[(y) / BLOCK_SIZE][(x + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] == 0)
return false;
if (map[(y) / BLOCK_SIZE][(x + DETECTION_LEVEL) / BLOCK_SIZE] == type || map[(y) / BLOCK_SIZE][(x + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] == type)
{
return true;
}
return false;
}
BOOL downJudge(int x, int y, int type)
{
if (type == 0)
if (map[(y) / BLOCK_SIZE][(x + DETECTION_LEVEL) / BLOCK_SIZE] == 0 && map[(y) / BLOCK_SIZE][(x + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] == 0)
return false;
if (map[(y + BLOCK_SIZE) / BLOCK_SIZE][(x + DETECTION_LEVEL) / BLOCK_SIZE] == type || map[(y + BLOCK_SIZE) / BLOCK_SIZE][(x + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] == type)
{
return true;
}
return false;
}
BOOL leftJudge(int x, int y, int type)
{
if (type == 0)
if (map[(y) / BLOCK_SIZE][(x + DETECTION_LEVEL) / BLOCK_SIZE] == 0 && map[(y) / BLOCK_SIZE][(x + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] == 0)
return false;
if (map[(y + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE][(x) / BLOCK_SIZE] == type || map[(y + DETECTION_LEVEL) / BLOCK_SIZE][(x) / BLOCK_SIZE] == type)
{
return true;
}
return false;
}
BOOL rightJudge(int x, int y, int type)
{
if (type == 0)
if (map[(y) / BLOCK_SIZE][(x + DETECTION_LEVEL) / BLOCK_SIZE] == 0 && map[(y) / BLOCK_SIZE][(x + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE] == 0)
return false;
if (map[(y + BLOCK_SIZE - DETECTION_LEVEL) / BLOCK_SIZE][(x + BLOCK_SIZE) / BLOCK_SIZE] == type || map[(y + DETECTION_LEVEL) / BLOCK_SIZE][(x + BLOCK_SIZE) / BLOCK_SIZE] == type)
{
return true;
}
return false;
}
VOID NewTank(int count)
{
if (swappp)
{
SelectObject(g_bufdc, g_hNohurt[0]);
TransparentBlt(g_mdc, g_Tanker[0].x, g_Tanker[0].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
if (count >= 2)
{
SelectObject(g_bufdc, g_hNohurt[0]);
TransparentBlt(g_mdc, g_Tanker[1].x, g_Tanker[1].y, 40, 40, g_bufdc, 0, 0, 40, 40, RGB(0, 0, 0));
}
swappp = false;
}
else
{
SelectObject(g_bufdc, g_hNohurt[0]);
TransparentBlt(g_mdc, g_Tanker[0].x, g_Tanker[0].y, 40, 40, g_bufdc, 40, 0, 40, 40, RGB(0, 0, 0));
if (count >= 2)
{
SelectObject(g_bufdc, g_hNohurt[0]);
TransparentBlt(g_mdc, g_Tanker[1].x, g_Tanker[1].y, 40, 40, g_bufdc, 40, 0, 40, 40, RGB(0, 0, 0));
}
swappp = true;
}
}
VOID MessageSend(int x, int y, wchar_t * str)
{
SetBkMode(g_mdc, TRANSPARENT);
SetTextColor(g_mdc, RGB(0, 245, 255));
SetTextColor(g_mdc, RGB(255, 10, 10));
TextOut(g_mdc, x, y, str, wcslen(str));
}
int temp = 0;
POINT g_Point[4][2];
bool isbig[4] = { 0 };
int tempp[4][4] = { 0 };
void Connect(SOCKET sock)
{
struct sockaddr_in serverAddress;
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.S_un.S_addr = inet_addr(IP);
serverAddress.sin_port = htons(1986);
//开始连接
if (connect(sock, (sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR)
{
wprintf(g_strTip, L"不能连接到服务器");
NetWorkOk = false;
return;
}
ShowCursor(true);
for (int i = 0; i < 4; i++)
{
g_HeadP[i].x = rand() % (WINDOW_WIDTH - 200);
g_HeadP[i].y = rand() % (WINDOW_HEIGHT - 200);
g_Point[i][0].x = g_HeadP[i].x;
g_Point[i][0].y = g_HeadP[i].y;
g_Point[i][1].x = g_HeadP[i].x + 97;
g_Point[i][1].y = g_HeadP[i].y + 97;
g_HeadP[i].tag = i;
g_HeadP[i].isexist = false;
isbig[i] = false;
switch (rand() % 4)
{
case 0:
g_HeadP[i].vx = -(3 + rand() % HEADP_V);
g_HeadP[i].vy = -(3 + rand() % HEADP_V);
break;
case 1:
g_HeadP[i].vx = (3 + rand() % HEADP_V);
g_HeadP[i].vy = (3 + rand() % HEADP_V);
break;
case 2:
g_HeadP[i].vx = (3 + rand() % HEADP_V);
g_HeadP[i].vy = -(3 + rand() % HEADP_V);
break;
case 3:
g_HeadP[i].vx = -(3 + rand() % HEADP_V);
g_HeadP[i].vy = (3 + rand() % HEADP_V);
break;
default:
break;
}
}
for (int i = 0; i <= 4; i++)
g_hPen[i] = CreatePen(PS_SOLID, 3, RGB(rand() % 256, rand() % 256, rand() % 256));
swprintf_s(g_strTip, L"正在匹配...");
MessageSend(550, 400, g_strTip);
}
void DoRecvMsg(char* buf)
{
string strBuf = buf;
int pos = strBuf.find('_');
int opType = -1;
if (pos != -1)
{
string bufTemp = strBuf.substr(0, pos);
opType = atoi(bufTemp.c_str());
strBuf = strBuf.substr(pos + 1);
}
else
{
opType = atoi(strBuf.c_str());
}
if (opType <= 0)
{
return;
}
switch (opType)
{
case Msg_GameBegin:
//游戏开始消息
SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));
Rectangle(g_mdc, WINDOW_WIDTH, 0, 200, WINDOW_HEIGHT);
code = atoi(strBuf.c_str());
swprintf_s(g_strTip, L"游戏即将开始...");
MessageSend(500, 350, g_strTip);
NetWorkOk = true;
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
if (code == 0)
{
temp = 1;
// g_Tanker[temp].x = 500 +100; g_Tanker[temp].y = 300; //对手
g_Tanker[code].x = 0; g_Tanker[code].y = 0; //我的
g_Tanker[temp].x = 0; g_Tanker[temp].y = 14 * 40; //对手
}
else
{
temp = 0;
g_Tanker[code].x = 0; g_Tanker[code].y = 14 * 40; //我的
g_Tanker[temp].x = 0; g_Tanker[temp].y = 0; //对手
}
LoadMap(1, "image\\Maze");
Sleep(100);
_beginthread(&DrawThread, 0, NULL);
break;
case Msg_Info:
{
//同步信息 %d_%d(%d,%d
string str1, str2;
pos = strBuf.find('_');
if (pos == -1)
{
return;
}
str1 = strBuf.substr(0, pos);
str2 = strBuf.substr(pos + 1);
int bSelf = atoi(str1.c_str());
int xPos = atoi(str2.c_str());
int posX = strBuf.find('(');
int posY = strBuf.find(',');
int x = atoi(strBuf.substr(posX + 1, posY).c_str());
int y = atoi(strBuf.substr(posY + 1).c_str());
if (x > 1200 || y > 800)
return;
if (bSelf == code)
{
if (xPos == 3)
xPos = 1;
else if (xPos == 1)
xPos = 3;
g_Tanker[code].vx = ptMove[1][xPos].x;
g_Tanker[code].vy = ptMove[1][xPos].y;
g_Tanker[code].x = x;
g_Tanker[code].y = y;
g_Tanker[code].MoveTank(g_Tanker[code].vx, g_Tanker[code].vy);
g_Tanker[code].tag = g_tagbuf[xPos];
}
else
{
if (xPos == 3)
xPos = 1;
else if (xPos == 1)
xPos = 3;
/* wchar_t s[20];
swprintf_s(s, L"%d,%d", x, y);
MessageBox(NULL, s, L"错误", MB_OK);*/
g_Tanker[temp].x = x;
g_Tanker[temp].y = y;
g_Tanker[temp].vx = ptMove[1][xPos].x;
g_Tanker[temp].vy = ptMove[1][xPos].y;
g_Tanker[temp].MoveTank(g_Tanker[temp].vx, g_Tanker[temp].vy);
g_Tanker[temp].tag = g_tagbuf[xPos];
}
break;
}
case Msg_GameEnd:
//游戏结束
int bSelfWin = atoi(strBuf.c_str());
if (bSelfWin)
{
wprintf(g_strTip, L"你赢了");
}
else
{
wprintf(g_strTip, L"对家赢了");
}
break;
}
}
void Receive(void* p)
{
char buf[2048] = { 0 };
SOCKET* sock = (SOCKET*)p;
while (1)
{
int bytes;
if ((bytes = recv(g_sock, buf, sizeof(buf), 0)) == SOCKET_ERROR)
{
MessageBox(NULL, L"与服务器断开连接", L"错误", MB_OK);
_endthread();
return;
}
buf[bytes] = '\0';
DoRecvMsg(buf);
}
}
void ConnectServer()
{
WSADATA wsa;
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
MessageBox(NULL, L"套接字初始化失败", L"错误", MB_OK);
return;
}
SOCKET clientSocket;
if ((clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
MessageBox(NULL, L"套接字申请失败", L"错误", MB_OK);
return;
}
g_sock = clientSocket;
/*SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));
Rectangle(g_mdc, WINDOW_WIDTH, 0, 200, WINDOW_HEIGHT);*/
// _beginthread(Anime, 0, NULL);
Connect(clientSocket); //连接服务器
_beginthread(Receive, 0, &clientSocket);
}
void OnKeyUp(WPARAM wParam)
{
int temp[] = { 0, 2, 3, 1 };
for (int j = 0; j < 4; j++)
{
if (GetKeyState(pos[0][j]) < 0)
{
char buf[25] = { 0 };
// type tag x y
sprintf_s(buf, "%d_%d(%d,%d", Msg_Move, g_tagbuf[j], g_Tanker[code].x, g_Tanker[code].y);//方向
if (send(g_sock, buf, strlen(buf), 0) == SOCKET_ERROR)
{
MessageBox(NULL, L"网络出错", L"错误", MB_OK);
return;
}
Sleep(60);
break;
}
}
/*if (GetKeyState(VK_SPACE) < 0)
{
g_Tanker[code].Shot(0, G_TANKBULLETCD);//后坐力
}*/
/*if (wParam == VK_LEFT)
{
char buf[5] = { 0 };
sprintf(buf, "%d_%d", Msg_Move);//方向
if (send(g_sock, buf, strlen(buf), 0) == SOCKET_ERROR)
{
return;
}
}*/
}
VOID NetWork()
{
if (!NetWorkOk)
{
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;
wchar_t str[50];
swprintf_s(str, L"请耐心等待其他玩家加入...");
MessageSend(500, 350, str);
for (int i = 0; i < 4; i++)
{
SelectObject(g_bufdc, g_hHead_P[i]);
BitBlt(g_mdc, g_HeadP[i].x, g_HeadP[i].y, 97, 97, g_bufdc, 0, 0, SRCCOPY);
if (g_HeadP[i].isexist)
{
for (int k = 0; k < 4; k++)
{
if (g_HeadP[k].isexist&&k != i)
if (isbig[i] && isbig[k])
{
SelectObject(g_mdc, g_hPen[rand() % 4]);
MoveToEx(g_mdc, g_HeadP[i].x + 48, g_HeadP[i].y + 48, NULL);
LineTo(g_mdc, g_HeadP[k].x + 48, g_HeadP[k].y + 48);
}
}
SelectObject(g_mdc, g_hPen[rand() % 4]);
MoveToEx(g_mdc, g_HeadP[i].x, g_HeadP[i].y + 1, NULL);
LineTo(g_mdc, g_HeadP[i].x + 1 + 97, g_HeadP[i].y);
SelectObject(g_mdc, g_hPen[rand() % 4]);
MoveToEx(g_mdc, g_HeadP[i].x + 1 + 97, g_HeadP[i].y, NULL);
LineTo(g_mdc, g_HeadP[i].x + 1 + 97, g_HeadP[i].y + 97 + 1);
SelectObject(g_mdc, g_hPen[rand() % 4]);
MoveToEx(g_mdc, g_HeadP[i].x + 97, g_HeadP[i].y + 97 + 1, NULL);
LineTo(g_mdc, g_HeadP[i].x, g_HeadP[i].y + 1 + 97);
SelectObject(g_mdc, g_hPen[rand() % 4]);
MoveToEx(g_mdc, g_HeadP[i].x + 1, g_HeadP[i].y + 97, NULL);
LineTo(g_mdc, g_HeadP[i].x + 1, g_HeadP[i].y);
}
g_HeadP[i].x += g_HeadP[i].vx;
g_HeadP[i].y += g_HeadP[i].vy;
if (g_HeadP[i].x >= WINDOW_WIDTH - 120 || g_HeadP[i].x <= 10)
g_HeadP[i].vx *= -1;
if (g_HeadP[i].y >= WINDOW_HEIGHT - 120 || g_HeadP[i].y <= 10)
g_HeadP[i].vy *= -1;
if (g_HeadP[i].HeadpReturn())
{
if (rand() % 2 == 0)
g_HeadP[i].vx *= -1;
else
g_HeadP[i].vy *= -1;
}
if (g_HeadP[i].y > WINDOW_HEIGHT - 80 || g_HeadP[i].y <= -60 || g_HeadP[i].x >= WINDOW_WIDTH - 80 || g_HeadP[i].x <= -60)
{
g_HeadP[i].x = 600;
g_HeadP[i].y = 300;
}
}
}
/* */
}
void DrawThread(void* param)
{
while (1)
{
//绘制内容
DrawAll();
Sleep(20);
}
}
void DrawAll()
{
if (GetKeyState(VK_BACK) < 0)
{
_endthread();
closesocket(g_sock);
}
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;
SelectObject(g_bufdc, g_hTanker[code]);
TransparentBlt(g_mdc, g_Tanker[code].x, g_Tanker[code].y, 40, 40, g_bufdc, g_Tanker[code].tag * 40, 0, 40, 40, RGB(0, 0, 0)); //自己
SelectObject(g_bufdc, g_hTanker[temp]);
TransparentBlt(g_mdc, g_Tanker[temp].x, g_Tanker[temp].y, 40, 40, g_bufdc, g_Tanker[temp].tag * 40, 0, 40, 40, RGB(0, 0, 0));
DrawMap(3);
swprintf_s(g_strTip, L"WASD控制");
SetBkMode(g_mdc, 0);
SetTextColor(g_mdc, RGB(249, 249, 45));
TextOut(g_mdc, 1100, 100, g_strTip, lstrlen(g_strTip));
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
}
bool ETank::HeadpReturn()
{
for (int i = 0; i < 4; i++)
{
if (i == tag)
continue;
if (x + 97 > g_HeadP[i].x&&x < g_HeadP[i].x + 97)
if (yg_HeadP[i].y)
return true;
}
return false;
}
VOID LButtonDown(LPARAM lparam)
{
for (int i = 0; i < 4; i++)
{
if (g_HeadP[i].x <= LOWORD(lparam) && g_HeadP[i].x + 97 >= LOWORD(lparam))
if (g_HeadP[i].y <= HIWORD(lparam) && g_HeadP[i].y + 97 >= HIWORD(lparam))
{
isbig[i] = !isbig[i];
if (!g_HeadP[i].isexist)
{
g_HeadP[i].isexist = true;
g_HeadP[i].vx *= 2;
g_HeadP[i].vy *= 2;
}
else
{
g_HeadP[i].isexist = false;
g_HeadP[i].vx /= 2;
g_HeadP[i].vy /= 2;
}
break;
//MessageBox(NULL, L"s", L"", NULL);
}
}
}