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

📄 ui.cpp

📁 本人初学window网络编程时开发的第一款网络游戏
💻 CPP
字号:
#include ".\ui.h"

CUI::CUI(HANDLE hOut)
{
    m_hOut=hOut;

}

CUI::~CUI(void)
{
}

void CUI::UpDate(int hp1 , int mp1 , int hp2 , int mp2)
{
    DrawBar(hp1 , mp1 , hp2 , mp2);
}

void CUI::AddInfo(char* chInfo)
{
    string strInfo=chInfo;
	if (strInfo.size()<=23)    //超过一行变两行
	{
        vecInfo.push_back(chInfo);
	} 
	else
	{
        string str1(strInfo.begin() , strInfo.begin()+22);
		string str2(strInfo , 22);
        vecInfo.push_back(str1);
		str2="  "+str2;
		if (str2.size()<=23)
		{
			vecInfo.push_back(str2);
		} 
		else
		{
			string str3(str2.begin() , str2.begin()+22);
			string str4(str2 , 22);
			str4="  "+str4;
			vecInfo.push_back(str3);
			vecInfo.push_back(str4);
		}
		
		
	}
	for (int i=0 ; vecInfo.size()>=5 ; i++)
	{
         vecInfo.erase(&vecInfo[0]);
	}

    //清空
    
	FillBox(0 , 20 , 5 , 25 , BACKGROUND_GREEN | BACKGROUND_BLUE);
	for (int i=0 ; i<5 ; i++)
	{
		DrawText(1 , 20+i , "                       " , BACKGROUND_GREEN | BACKGROUND_BLUE);
	}

	//绘制

    
	for (int i=0 ; i<vecInfo.size() ; i++)
	{
        DrawText(1 , 20+i , vecInfo[i].c_str() , FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY |BACKGROUND_GREEN | BACKGROUND_BLUE);
	}
}

