c++坦克大战

来源:互联网 发布:java byte二维数组 编辑:程序博客网 时间:2024/05/22 07:48
#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_GameBegin1#define Msg_Info2#define Msg_GameEnd3//客户端到服务器#define Msg_Move4//移动         初始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   9void 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_S4//关卡总数#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_S2//玩家数量#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_BULLETCD5//敌人子弹cd#define BLOCK_SIZE  40//墙的大小#define DETECTION_LEVEL6//     检测与墙相撞的级别 越低要求越高  不得小于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;elsey = _y + 10;x = _x;}else{if (tag == 1)x = _x + 10;elsex = _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){//BGif (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;elseg_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;elseg_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 <ENEMY_S + 100; i++)//第一类敌人坦克数组{if (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);elsesprintf_s(fileName, "%s.txt", name);out.open(name, ios::out);for (int i = 0; i <MAP_HEIGHT; i++){for (int j = 0; j < MAP_WIDTH; j++)out << map[i][j] << " ";out << endl;}out.close();}BOOL ReadPlayerData(int level, char*name){/*if (level != 0)sprintf_s(fileName, "%s%d.txt", name, level);elsesprintf_s(fileName, "%s", name);*/ifstream in;in.open("image\\PlayerData.txt", ios::in);if (in.fail()){MessageBox(NULL, L"尚未保存进度", L"错误", MB_OK);//g_stage = 0;return false;}in >> 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);elsesprintf_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);elsesprintf_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 <g_NowEnemy_1; i++){if (!g_ETank[i].isexist)continue;if (rand() % ENEMY_BULLETCD == 0){g_ETank[i].Shot(0, ENEMY_BULLETCD);}if (g_ETank[i].movehold < 0){g_ETank[i].tag = rand() % 4;g_ETank[i].movehold = ENEMY_MOVEHOLD;}elseg_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 <g_NowEnemy_2; 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;}elseg_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));}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));if (isnew)NewTank(1);//无敌保护if (GetKeyState(VK_SPACE)<0)g_Tanker[0].Shot(0, G_TANKBULLETCD);//后坐力g_Tanker[0].DrawBullet();for (int i = 0; i < g_NowEnemy_2; i++)g_ETank1[i].DrawBullet();for (int i = 0; i < g_NowEnemy_1; i++){g_ETank[i].DrawBullet();}DrawMap(1);DrawBulletExp();SetBkMode(g_mdc, TRANSPARENT);SetTextColor(g_mdc, RGB(0, 245, 255));HFONT hFont;hFont = CreateFont(20, 0, 0, 0, 700, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, TEXT("微软雅黑"));SelectObject(g_mdc, hFont);TextOut(g_mdc, g_Tanker[0].x + 16, g_Tanker[0].y + 20, L"1", 1);TextOut(g_mdc, WINDOW_WIDTH - 200, 10, L"坦克大战", 4);TextOut(g_mdc, WINDOW_WIDTH - 200, 50, L"小键盘控制方向", 7);TextOut(g_mdc, WINDOW_WIDTH - 200, 90, L"空格发射子弹", 6);TextOut(g_mdc, WINDOW_WIDTH - 200, 130, L"T 读档", 4);TextOut(g_mdc, WINDOW_WIDTH - 200, 170, L"L 存档", 4);TextOut(g_mdc, WINDOW_WIDTH - 200, 210, L"U 下一关", 5);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));SetTextColor(g_mdc, RGB(0, 255, 127));swprintf_s(str, L"剩余战斗时间%d", 60 - g_time);TextOut(g_mdc, 350, 50, str, wcslen(str));if (60 - g_time <= 0){isgameover = true;}swprintf_s(str, L"当前关卡%d", g_CherkPoint);TextOut(g_mdc, 350, 70, 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 Checkpoint_2(){for (int i = 0; i < 2; i++)for (int j = 0; j < 4; j++){if (GetKeyState(pos[i][j]) < 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 < g_NowEnemy_1; 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;}elseg_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 < g_NowEnemy_2; 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;}elseg_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].DrawBullet();}DrawMap(1);//画地图DrawBulletExp();for (int i = 0; i < g_NowEnemy_2; i++)g_ETank1[i].DrawBullet();for (int i = 0; i < g_NowEnemy_1; 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 - 200, 10, L"坦克大战", 4);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"连坐制度,一尸两命", 9);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 CheckSpeechGame(){SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));Rectangle(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);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].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;}elseg_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;}elseg_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].DrawBullet();}DrawMap(1);//画地图for (int i = 0; i < ENEMY1_S+100; i++)g_ETank1[i].DrawBullet();for (int i = 0; i < ENEMY_S+100; 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 - 500, 10, L"生死时速", 4);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"进攻敌方堡垒,速度对抗", 11);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 CheckSuriveGame(){SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));Rectangle(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);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].MoveTank(g_Tanker[i].vx, g_Tanker[i].vy);g_Tanker[i].tag = g_tagbuf[j];break;}}for (int i = 0; i < ENEMY_S*10+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;}elseg_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*10+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;}elseg_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].DrawBullet();}DrawMap(1);//画地图for (int i = 0; i < ENEMY1_S*10; i++)g_ETank1[i].DrawBullet();for (int i = 0; i < ENEMY_S*10; 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 - 500, 10, L"求生考验", 4);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, 90, L"玩家1 WASD控制方向", 12);//TextOut(g_mdc, WINDOW_WIDTH - 200, 170, L"空格发射子弹", 6);TextOut(g_mdc, WINDOW_WIDTH - 200, 130, L"看谁生存的更久", 12);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 CheckRunningGame(){SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));Rectangle(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);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].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;}elseg_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;}elseg_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].DrawBullet();}DrawMap(1);//画地图for (int i = 0; i < g_NowEnemy_2; i++)g_ETank1[i].DrawBullet();for (int i = 0; i < g_NowEnemy_1; 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 - 500, 10, L"你追我赶", 4);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"相互厮杀吧", 5);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 CheckppGame(){SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));Rectangle(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);if (Speech[0]>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]<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{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;}elseg_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;}elseg_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<BulletExp>::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);elseTextOut(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));elseTransparentBlt(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 2if (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 10if (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;elseWinner = 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;elseWinner = 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;elseWinner = 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;elseWinner = 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;elseWinner = 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;elseWinner = 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;elseWinner = 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;elsebullets[i].isexit = false;if (g_stage == 6||g_stage==7||g_stage==8){isgameover = true;if (m == 0)Winner = 1;elseWinner = 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,%dstring 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 ysprintf_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;elseg_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 (y<g_HeadP[i].y + 97 && y + 97>g_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);}}}

0 0
原创粉丝点击