⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 本人初学window网络编程时开发的第一款网络游戏
💻 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 + -