void CUI::FillBox(int x , int y , int row , int col , WORD type)
{
	WORD attBox=type;   //方块属性
	COORD pos={x , y};
    for (int i=0 ; i<row ; i++)
    {
        FillConsoleOutputAttribute(m_hOut, attBox, col, pos, NULL); 
		pos.Y++;
    }
}
void CUI::DrawText(int x , int y , const char* chText , WORD type)
{
	WORD attText=type;   //文字属性
	COORD pos={x , y};
	WriteConsoleOutputCharacter(m_hOut, chText, strlen(chText), pos, NULL);
	FillConsoleOutputAttribute(m_hOut , attText , strlen(chText) , pos , NULL);

}
void CUI::TextBox(char* chText)
{
    FillBox(38 , 12 , 3 , 24 , BACKGROUND_RED);
	DrawText(38 , 13 , chText , FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_RED);
}
void CUI::ClearTextBox()
{
	DrawText(38 , 12 , "                        " , FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
	DrawText(38 , 13 , "                        " , FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
	DrawText(38 , 14 , "                        " , FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);


}
void CUI::startCG()
{
	char* str="        雷电Online        ";
	// 计算显示窗口大小和位置
	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(m_hOut, att1, chNum + 8, posShadow, NULL); 
		posShadow.Y++;
	}
	// 填充窗口背景
	for (i=0; i<5; i++)
	{
		FillConsoleOutputAttribute(m_hOut, att0, chNum + 4, posText, NULL); 
		posText.Y++;
	}
	// 写文本和边框
	posText.X = x1 + 2;
	posText.Y = y1 + 4;
	WriteConsoleOutputCharacter(m_hOut, str, strlen(str), posText, NULL); 
	COORD miaolinTextPos={35 , 10};
	WriteConsoleOutputCharacter(m_hOut, "Create By MiaoLin", strlen("Create By MiaoLin"), miaolinTextPos, NULL);
	FillConsoleOutputAttribute(m_hOut , attText , strlen("Create By MiaoLin") , miaolinTextPos , NULL);
	COORD randTextPos={30 , 15};
	WriteConsoleOutputCharacter(m_hOut, "请按任意键开始游戏...", strlen("请按任意键开始游戏..."), randTextPos, NULL);
	FillConsoleOutputAttribute(m_hOut , attText2 , strlen("请按任意键开始游戏...") , randTextPos , NULL);
	COORD conTextPos={23 , 20};
	WriteConsoleOutputCharacter(m_hOut, "上下左右:WSAD | 开火:J | 必杀:K", strlen("上下左右:WSAD | 开火:J | 必杀:K"), conTextPos, NULL);
	FillConsoleOutputAttribute(m_hOut , attText3 , strlen("上下左右:WSAD | 开火:J | 必杀:K") , conTextPos , NULL);


	_getch();
	system("cls");
}
void CUI::DrawBar(int hp1 , int mp1 , int hp2 , int mp2)
{
	static int s_iFlash1=0;
	static int s_iFlash2=0;
     if (mp1>=10)
     {
		 s_iFlash1++;
     } 
     else
     {
		 s_iFlash1=0;
     }
	 if (mp2>=10)
	 {
		 s_iFlash2++;
	 } 
	 else
	 {
		 s_iFlash2=0;
	 }

     //玩家1血条
	 DrawText(5 , 8 , "  Player(上) " , FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
	 DrawText(1 , 10 , "  HP  " , FOREGROUND_RED | BACKGROUND_INTENSITY);
	 FillBox(6 , 10 , 1 , 10 , BACKGROUND_INTENSITY);  //清理上次绘制的痕迹
	 FillBox(6 , 10 , 1 , hp1 , BACKGROUND_RED);
	 //玩家1魔条
	 if (s_iFlash1%2!=0)
	 {
		 DrawText(1 , 12 , "  MP  " , FOREGROUND_BLUE | BACKGROUND_INTENSITY);
		 FillBox(6 , 12 , 1 , mp1 , BACKGROUND_BLUE);
	 } 
	 else
	 {
		 DrawText(1 , 12 , "  MP  " , FOREGROUND_BLUE | BACKGROUND_INTENSITY);
		 FillBox(6 , 12 , 1 , 10 , BACKGROUND_INTENSITY);//清理上次绘制的痕迹
	     FillBox(6 , 12 , 1 , mp1 , BACKGROUND_BLUE | BACKGROUND_INTENSITY);
	 }
		
     //玩家2血条
	DrawText(5 , 14 , "  Player(下)  " , FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
	DrawText(1 , 16 , "  HP  " , FOREGROUND_RED | BACKGROUND_INTENSITY);
    FillBox(6 , 16 , 1 , 10 , BACKGROUND_INTENSITY);//清理上次绘制的痕迹
	FillBox(6 , 16 , 1 , hp2 , BACKGROUND_RED);

	//玩家2魔条
	if (s_iFlash2%2!=0)
	{
		DrawText(1 , 18 , "  MP  " , FOREGROUND_BLUE | BACKGROUND_INTENSITY);
		FillBox(6 , 18 , 1 , mp2 , BACKGROUND_BLUE | BACKGROUND_INTENSITY);
	} 
	else
	{
		DrawText(1 , 18 , "  MP  " , FOREGROUND_BLUE | BACKGROUND_INTENSITY);
		FillBox(6 , 18 , 1 , 10 , BACKGROUND_INTENSITY);//清理上次绘制的痕迹
		FillBox(6 , 18 , 1 , mp2 , BACKGROUND_BLUE);
	}

}
void CUI::FirstRender()
{
	FillBox(0 , 0 , 25 , 25 , BACKGROUND_INTENSITY);
	FillBox(2 , 1 , 6 , 21 , BACKGROUND_RED | BACKGROUND_BLUE);
	DrawText(3 , 3 , "    雷电 Online" , FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE);
	DrawText(14 , 5 , "v1.0" , FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE);

    //血魔条
	DrawBar(10 , 10 , 10 , 10);

	//信息区
   
	AddInfo("系统:游戏启动成功!");

	//显示连接服务器
	TextBox("   正在连接服务器...  ");

	Sleep(200);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -