#include<Windows.h>
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"Msimg32.lib")
#include<time.h>
#include<fstream>
#include<string>
#include<list>
#include<math.h>
/*********/
#include "process.h"
#include "winsock.h"
#include "string.h"
#define MAX_LOADSTRING 100
#pragma comment(lib,"Msimg32.lib")
#pragma comment(lib,"ws2_32.lib")
//*********************************************
#define Max_Player 2 //最多玩家个数
//服务器发送给客户端
#define Msg_GameBegin 1
#define Msg_Info 2
#define Msg_GameEnd 3
//客户端到服务器
#define Msg_Move 4 //移动 初始X Y 已知
#define Msg_Tag_UP 5
#define Msg_Tag_DOWN 8
#define Msg_Tag_LEFT 7
#define Msg_Tag_RIGHT 6
// { 0, 3, 2, 1 };
#define Msg_Stop 9
void DrawThread(void* param);
void DrawAll();
void ConnectServer();
void OnKeyUp(WPARAM wParam);
//void MusicThread(void* param);
HWND g_hWnd;
SOCKET g_sock;
int Speech[2] = { 5, 5 };//速度
int Winner = -1;
wchar_t g_strTip[100] = { 0 }; //提示信息
int code = -1;
/****************************/
using namespace std;
#define WINDOW_WIDTH 1200
#define WINDOW_HEIGHT 760
#define CHERK_S 4 //关卡总数
#define BULLETS_ 10 //子弹数
#define HEADP_V 5 //头像运动速度
#define MAP_WIDTH 30 //地图宽
#define MAP_HEIGHT 19 //地图高
#define G_TANKSPEED 5 //坦克速度
#define G_ASPEED 0 //额外的移动速度
#define G_TANKBULLETCD 3 //坦克攻击CD
#define TANKSIZE 40 //坦克大小
#define BULLETSPEED 13 //子弹速度
#define BULLETPOWER 2 //后坐力
#define PLAYER_S 2 //玩家数量
#define ENEMY_S 2 //敌人数量
#define ENEMY1_S 1 //同
#define POINT_2_ENEMY_S 7
#define POINT_2_ENEMY1_S 5
#define BULLET_EXPLAST 10 //子弹爆炸粒子持续时间
#define BULLET_EXP_S 30 //子弹爆炸粒子个数
#define BULLET_EXP_V 15 // 粒子爆炸的速度
#define CAODI 1 //草地
#define LUDI 0 //空路
#define TU 2 //土墙
#define TIE 3 //铁墙
#define BASE 9
#define WEATHER_NUMBER 50 //天气粒子个数
#define ENEMY_BULLETCD 5 //敌人子弹cd
#define BLOCK_SIZE 40 //墙的大小
#define DETECTION_LEVEL 6 // 检测与墙相撞的级别 越低要求越高 不得小于0
#define BULLET_DETECTION_LE 10 //子弹碰撞检测 越大 越靠近坦克中心
#define ENEMY_MOVEHOLD 20 //敌人持续向一个方向移动时间
#define TEXT_X 500 //杀敌显示文字的X坐标
#define POINT_1_F "image\\level" //关卡保存文件名
#define PLAYER_POINET_F "image\\Playerdata" //双人对抗 玩家进度保存文件名
#define PLAYER_SAVE_MAP "image\\PlayerMap"
#define PLAYER_SELF_MAP "image\\SelfMap"
#define PLAYER_VS_PLAYER "image\\PlayerVsPlayer" //玩家对抗战
#define P_P_GAME "image\\PPGame" //碰碰车
#define PLAYER_SPEECH_F "image\\speechgame"
#define SURIVE_GAME "image\\Surivetext" //求生考验
#define RUNNINGTANKER_GAME "image\\RunningTanker" //你追我赶
#define WINDOW_TITLE L"坦克世界"
#define IP "10.255.125.228"
//#define IP "127.0.0.1"
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void DrawThread(void* param);
VOID Game_Paint(HWND hwnd);
BOOL Game_Init(HWND hwnd);
VOID Game_Bmp(HWND hwnd);
void OnKeyUp(WPARAM wParam);
BOOL Game_ClearUp(HWND hwnd);
//BOOL Game_Pointer(HWND hwnd);
VOID SaveMap(int, char *name);
VOID DrawBulletExp();
VOID LoadMap(int, char *name);
VOID DrawMap(int);
VOID Checkpoint_1();
VOID Checkpoint_2();
VOID CheckppGame();//碰碰车;
VOID CheckSpeechGame();//生死时速
VOID CheckSuriveGame();//求生考验
VOID CheckRunningGame();//你追我赶
VOID LButtonDown(LPARAM);
VOID MessageSend(int x, int y, wchar_t * str);
VOID Editmap();
VOID NewTank(int);
VOID NetWork();
VOID ClearMap();
VOID Weather_System(int Type);
BOOL upJudge(int x, int y, int type);
BOOL downJudge(int x, int y, int type);
BOOL rightJudge(int x, int y, int type);
BOOL leftJudge(int x, int y, int type);
VOID SavePlayerData(int, char*);
BOOL ReadPlayerData(int, char*);
bool g_Stop = true; //我是否停下
bool g_OStop = true; //他是否停下
BOOL isgameover;
wchar_t g_str[100];
int g_fram = 0;
bool isnew = true;
bool swappp = false; //交换闪烁
int g_NowEnemy_s = 0; //敌人数量剩余标记
int g_NowEnemy_1 = 0;
int g_NowEnemy_2 = 0;
int g_offset = 0;
int g_stage = 0;
bool NetWorkOk = false;
int mode = 0;
int tankertag[4] = { VK_UP, VK_LEFT, VK_DOWN, VK_RIGHT };
int g_id = 0; //用于分配的 ID 分配一次 ++
int g_holdType = 3;
int g_color = 0;
int g_tankFlash; //小
char fileName[35];
int g_CherkPoint = 1;
HPEN g_hPen[7] = { 0 };
int map[MAP_HEIGHT][MAP_WIDTH] = { 0 };
int pos[2][4] = { 'W', 'S', 'A', 'D', VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT };
POINT ptMove[][4] = { 0, -G_TANKSPEED - G_ASPEED, 0, G_TANKSPEED + G_ASPEED, -G_TANKSPEED - G_ASPEED, 0, G_TANKSPEED + G_ASPEED, 0,
0, -G_TANKSPEED, 0, G_TANKSPEED, -G_TANKSPEED, 0, G_TANKSPEED, 0,
0, -TANKSIZE, 0, TANKSIZE, -TANKSIZE, 0, TANKSIZE, 0
};
typedef struct position
{
int x;
int y;
int vx;
int vy;
int tag;
int id;
position() { x = 100; y = 100; }
}Pos;
class Weather :public Pos
{
public:
bool exist;
};
Weather Wearther[3][50];
int g_WeartherNum = 0;
class BulletExp :public Pos {
public:
int last;
bool isexit;
};
list<BulletExp>g_BulletExpList;
class Bullet : public Pos
{
private:
BulletExp exp[BULLET_EXP_S];
public:
VOID BulletExplosion();
bool isfire;
int firetime;
bool isexit;
Bullet() { vx = BULLETSPEED; vy = BULLETSPEED; tag = 0; isexit = false; firetime = 15; isfire = false; }
void Shot(int _x, int _y, int _tag, int _id) {
isexit = true;
id = _id;
tag = _tag;
if (tag == 0 || tag == 3)
{
if (tag == 0)
y = _y - 10;
else
y = _y + 10;
x = _x;
}
else
{
if (tag == 1)
x = _x + 10;
else
x = _x - 10;
y = _y;
}
}
};
class Tanker :public Pos {
private:
int bulletcd;
int bulletcount;
int movecd;
int quality;
public:
void AddQuilty();
int GetMotion();
void DrawBullet2();
int kill_s;
bool isexist;
bool isout(int, int);
bool ismeet(int _x, int _y);
void setcount(int c) { bulletcount += c; }
int getcount() { return bulletcount; }
Bullet bullets[BULLETS_];
Tanker() { bulletcount = 0; bulletcd = 10; movecd = -10; isexist = true; vx = 5; vy = 5; kill_s = 0; }
VOID Shot(int user, int cd);
void MoveTank(int _x, int _y);
void setmap();
VOID DrawBullet();
};
class ETank :public Tanker
{
public:
static int count1;
static int count;
int movehold;
bool HeadpReturn();
ETank() { x = 100; y = 50; vx = 5; vy = 5; movehold = ENEMY_MOVEHOLD; isexist = false; }
};
ETank g_HeadP[4];
int ETank::count = ENEMY_S;
int ETank::count1 = ENEMY1_S;
BOOL g_isGameStart = true;
HDC g_hdc = NULL, g_mdc = NULL, g_bufdc = NULL;
DWORD g_tNow = 0, g_tPre = 0;
Pos g_Pointer; //开始界面选项指针
Tanker g_Tanker[2]; //玩家坦克
ETank g_ETank[ENEMY_S + 100];
ETank g_ETank1[ENEMY1_S + 100];
RECT g_rect;
Pos g_textPos;
int g_tag = 0; //方向
int g_tagbuf[] = { 0, 3, 2, 1 }; //方向数组
int g_WearthType = 0;
HBITMAP g_hBackGround = NULL, g_hBackStart = NULL, g_hTanker[2] = { NULL }, g_hPointer = NULL;
HBITMAP g_hBullet[3] = { NULL }, g_hBlock[3] = { NULL }, g_hFire = NULL;
HBITMAP g_hTank1 = NULL, g_hTank2 = NULL, g_hFAIL = NULL, g_hWin = NULL;
HBITMAP g_hBase = NULL, g_hNohurt[2] = { NULL }, g_hSmallMenu = NULL;
HBITMAP g_hExp[7] = { NULL }, g_hBlock1[10] = { NULL }, g_hWearther[3][4] = { NULL };
HBITMAP g_hHead_P[4] = { NULL };
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASSEX wndclass = { 0 };
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.hInstance = hInstance;
wndclass.hIcon = (HICON)::LoadImage(NULL, L"image\\icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
wndclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = L"Tank";
wndclass.hCursor = (HCURSOR)::LoadImage(NULL, L"image\\Normal Select.cur", IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
if (!RegisterClassEx(&wndclass))
return -1;
HWND hwnd = CreateWindow(L"Tank", WINDOW_TITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT + 40, NULL, NULL, hInstance, NULL); //返回地址
g_hWnd = hwnd;
MoveWindow(hwnd, 100, 20, WINDOW_WIDTH + 28, WINDOW_HEIGHT + 40, true);
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
g_NowEnemy_s = ENEMY1_S + ENEMY_S;
// g_NowEnemy_1 = ENEMY_S;
// g_NowEnemy_2 = ENEMY1_S;
g_Pointer.x = 60;
g_Pointer.y = 310;
PlaySound(L"image\\0BGM.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
Game_Init(hwnd);
Game_Bmp(hwnd);
//BGM PlaySound(L"LOG.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
MSG msg = { 0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
g_tNow = GetTickCount();
if (g_tNow - g_tPre >= 30) //33帧
Game_Paint(hwnd);
}
}
UnregisterClass(L"Tank", wndclass.hInstance);
return 0;
}
//
int g_time = 0;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT paintStruct;
static int sta = 0;
static int sta1 = 0;
char buf[25] = { 0 };
switch (message)
{
case WM_TIMER:
switch (wParam)
{
case 1: KillTimer(hwnd, 1); break;
case 2: KillTimer(hwnd, 2); break;
case 8: g_time++;
if (g_time >= 60 && g_stage != 1)
{
isgameover = true;
KillTimer(hwnd, 8);
}break;
default:isnew = false; break;
}
isnew = false;
break;
case WM_KEYDOWN:
if (wParam == VK_BACK)
{
sta = 0;
ShowCursor(false);
sta1 = 0;
NetWorkOk = false;
g_Pointer.y = 310;
g_Pointer.x = 60;
g_stage = 0;
}
if (wParam == VK_ESCAPE)
{
DestroyWindow(hwnd);
}
switch (g_stage)
{
case 0:
{
switch (wParam)
{
case 87:
case VK_UP: if (sta == 0)break; sta--; g_Pointer.y -= 70;
/* char s[25];
sprintf(s, "%d_%d(%d,%d",2,4, 700, 600);
wchar_t t[30];
swprintf(t, L"%d", strlen(s));
MessageBox(NULL, t, L"错误", MB_OK); */break;
case 83:
case VK_DOWN: if (sta == 4)break; sta++; g_Pointer.y += 70; break;
case VK_RETURN:
switch (sta)
{
case 0: //MessageBox(NULL, L"单人游戏", L"开始", MB_OK);
g_stage = 1;
g_CherkPoint = 1;
LoadMap(g_CherkPoint, POINT_1_F);
SetTimer(hwnd, 1, 3000, NULL); //无敌倒计时
SetTimer(hwnd, 8, 1000, NULL);
Game_Init(hwnd);
break;
case 1:
g_Pointer.y -= 70; g_Pointer.x = 30;
sta = 0; g_stage = 2;
Game_Init(hwnd);
break;
case 2:
ConnectServer();
g_stage = 4;
break;
case 3:
LoadMap(1, POINT_1_F);
g_Tanker[0].x = 280;
g_Tanker[0].y = 600;
g_stage = 9;
break;
case 4:
SaveMap(1, POINT_1_F); PostQuitMessage(0);
break;
default:break;
}break;
} break;
case 1:
if (wParam == 'l' || wParam == 'L')
if (MessageBox(NULL, L"是否保存进度", L"保存", MB_OKCANCEL) != IDCANCEL)
{
SavePlayerData(0, PLAYER_POINET_F);
SaveMap(0, PLAYER_SAVE_MAP);
g_stage = 0;
}
if (wParam == 't' || wParam == 'T')
{
if (ReadPlayerData(0, PLAYER_POINET_F))
{
LoadMap(0, PLAYER_SAVE_MAP);
SetTimer(hwnd, 1, 3000, NULL); //无敌倒计时
Game_Init(hwnd);
}
}
if (wParam == 'U' || wParam == 'u')
{
if (g_CherkPoint < CHERK_S)
{
g_CherkPoint++;
LoadMap(g_CherkPoint, POINT_1_F);
SetTimer(hwnd, 1, 3000, NULL); //无敌倒计时
Game_Init(hwnd);
}
/* else
{
LoadMap(0, PLAYER_SELF_MAP);
SetTimer(hwnd, 1, 3000, NULL); //无敌倒计时
Game_Init(hwnd);
}*/
}
break;
case 2:
switch (wParam)
{
case 87:
case VK_UP: if (sta1 == 0)break; sta1--; g_Pointer.y -= 70; break;
case 83:
case VK_DOWN: if (sta1 == 4)break; sta1++; g_Pointer.y += 70; break;
case VK_RETURN:
switch (sta1)
{
case 0:
g_stage = 3;
LoadMap(1, POINT_1_F);
SetTimer(hwnd, 2, 3000, NULL);
Game_Init(hwnd);
break;
case 1:
// g_stage = 5;
g_Pointer.y -= 70; g_Pointer.x = 30;
sta1 = 0;
g_stage = 5;
LoadMap(1, P_P_GAME);
Game_Init(hwnd);
//MessageBox(NULL, L"碰碰车", L"开始", MB_OK);
break;
case 2:
g_Pointer.y -= 140; g_Pointer.x = 30;
sta1 = 0;
g_stage = 6;
LoadMap(1, PLAYER_SPEECH_F);
Game_Init(hwnd);
//MessageBox(NULL, L"生死时速", L"开始", MB_OK);
break;
case 3:
g_Pointer.y -= 210; g_Pointer.x = 30;
sta1 = 0;
g_stage = 7;
LoadMap(1, SURIVE_GAME);
Game_Init(hwnd);
//MessageBox(NULL, L"求生考验", L"开始", MB_OK);
break;
case 4:
g_Pointer.y -= 280; g_Pointer.x = 30;
sta1 = 0;
g_stage = 8;
LoadMap(1, RUNNINGTANKER_GAME);
Game_Init(hwnd);
//MessageBox(NULL, L"你追我赶", L"开始", MB_OK);
break;
default:
break;
}
}break;
case 3: break;
case 4:
OnKeyUp(wParam); break;
case 5: break;
case 6: break;
case 7: break;
case 8: break;
case 9:
if (mode == 0)
switch (wParam)
{
case 87:
case VK_UP: g_Tanker[0].MoveTank(0, -TANKSIZE); break;
case 83:
case VK_DOWN: g_Tanker[0].MoveTank(0, TANKSIZE); break;
case 'A':case 'a':
case VK_LEFT: g_Tanker[0].MoveTank(-TANKSIZE, 0); break;
case 'd':case 'D':
case VK_RIGHT: g_Tanker[0].MoveTank(TANKSIZE, 0); break;
case VK_SPACE: g_Tanker[0].setmap(); break;
case 'p':case 'P': mode = 1; break;
default:break;
}
if (wParam == 'o' || wParam == 'O')
mode = 0;
if (wParam == 'i' || wParam == 'I')
ClearMap();
if (wParam == 'l' || wParam == 'L')
if (MessageBox(NULL, L"是否保存地图", L"保存", MB_OKCANCEL) != IDCANCEL)
{
SaveMap(0, PLAYER_SELF_MAP);
g_stage = 0;
}
}
g_Tanker[0].tag = 0;
}
break;
case WM_LBUTTONDOWN:
if (!NetWorkOk)
LButtonDown(lParam);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
break;
}
return 0;
}
VOID Game_Paint(HWND hwnd)
{
//BG
if (g_stage != 4)
{
SelectObject(g_bufdc, g_hBackGround);
BitBlt(g_mdc, 0, 0, g_offset, WINDOW_HEIGHT, g_bufdc, WINDOW_WIDTH - g_offset, 0, SRCCOPY);
BitBlt(g_mdc, g_offset, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
}
if (g_offset >= WINDOW_WIDTH)
g_offset = 0;
g_offset += 1;
if (!isgameover) {
if (!g_NowEnemy_s&&g_stage!=5&&g_stage!=6&&g_stage!=7&&g_stage!=8)
{//胜利
SelectObject(g_bufdc, g_hWin);
TransparentBlt(g_mdc, 100, 100, 424, 174, g_bufdc, 0, 0, 424, 174, RGB(0, 0, 0));
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
if (g_CherkPoint < CHERK_S)
{
MessageBox(NULL, L"很好这很骚,你赢了,是否开始下一局", L"胜利", MB_OKCANCEL);
LoadMap(++g_CherkPoint, POINT_1_F);
}
else {
MessageBox(NULL, L"看来我的关卡挡不住你了", L"通关", MB_OKCANCEL);
g_stage = 0;
}
Game_Init(hwnd);
}
if (g_stage == 1 || g_stage>2)
if (g_stage != 4)
Weather_System(g_WearthType);
switch (g_stage)
{
case 0:
if (g_Pointer.x > 310)
g_Pointer.x -= 5;
else
g_Pointer.x += 5;
SelectObject(g_bufdc, g_hBackStart);
BitBlt(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
SelectObject(g_bufdc, g_hPointer);
TransparentBlt(g_mdc, g_Pointer.x, g_Pointer.y, 75, 50, g_bufdc, 0, 0, 75, 50, RGB(27, 27, 27));
//BitBlt(g_mdc, g_Pointer.x, g_Pointer.y, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
break;
case 1:
Checkpoint_1();
break;
case 2:
if (g_Pointer.x > 310)
g_Pointer.x -= 5;
else
g_Pointer.x += 5;
SelectObject(g_mdc, GetStockObject(BLACK_BRUSH));
Rectangle(g_mdc, WINDOW_WIDTH, 0, 200, WINDOW_HEIGHT);
SelectObject(g_bufdc, g_hSmallMenu);
BitBlt(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
SelectObject(g_bufdc, g_hPointer);
TransparentBlt(g_mdc, g_Pointer.x, g_Pointer.y, 75, 50, g_bufdc, 0, 0, 75, 50, RGB(27, 27, 27));
//Checkpoint_2();
break;
case 3:Checkpoint_2(); break;
case 4: NetWork(); break;
case 5:CheckppGame(); break;
case 6:CheckSpeechGame();
break;
case 7:CheckSuriveGame(); break;
case 8:CheckRunningGame(); break;
case 9:
Editmap();
break;
default:break;
}
if (!NetWorkOk)
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
}
else
{
if (g_stage == 5)
{
if (Speech[1] > Speech[0])
{
MessageBox(NULL, L"2P玩家胜利", L"1P菜鸡你失败了", MB_OK);
g_stage = 0;
Game_Init(hwnd);
Speech[0] = 5;
Speech[1] = 5;
return;
}
else //if (g_Tanker[1].x <= 0 || g_Tanker[1].y <= 0 || g_Tanker[1].x >= 28 || g_Tanker[1].y >= 17)
{
MessageBox(NULL, L"1P玩家胜利", L"2P菜鸡你失败了", MB_OK);
g_stage = 0;
Game_Init(hwnd);
Speech[0] = 5;
Speech[1] = 5;
return;
}
/*SelectObject(g_bufdc, g_hFAIL);
TransparentBlt(g_mdc, 200, 100, 248, 160, g_bufdc, 0, 0, 248, 160, RGB(0, 0, 0));
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);*/
}
if (g_stage == 6||g_stage==7||g_stage==8)
{
if (Winner == 0)
{
MessageBox(NULL, L"1P玩家胜利", L"2P菜鸡你失败了", MB_OK);
g_stage = 0;
Game_Init(hwnd);
Speech[0] = 5;
Speech[1] = 5;
}
else
{
MessageBox(NULL, L"2P玩家胜利", L"1P菜鸡你失败了", MB_OK);
g_stage = 0;
Game_Init(hwnd);
Speech[0] = 5;
Speech[1] = 5;
}
}
else
{
if (g_stage != 4)
{
SelectObject(g_bufdc, g_hFAIL);
TransparentBlt(g_mdc, 200, 100, 248, 160, g_bufdc, 0, 0, 248, 160, RGB(0, 0, 0));
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
}
if (MessageBox(NULL, L"菜鸡被打爆了,是否从新开始?", L"失败", MB_OKCANCEL) != IDCANCEL)
{
SetTimer(hwnd, 1, 3000, NULL);
isnew = true;
LoadMap(g_CherkPoint, POINT_1_F);
}
else
{
g_stage = 0;
}
}
Game_Init(hwnd);
}
g_tPre = GetTickCount();
}
BOOL Game_Init(HWND hwnd)
{
// g_WearthType = rand() % 2;
g_textPos.x = 0;
g_textPos.y = 150;
isgameover = false;
g_time = 0;
isnew = true;
srand((unsigned)time(NULL));
g_tankFlash = -10;
g_NowEnemy_s = ENEMY1_S + ENEMY_S + g_CherkPoint * 8;
for (int i = 0, k = 480; i < 2; i++, k += 160) //
c++坦克大战
最新推荐文章于 2025-06-02 15:46:00 发布