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

📄 minebutton.cpp

📁 一个扫雷小游戏
💻 CPP
字号:
// MineButton.cpp: implementation of the CMineButton class.
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "mine.h"
#include "LandMine.h"
extern CPen Pen1,Pen2,Pen3,Pen4,Pen5,Pen6,Pen7;

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

void CMineButton::DrawItem(BOOL bFail)
{
	
	RECT rect;
	rect.left = m_nX;
	rect.top = m_nY;
	rect.right = m_nX+14;
	rect.bottom = m_nY+14;
	CClientDC ClientDC(m_pParent);
	ClientDC.SetBkColor(RGB(198,198,198));

	ClientDC.SelectStockObject(LTGRAY_BRUSH);
	ClientDC.SelectObject(Pen6);
	ClientDC.Rectangle(&rect);
//shu color
	if(m_nStatus==MS_OPEN || bFail && m_nStatus==MS_FLAG && m_nMineNum>=0)
	{
		switch(m_nMineNum)
		{
		case 1:
			ClientDC.SetTextColor(RGB(0,128,0));
			break;

		case 2:
			ClientDC.SetTextColor(RGB(0,128,128));
			break;
			
		case 3:
			ClientDC.SetTextColor(RGB(0,0,128));
			break;
			
		case 4:
			ClientDC.SetTextColor(RGB(0,128,0));
			break;
			
		case 5:
			ClientDC.SetTextColor(RGB(128,0,0));
			break;
			
		case 6:
			ClientDC.SetTextColor(RGB(0,255,0));
			break;
			
		case 7:
			ClientDC.SetTextColor(RGB(128,128,0));
			break;
			
		case 8:
			ClientDC.SetTextColor(RGB(255,0,255));
			break;
		}
		char cTmp[2]={0,0};
		if(m_nMineNum>0)
		{
			cTmp[0]=m_nMineNum+'0';
			ClientDC.DrawText(cTmp,-1,&rect,DT_CENTER|DT_VCENTER);
		}
		int nI;

		ClientDC.SelectObject(Pen6);
		ClientDC.SetBkColor(RGB(198,198,198));
		ClientDC.SelectStockObject(NULL_BRUSH);
		ClientDC.Rectangle(rect.left,rect.top,rect.right+1,rect.bottom+1);
		for(nI=rect.left;nI<rect.right+1;nI=nI+2)//set xuxian
			ClientDC.SetPixel(nI,rect.bottom+1,RGB(0,128,0));
		for(nI=rect.top;nI<rect.bottom+1;nI=nI+2)
			ClientDC.SetPixel(rect.right+1,nI,RGB(0,128,0));		
		if(bFail && m_nStatus==MS_FLAG && m_nMineNum!=-1)
		{
			ClientDC.SelectObject(Pen4);
			ClientDC.MoveTo(rect.left+1,rect.top+1);
			ClientDC.LineTo(rect.right-1,rect.bottom-1);
			ClientDC.MoveTo(rect.right-1,rect.top+1);
			ClientDC.LineTo(rect.left+1,rect.bottom-1);	
		}
		return;
	}
	
	if(bFail==1 && m_nMineNum==-1)
	{
		CBitmap Bitmap;
		if(m_nStatus!=MS_EXPLODE)
			Bitmap.LoadBitmap(IDB_MINE);
		else
			Bitmap.LoadBitmap(IDB_MINEEXPLODE);

		// draw the whole button
		CDC memDC;
		memDC.CreateCompatibleDC(&ClientDC);
		CBitmap* pOld = memDC.SelectObject(&Bitmap);
		if (pOld == NULL)
			return;     // destructors will clean up

		
		ClientDC.BitBlt(rect.left, rect.top,16,16,
			&memDC, 0, 0, SRCCOPY);
		memDC.SelectObject(pOld);
		int nI;
		for(nI=rect.left;nI<rect.right+1;nI=nI+2)
			ClientDC.SetPixel(nI,rect.bottom+1,RGB(0,0,0));
		for(nI=rect.top;nI<rect.bottom+1;nI=nI+2)
			ClientDC.SetPixel(rect.right+1,nI,RGB(0,0,0));
		
		return;
	}
	
	if (m_nStatus == MS_QUEST)
	{
		ClientDC.SetTextColor(RGB(0,0,128));
		ClientDC.SetBkColor(RGB(198,198,198));
		ClientDC.DrawText("?",1,&rect,DT_CENTER|DT_VCENTER);
	}
	else
	{
		if(m_nStatus == MS_FLAG)
		{

			CBitmap Bitmap;
			Bitmap.LoadBitmap(IDB_FLAG);
			
			// draw the whole button
			CDC memDC;
			memDC.CreateCompatibleDC(&ClientDC);
			CBitmap* pOld = memDC.SelectObject(&Bitmap);
			if (pOld == NULL)
				return;     // destructors will clean up
			
			
			ClientDC.BitBlt(rect.left, rect.top,14,14,
				&memDC, 0, 0, SRCCOPY);
			memDC.SelectObject(pOld);
			
		}
	}
	ClientDC.SelectObject(Pen3);
	ClientDC.MoveTo(rect.right,rect.top);
	ClientDC.LineTo(rect.left,rect.top);
	ClientDC.LineTo(rect.left,rect.bottom);
	ClientDC.SelectObject(Pen7);
	ClientDC.LineTo(rect.right,rect.bottom);
	ClientDC.LineTo(rect.right,rect.top);
	
}

void CMineButton::ButtonDown(int Status)
{
	RECT rect;
	rect.left = m_nX;
	rect.top = m_nY;
	rect.right = m_nX+15;
	rect.bottom = m_nY+15;
	CClientDC ClientDC(m_pParent);

	if(Status==1)//当按下时的虚线
	{
		ClientDC.SelectObject(Pen6);
		ClientDC.SetBkColor(RGB(198,198,198));
		ClientDC.SelectStockObject(NULL_BRUSH);
		ClientDC.Rectangle(&rect);
		int nI;
		for(nI=rect.left;nI<rect.right;nI=nI+2)
			ClientDC.SetPixel(nI,rect.bottom,RGB(128,0,0));
		for(nI=rect.top;nI<rect.bottom;nI=nI+2)
			ClientDC.SetPixel(rect.right,nI,RGB(128,0,0));
	}
	else
	{
		ClientDC.SelectObject(Pen6);
		ClientDC.MoveTo(rect.left,rect.bottom);
		ClientDC.LineTo(rect.right,rect.bottom);
		ClientDC.LineTo(rect.right,rect.top+1);

		DrawItem(FALSE);
	}

}
int CMineButton::OpenMine()
{
	if(m_nStatus==MS_NORMAL || m_nStatus==MS_QUEST)
	{

		if (m_nMineNum != -1)
		{
			m_nStatus = MS_OPEN;
			DrawItem(FALSE);
			if(m_nMineNum == 0)
				return 0;
			else
				return 1;
		}
		else
		{
			m_nStatus = MS_EXPLODE;
			DrawItem(TRUE);		//Fail
			return -1;
		}
	}
	return 1;
};

⌨️ 快捷键说明

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