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

📄 menu.cpp

📁 人最近写的一个飞行类的游戏,主要目的是为了锻炼一下自己,提高编程水平,由于本人C++基础不是很好,所以程序中有很多地方设计的不是很合理,希望大家能够多提建议!
💻 CPP
字号:
// Menu.cpp: implementation of the CMenu class.
//
//////////////////////////////////////////////////////////////////////

#include "Menu.h"

char* CMenu::menuText[] = { "开始游戏",
						    "游戏说明",
						    "退出游戏"};

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMenu::CMenu()
{

}

CMenu::CMenu(CDirectWnd* win)
{
	m_win = win;
	m_choseitem = 1;
	m_itemnum = 3;
	for(int i=0;i<256;i++)
	{
		keydown[i]=0;
	}
}

CMenu::~CMenu()
{
	m_win = NULL;
}

void CMenu::CheckKeyboard()
{
	if(GetKey(VK_UP))
	{		
		ChangeItem(-1);
	}
	if(GetKey(VK_DOWN))
	{			
		ChangeItem(1);
	}
}

void CMenu::ChangeItem(int num)
{
	switch(num)
	{
		case -1:
			m_choseitem=(m_choseitem>1)?(m_choseitem-1):1;
			break;
		case 1:
			m_choseitem=(m_choseitem<m_itemnum)?(m_choseitem+1):m_itemnum;
			break;
	}
}
/*
void CMenu::AddTextItem(int x, int y, char *text, COLORREF textcolor,COLORREF bgcolor,int type)
{
	HDC buf_hdc;
	m_win->lpBackBuffer->GetDC(&buf_hdc);

	SetTextColor(buf_hdc,textcolor);
	if(type==1)
		SetBkMode(buf_hdc, TRANSPARENT);
	else if(type==2)
	{
		SetBkColor(buf_hdc,bgcolor);		
		SetBkMode(buf_hdc,OPAQUE);
	}
	TextOut(buf_hdc,x,y,text,strlen(text));
	m_win->lpBackBuffer->ReleaseDC(buf_hdc);
}

int CMenu::Run()
{
	CheckKeyboard();
	AddTextItem(280,140,"雷霆战机",RGB(0,255,128),RGB(255,255,255),1);
	AddTextItem(280,180,menuText[0],RGB(255,255,0),RGB(255,0,255),(m_choseitem==1)?2:1);
	AddTextItem(280,200,menuText[1],RGB(255,255,0),RGB(255,0,255),(m_choseitem==2)?2:1);
	AddTextItem(280,220,menuText[2],RGB(255,255,0),RGB(255,0,255),(m_choseitem==3)?2:1);
	AddTextItem(280,240,menuText[3],RGB(255,255,0),RGB(255,0,255),(m_choseitem==4)?2:1);
	return m_choseitem;
}
*/

void CMenu::AddMenuItem(int x, int y, char *text[], COLORREF textcolor,COLORREF bgcolor,int type)
{
	HDC buf_hdc;
	m_win->lpBackBuffer->GetDC(&buf_hdc);
	SetTextColor(buf_hdc,textcolor);

	for(int i = 0 ; i < m_itemnum ; i++)
	{
		
		SetBkMode(buf_hdc, TRANSPARENT);
		SetBkColor(buf_hdc,RGB(0,0,0));
		if(type-1 == i)
		{				
			SetBkMode(buf_hdc,OPAQUE);
			SetBkColor(buf_hdc,bgcolor);	
		}
		TextOut(buf_hdc,x,y+20*i,text[i],strlen(text[i]));
	}
	m_win->lpBackBuffer->ReleaseDC(buf_hdc);
}

void CMenu::AddMenuTitle(int x, int y, char *text, COLORREF textcolor)
{
	HDC buf_hdc;
	m_win->lpBackBuffer->GetDC(&buf_hdc);

	SetTextColor(buf_hdc,textcolor);		
	SetBkMode(buf_hdc, TRANSPARENT);
	TextOut(buf_hdc,x,y,text,strlen(text));
	
	m_win->lpBackBuffer->ReleaseDC(buf_hdc);
}

int CMenu::Run()
{	
	CheckKeyboard();
	m_win->BltBitMap(m_win->lpBKGObject[0]);
	AddMenuTitle(SrcWidth/2 - 40,180,"雷霆战机",RGB(0,255,128));
	AddMenuItem(SrcWidth/2 - 40,240,menuText,RGB(255,255,0),RGB(255,0,255),m_choseitem);
	return m_choseitem;
}

BOOL CMenu::GetKey(int key)
{
  if(KEYDOWN(key))
  {
	  keydown[key]=1;
  }
  if(keydown[key])
  {	  
	  if(!KEYDOWN(key))
	  {
		  keydown[key]=0;
		  return TRUE;
	  }
	  return FALSE;
  }
  return FALSE;
}

⌨️ 快捷键说明

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