📄 main.cpp
字号:
#include "inc.h"
#include "Plane.h"
#include "bullet.h"
#include "NPC.h"
#include "Game.h"
//全局变量
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
CPlane* player;
CBullet* bullet;
CNPC* npc;
CGame* game;
CRITICAL_SECTION g_cs;
CRITICAL_SECTION g_csBullet;
CRITICAL_SECTION g_csBomb;
void CheckKey(void *dummy);
void startCG();
void FillBox(HANDLE hStdOut, int x , int y , int row , int col , int type);
int main()
{
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitle("雷电2008");
GetConsoleScreenBufferInfo(hStdOut , &csbi);
srand(time(NULL));
InitializeCriticalSection(&g_cs);
InitializeCriticalSection(&g_csBullet);
InitializeCriticalSection(&g_csBomb);
game=new CGame(hStdOut , csbi);
player=new CPlane(hStdOut , csbi);
bullet=new CBullet(hStdOut , csbi);
npc=new CNPC(hStdOut , csbi);
startCG();
Sleep(200);
_beginthread(CheckKey , 0 , NULL);
npc->start();
while (true)
{
Sleep(20);
game->upDate();
EnterCriticalSection(&g_cs);
player->Render();
LeaveCriticalSection(&g_cs);
EnterCriticalSection(&g_csBullet);
bullet->Render();
LeaveCriticalSection(&g_csBullet);
}
DeleteCriticalSection(&g_cs);
DeleteCriticalSection(&g_csBullet);
DeleteCriticalSection(&g_csBomb);
return 0;
}
void CheckKey(void *dummy)
{
while (true)
{
EnterCriticalSection(&g_cs);
player->upData();
LeaveCriticalSection(&g_cs);
EnterCriticalSection(&g_csBullet);
if(GetAsyncKeyState(0x4A))
{
static int iFireTime=0;
iFireTime++;
if (iFireTime==1)
{
bullet->Fire(player);
}
if (iFireTime>=2)
{
iFireTime=0;
}
}
bullet->FireUlt(player);
bullet->upData();
LeaveCriticalSection(&g_csBullet);
Sleep(100);
}
}
void startCG()
{
UINT u=GetConsoleOutputCP();
char* str="雷电2008 网络对战超强DOS版";
// 计算显示窗口大小和位置
int x1, y1, x2, y2, chNum = strlen(str);
x1 = (80 - chNum)/2 - 2;
y1 = 10/2 - 2;
x2 = x1 + chNum + 4;
y2 = y1 + 5;
WORD att1 = BACKGROUND_INTENSITY; // 阴影属性
WORD att0 = FOREGROUND_RED |FOREGROUND_GREEN |FOREGROUND_BLUE | FOREGROUND_INTENSITY |BACKGROUND_RED | BACKGROUND_BLUE; // 文本属性
WORD attText = FOREGROUND_GREEN |BACKGROUND_INTENSITY; // 文本属性
WORD attText2 = FOREGROUND_RED |BACKGROUND_INTENSITY; // 文本属性
WORD attText3 = FOREGROUND_BLUE |BACKGROUND_INTENSITY; // 文本属性
// 设置阴影
COORD posShadow = {x1-2, y1-2}, posText = {x1, y1+2};
for (int i=0; i<22; i++)
{
FillConsoleOutputAttribute(hStdOut, att1, chNum + 8, posShadow, NULL);
posShadow.Y++;
}
// 填充窗口背景
for (i=0; i<5; i++)
{
FillConsoleOutputAttribute(hStdOut, att0, chNum + 4, posText, NULL);
posText.Y++;
}
// 写文本和边框
posText.X = x1 + 2;
posText.Y = y1 + 4;
WriteConsoleOutputCharacter(hStdOut, str, strlen(str), posText, NULL);
COORD miaolinTextPos={35 , 10};
WriteConsoleOutputCharacter(hStdOut, "Create By MiaoLin", strlen("Create By MiaoLin"), miaolinTextPos, NULL);
FillConsoleOutputAttribute(hStdOut , attText , strlen("Create By MiaoLin") , miaolinTextPos , NULL);
COORD randTextPos={30 , 15};
WriteConsoleOutputCharacter(hStdOut, "请按任意键开始游戏...", strlen("请按任意键开始游戏..."), randTextPos, NULL);
FillConsoleOutputAttribute(hStdOut , attText2 , strlen("请按任意键开始游戏...") , randTextPos , NULL);
COORD conTextPos={23 , 20};
WriteConsoleOutputCharacter(hStdOut, "上下左右:WSAD | 开火:J | 必杀:K", strlen("上下左右:WSAD | 开火:J | 必杀:K"), conTextPos, NULL);
FillConsoleOutputAttribute(hStdOut , attText3 , strlen("上下左右:WSAD | 开火:J | 必杀:K") , conTextPos , NULL);
SetConsoleTextAttribute(hStdOut, csbi.wAttributes); // 恢复原来的属性
_getch();
system("cls");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -