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

📄 llkdlg.cpp

📁 一款很不错的evc下运行的游戏
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}

void CLlkDlg::ReadFile()		//读取最高分
{
	CFile file;
	file.Open(_T("\\record.txt"), CFile::modeRead, NULL);
	file.Read(&m_lPoint, sizeof(m_lPoint));
	m_strBox.Format(_T("%d"), m_lPoint);
	file.Close();
}

void CLlkDlg::ReleasePicPlace(int x, int y)		//消去位图链表
{
   int nIndex = GetPicIndex(x, y);

	LPCJL_PATH pPic = PIC_PLACE[nIndex];
	LPCJL_PATH pPrev = NULL;

	while (pPic)
	{
		if ((pPic->x == x) && (pPic->y == y))
		{
			if (pPrev)
				pPrev->prev = pPic->prev;
			else
				PIC_PLACE[nIndex]= pPic->prev;
			GlobalFree(pPic);
			return;
		}
		pPrev = pPic;
		pPic = pPic->prev;
	}	
}

void CLlkDlg::ReleasePlace()					//消去位图数组值
{
	LPCJL_PATH pPic = NULL;
	LPCJL_PATH pPrev = NULL;

	for (int i = 0; i <= 28; i++)
	{
		pPic = PIC_PLACE[i];

		while (pPic)
		{
			pPrev = pPic->prev;
			GlobalFree(pPic);
			pPic = pPrev;
		}
	}
}

void CLlkDlg::SelButton(CDC *pDC)				//绘“选项”按扭  
{	

    CDC Mydc1,Mydc2;
    CBitmap Button,ButtonDown;

	Button.LoadBitmap(IDB_BUTTON);
	ButtonDown.LoadBitmap(IDB_BUTTON_DOWN);

	Mydc1.CreateCompatibleDC(pDC);
	Mydc1.SelectObject(&Button);

	Mydc2.CreateCompatibleDC(pDC);
	Mydc2.SelectObject(&ButtonDown);
    
	if (m_bSel)
	{    
		pDC->BitBlt(418,18,48,25,&Mydc2,0,0,SRCCOPY);
	}

	else
	{
		pDC->BitBlt(418,18,48,25,&Mydc1,0,0,SRCCOPY);
	}
	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(255,255,255));
	
 	CFont *pOldFont,*font; 
 	font = new CFont; 
 	font->CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE,0,0,0,0,0,0, _T("Arial"));
 	pOldFont = (CFont*)pDC->SelectObject(font);

	if (m_nLanguage == 0)
    pDC->DrawText(_T("SELE"), CRect(418,20,466,43), DT_CENTER);
	if (m_nLanguage == 1)
    pDC->DrawText(_T("选项"), CRect(418,20,466,43), DT_CENTER);
 
	if (m_nButton == 3)							//绘选择框
	{
		CPen pen( PS_SOLID ,3,RGB(167,241,243));
		CPen *pOldPen = pDC->SelectObject(&pen);
    
		pDC->MoveTo(419, 18);
		pDC->LineTo(419, 43);
		pDC->MoveTo(419,41);
		pDC->LineTo(464, 41);
		pDC->MoveTo(464,43);
		pDC->LineTo(464, 18);
		pDC->MoveTo(464,19);
		pDC->LineTo(419, 19);

   		pOldPen->DeleteObject();
	}

 	Mydc2.DeleteDC();
	pOldFont->DeleteObject();
 	font->DeleteObject();
	delete font;
	Mydc1.DeleteDC();
	Button.DeleteObject();
	ButtonDown.DeleteObject(); 
}

void CLlkDlg::SetInGame(BOOL bInGame)				//设置是否游戏
{
	m_bInGame = bInGame;
}

void CLlkDlg::SetLeft(int nLeft)					//设置剩余牌数
{
   	m_nLeft = nLeft;
}

void CLlkDlg::SetLevel(int nNewLevel)				//关卡设置
{
   	m_nLevel = nNewLevel;
}

void CLlkDlg::SetPause(BOOL bPause)					//暂停设置	
{
   m_bPause = bPause;
}

void CLlkDlg::SetPicIndex(int x, int y, int nIndex) //设置位图坐标
{
    int index = GetPicIndex(x, y);
	int	nVal = GetValue(x, y);
	CJL_MAP[x][y] = nVal - index + nIndex;
}

void CLlkDlg::SetPos(float nPos)					//设置时间条当前位置					
{
	m_nPos = nPos;
}

void CLlkDlg::SetValue(int x, int y, int nNewValue) //设置坐标值
{
	CJL_MAP[x][y] = nNewValue;
}

void CLlkDlg::ShowTop(CDC *pDC)						//显示提示信息				
{ 
	
 	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(255,255,255));    
 	
 	CFont *pOldFont,*font; 
 	font = new CFont; 
 	font->CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE,0,0,0,0,0,0, _T("Arial"));
 	pOldFont = (CFont*)pDC->SelectObject(font); 
 
    pDC->DrawText(m_strTop, CRect(13,0,213,20), NULL); 
    
	pOldFont->DeleteObject();
 	font->DeleteObject();     
	delete font;
}

void CLlkDlg::Shuffle()								//洗牌							
{
  	int i, j;
	CDWordArray arPic;
	
	for (i = 1; i <= ROW_NUMBER; i++)
	{
	   	for (j = 1; j <= LINE_NUMBER; j++)
		{ 
		   	if (GetPicIndex(i, j) > 0)
			{
			 	arPic.Add(GetPicIndex(i, j));
				if (((GetValue(i, j) & LS_CLICK) == LS_CLICK))
				{
					UpdateClkState(i, j, LS_NOCLK);
				}
			}
		}
	}

    int index;
	for (i = 1; i <= ROW_NUMBER; i++)
	{
	    for (j = 1; j <= LINE_NUMBER; j++)
		{ 
			if (GetPicIndex(i, j) > 0)
			{
				index = (int(rand() * 001 + rand() * 0.1 + rand())) % arPic.GetSize();
			 	SetPicIndex(i, j, arPic.GetAt(index));
				arPic.RemoveAt(index);
			}
		}
	}

	ReleasePlace();

	for(i = 0; i < 28; i++)
    {
		PIC_PLACE[i+1] = NULL;
	}
	ListPicPlace();
}
void CLlkDlg::TipButton(CDC *pDC)					//绘提示按扭			
{
    CDC Mydc1,Mydc2;
    CBitmap Button,ButtonDown;
    
	Button.LoadBitmap(IDB_BUTTON);
	ButtonDown.LoadBitmap(IDB_BUTTON_DOWN);

	Mydc1.CreateCompatibleDC(&Mydc2);
	Mydc1.SelectObject(&Button);

	Mydc2.CreateCompatibleDC(&Mydc2);
	Mydc2.SelectObject(&ButtonDown);
 		
  	if (m_bTip)
	{   
		pDC->BitBlt(296,18,48,25,&Mydc2,0,0,SRCCOPY);
	}
	else
	{
		pDC->BitBlt(296,18,48,25,&Mydc1,0,0,SRCCOPY);
	}
 
 	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(255,255,255));
	
 	CFont *pOldFont,*font; 
 	font = new CFont; 
 	font->CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE,0,0,0,0,0,0, _T("Arial"));
 	pOldFont = (CFont*)pDC->SelectObject(font); 
    if (m_nLanguage == 0)
    pDC->DrawText(_T("TIP"), CRect(296,20,344,43), DT_CENTER); 
	if (m_nLanguage == 1)
    pDC->DrawText(_T("提示"), CRect(296,20,344,43), DT_CENTER); 

	if (m_nButton == 1)											
	{   
		CPen pen( PS_SOLID ,3,RGB(167,241,243));
		CPen *pOldPen = pDC->SelectObject(&pen); 

		pDC->MoveTo(297, 18);
		pDC->LineTo(297, 43);
		pDC->MoveTo(297,41);
		pDC->LineTo(342, 41);
		pDC->MoveTo(342,43);
		pDC->LineTo(342, 18);
		pDC->MoveTo(342,19);
		pDC->LineTo(297,19);

  		pOldPen->DeleteObject();
	
	}
	if (m_nPrompt <= 0)
       DrawSemiTransparentRect(pDC,CRect(296, 18, 344, 43),RGB(0, 0, 0));

	Mydc1.DeleteDC();
 	Mydc2.DeleteDC();

	pOldFont->DeleteObject();
 	font->DeleteObject();
	delete font;
	Button.DeleteObject();
	ButtonDown.DeleteObject();
}

void CLlkDlg::UpdateClkState(int x, int y, int nNewVal)		//修改位图显示
{
	if (!(nNewVal == LS_CLICK || nNewVal == LS_NOCLK || nNewVal == LS_DBLCLK))
	return;

	int nVal = GetValue(x, y);
	nVal &= ~LS_DBLCLK;
	nVal &= ~LS_CLICK;
	nVal &= ~LS_NOCLK;

	SetValue(x, y, nVal |= nNewVal);
}

void CLlkDlg::UpdateLeft(int nVal)							//修改剩余牌数
{
   if (m_nLeft == 0)
		return;
	m_nLeft -= nVal;
}

void CLlkDlg::UpdatePos()									//修改时间条位置
{
	m_nPos += m_nSpeed;
}

void CLlkDlg::UpdatePrompt(int nAddVal)						//修改提示次数
{
	m_nPrompt += nAddVal;
}

void CLlkDlg::UpdateScore(int nAddScore)					//修改分数
{
	m_nScore += nAddScore;
}

void CLlkDlg::UpdateShuffle(int nAddVal)					//修改洗牌次数
{
	m_nShuffle += nAddVal;
}

void CLlkDlg::WashButton(CDC *pDC)							//绘洗牌按扭
{

    CDC Mydc1,Mydc2;
    CBitmap Button,ButtonDown;

	Button.LoadBitmap(IDB_BUTTON);
	ButtonDown.LoadBitmap(IDB_BUTTON_DOWN);

	Mydc1.CreateCompatibleDC(pDC);
	Mydc1.SelectObject(&Button);

	Mydc2.CreateCompatibleDC(pDC);
	Mydc2.SelectObject(&ButtonDown);
    
	if (m_bWash)
	{   
		pDC->BitBlt(358,18,48,25,&Mydc2,0,0,SRCCOPY);
	}
	else
	{
 
		pDC->BitBlt(358,18,48,25,&Mydc1,0,0,SRCCOPY);
	}
	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(255,255,255));
	
 	CFont *pOldFont,*font; 
 	font = new CFont; 
 	font->CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE,0,0,0,0,0,0, _T("Arial"));
 	pOldFont = (CFont*)pDC->SelectObject(font);
	if (m_nLanguage == 0)
    pDC->DrawText(_T("SHUF"),CRect(358,20,406,43),DT_CENTER); 
	if (m_nLanguage == 1)
    pDC->DrawText(_T("洗牌"),CRect(358,20,406,43),DT_CENTER); 

	if (m_nButton == 2)
	{
		CPen pen( PS_SOLID ,3,RGB(167,241,243));
		CPen *pOldPen = pDC->SelectObject(&pen); 
    
		pDC->MoveTo(359, 18);
		pDC->LineTo(359, 43);
		pDC->MoveTo(359,41);
		pDC->LineTo(404, 41);
		pDC->MoveTo(404,43);
		pDC->LineTo(404, 18);
		pDC->MoveTo(404,19);
		pDC->LineTo(359, 19);

   		pOldPen->DeleteObject();
	}

	if (m_nShuffle <= 0)
       DrawSemiTransparentRect(pDC,CRect(358, 18, 406, 43),RGB(0, 0, 0));

	Mydc1.DeleteDC();
 	Mydc2.DeleteDC();
	pOldFont->DeleteObject();
 	font->DeleteObject();
	delete font;
	Button.DeleteObject();
	ButtonDown.DeleteObject(); 
}

void CLlkDlg::WriteFile()								//记录最高分
{
	CFile file;
	file.Open(_T("\\record.txt"),CFile::modeWrite,NULL);
	file.Write(&m_nScore, 20);
	file.Close();
}

void CLlkDlg::OnGameAbandon()							//放弃游戏
{	
 	// TODO: Add your command handler code here

 	SetInGame(FALSE);
 	SetPause();
 	ReleasePlace();
 	InitMap();
 	SetPos(0);
 
 	m_bSecClk = FALSE; 
	m_nXIndex = -1;
 	m_nYIndex = -1;
 	m_strTop = ("");
 
 	m_nMin = 2;
 	m_nSec1 = 0;
 	m_nSec2 = 0;
	m_nTimer = 0;
 	m_nPane_x = 0;
 	m_nPane_y = 0;
	m_nMenu_y = 0;
    
}

void CLlkDlg::DrawMessage(CDC *pDC)						//绘信息栏
{   
	CString str;

    pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(255,255,255));

	CFont *pOldFont,*font; 
 	font = new CFont; 
 	font->CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE,0,0,0,0,0,0, _T("Arial"));
 	pOldFont = (CFont*)pDC->SelectObject(font); 
    if (m_nLanguage == 0)
	{
		pDC->DrawText( _T("SCORE:"), CRect(390,55,460,71), DT_RIGHT);
		str.Format(_T(" %d "), GetScore());
		pDC->DrawText(str, CRect(390,73,460,89), DT_RIGHT); 
   
		pDC->DrawText( _T("LEVEL:"), CRect(390,94,460,110), DT_RIGHT);
		str.Format(_T(" %d "), GetLevel());
		pDC->DrawText(str, CRect(390,112,460,128), DT_RIGHT);
	
		pDC->DrawText( _T("TIP:"), CRect(390, 133,460,149), DT_RIGHT);
		str.Format(_T(" %d "), GetPrompt());
		pDC->DrawText(str, CRect(390,151,460,167), DT_RIGHT);  

		pDC->DrawText( _T("SHUFFLE:"), CRect(390,172,460,188), DT_RIGHT);
		str.Format(_T(" %d "), GetShuffle());
		pDC->DrawText(str, CRect(390,190,460,206), DT_RIGHT);			

		pDC->DrawText( _T("NUMBER:"), CRect(390,211,460,227), DT_RIGHT);
		str.Format(_T("%d/%d"), GetTotal() - GetLeft(), GetTotal());
		pDC->DrawText(str, CRect(390,229,460,245), DT_RIGHT);
	}
	if (m_nLanguage == 1)
	{
		pDC->DrawText( _T("分数:"), CRect(390,55,460,71), DT_RIGHT);
		str.Format(_T(" %d "), GetScore());
		pDC->DrawText(str, CRect(390,73,460,89), DT_RIGHT); 
   
		pDC->DrawText( _T("关数:"), CRect(390,94,460,110), DT_RIGHT);
		str.Format(_T(" %d "), GetLevel());
		pDC->DrawText(str, CRect(390,112,460,128), DT_RIGHT);
	
		pDC->DrawText( _T("提示:"), CRect(390, 133,460,149), DT_RIGHT);
		str.Format(_T(" %d "), GetPrompt());
		pDC->DrawText(str, CRect(390,151,460,167), DT_RIGHT);  

		pDC->DrawText( _T("洗牌:"), CRect(390, 172,460,188), DT_RIGHT);
		str.Format(_T(" %d "), GetShuffle());
		pDC->DrawText(str, CRect(390,190,460,206), DT_RIGHT);			

		pDC->DrawText( _T("牌数:"), CRect(390,211,460,227), DT_RIGHT);
		str.Format(_T("%d/%d"), GetTotal() - GetLeft(), GetTotal());
		pDC->DrawText(str, CRect(390,229,460,245), DT_RIGHT);
	}

    pOldFont->DeleteObject();
	font->DeleteObject();
	delete font;
}

void CLlkDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if (!GetPause())
	{
		m_nTimer++;
		m_nTimer %= m_nCycle;
   		if (GetPos()<GetUpper() && !m_nTimer)
		{	   	
			UpdatePos();
			if (m_nSec2 == 0)
			{	   
				if (m_nSec1 == 0)
				{   
					if (m_nMin == 0)
					{
						m_nMin = 0;
					}
					else
					{
						m_nMin--;
						m_nSec1 = 5;
						m_nSec2 = 10;
					}
				}
				else
				{
					m_nSec1--;
					m_nSec2 = 10;
				}
			}	
       		m_nSec2--;
		}
		if (GetPos() >= GetUpper())
		{
			SetPause();
			SetInGame(false);
			if (m_nScore > m_lHighPoint)
				WriteFile();
			m_bSele_ok = true;
			if (m_bEffect && !m_bOvermusic)
				PlaySound (TEXT("\\NAND\\llk(sound)\\OVER.wav"), NULL, SND_ASYNC | SND_NODEFAULT);
			m_bOvermusic = TRUE;
 		}
	}
    this->Invalidate(false);
	CDialog::OnTimer(nIDEvent);
}

void CLlkDlg::DrawMenu(CDC *pDC)							//绘菜单
{
	if (m_bSele_ok)
	{	   
		CDC dc;
		CBitmap menu;
		menu.LoadBitmap(IDB_MENU);

		dc.CreateCompatibleDC(pDC);
		dc.SelectObject(&menu);
		pDC->BitBlt(146,84,128,126,&dc,0,0,SRCCOPY);

		pDC->SetBkMode(TRANSPARENT);
		pDC->SetTextColor(RGB(255,255,255));    
 	

⌨️ 快捷键说明

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