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

📄 operate.cpp

📁 这是一个好玩的扫雷程序,用vc实现,其亮点是位图的操作.
💻 CPP
字号:
// Operate.cpp: implementation of the COperate class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "WinMine.h"
#include "Operate.h"
#include <cstdlib>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

COperate::COperate()
{
	srand(time(NULL));
}

COperate::~COperate()
{
}

void COperate::Random(int a,int b)
{
	int m_nTotal = bombs;
	int i,j;
	for(i = 0; i < m_nRow; i++)
		for(j = 0; j < m_nColumn; j++)
		{
			Matrix[i][j] = 0;
			MatrixLabel[i][j] = false;
			R_MatrixLabel[i][j] = 0; //右键标记,1为旗,2为问号,0就代表右键没有访问过,3表示重返原来的样子
		}
	while(m_nTotal > 0)
	{
		i = rand()%m_nRow;
		j = rand()%m_nColumn;
		if(Matrix[i][j] != -1 && (a != i || b != j))
		{
			Matrix[i][j] = -1; //-1表示雷
			m_nTotal--;
		}
	}
	Statistic();
}

void COperate::Statistic()
{
	for(int i = 0; i < m_nRow; i++)
		for(int j = 0; j < m_nColumn; j++)
		{
			if(Matrix[i][j] == -1)
			{
				if((i+1)<m_nRow && Matrix[i+1][j] != -1)
					Matrix[i+1][j]++;
				if((j+1)<m_nColumn && Matrix[i][j+1] != -1)
					Matrix[i][j+1]++;
				if((i-1)>=0 && Matrix[i-1][j] != -1)
					Matrix[i-1][j]++;
				if((j-1)>=0 && Matrix[i][j-1] != -1)
					Matrix[i][j-1]++;
				if((i+1)<m_nRow && (j+1)<m_nColumn && Matrix[i+1][j+1] != -1)
					Matrix[i+1][j+1]++;
				if((i+1)<m_nRow && (j-1)>=0 && Matrix[i+1][j-1] != -1)
					Matrix[i+1][j-1]++;
				if((i-1)>=0 && (j+1)<m_nColumn && Matrix[i-1][j+1] != -1)
					Matrix[i-1][j+1]++;
				if((i-1)>=0 && (j-1)>=0 && Matrix[i-1][j-1] != -1)
					Matrix[i-1][j-1]++;
			}
		}
}

bool COperate::Check(int i,int j)
{
	if(Matrix[i][j] == -1)
		return true;
	return false;
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
void COperate::Search(int i,int j)
{
	if(Matrix[i][j] > 0)
	{
		MatrixLabel[i][j] = true;
		m_nVisit--;
		return;
	}
	else
	{
		MatrixLabel[i][j] = true; 
		m_nVisit--;
		if((i+1) < m_nRow && !MatrixLabel[i+1][j] && R_MatrixLabel[i+1][j] != 1)
			Search(i+1,j);
		if((i-1) >= 0 && !MatrixLabel[i-1][j] && R_MatrixLabel[i-1][j] != 1)
			Search(i-1,j);
		if((j+1) < m_nColumn && !MatrixLabel[i][j+1] && R_MatrixLabel[i][j+1] != 1)
			Search(i,j+1);
		if((j-1) >= 0 && !MatrixLabel[i][j-1] && R_MatrixLabel[i][j-1] != 1)
			Search(i,j-1);
		if((i+1) < m_nRow && (j+1) < m_nColumn && !MatrixLabel[i+1][j+1] && R_MatrixLabel[i+1][j+1] != 1)
			Search(i+1,j+1);
		if((i+1) < m_nRow && (j-1) >= 0 && !MatrixLabel[i+1][j-1] && R_MatrixLabel[i+1][j-1] != 1)
			Search(i+1,j-1);
		if((i-1) >= 0 && (j+1) < m_nColumn && !MatrixLabel[i-1][j+1] && R_MatrixLabel[i-1][j+1] != 1)
			Search(i-1,j+1);
		if((i-1) >=0 && (j-1) >=0 && !MatrixLabel[i-1][j-1] && R_MatrixLabel[i-1][j-1] != 1)
			Search(i-1,j-1);
	}
}

void COperate::RButtonDown(int a,int b)
{
	if(R_MatrixLabel[a][b] == 0)
	{
		RFlag++;
		R_MatrixLabel[a][b] = 1;
	}
	else if(R_MatrixLabel[a][b] == 1)
	{
		R_MatrixLabel[a][b] = 2;
		RFlag--;
	}
	else if(R_MatrixLabel[a][b] == 2)
		R_MatrixLabel[a][b] = 3;
	else
		if(R_MatrixLabel[a][b] == 3)
		{
			R_MatrixLabel[a][b] = 1;
			RFlag++;
		}
}

bool COperate::MButtonDown(int &a,int &b)
{
	int num = 0;
	if((a+1) < m_nRow && R_MatrixLabel[a+1][b] == 1)
		num++;
	if((a-1)>= 0 && R_MatrixLabel[a-1][b] == 1)
		num++;
	if((b+1) < m_nColumn && R_MatrixLabel[a][b+1] == 1)
		num++;
	if((b-1)>=0 && R_MatrixLabel[a][b-1] == 1)
		num++;
	if((a+1)<m_nRow && (b+1) < m_nColumn && R_MatrixLabel[a+1][b+1] == 1)
		num++;
	if((a+1)<m_nRow && (b-1)>=0 && R_MatrixLabel[a+1][b-1] == 1)
		num++;
	if((a-1)>=0 && (b+1)<m_nColumn && R_MatrixLabel[a-1][b+1] == 1)
		num++;
	if((b-1)>=0 && (a-1)>= 0 && R_MatrixLabel[a-1][b-1] == 1)
		num++;
	if(Matrix[a][b] == num)
	{
		if((a+1) < m_nRow && !MatrixLabel[a+1][b] && R_MatrixLabel[a+1][b] != 1)
		{
			if(Matrix[a+1][b] == -1)
			{
				a = a+1;
				return true;
			}
			Search(a+1,b);
		}
		if((a-1)>= 0 && !MatrixLabel[a-1][b] && R_MatrixLabel[a-1][b] != 1)
		{
			if(Matrix[a-1][b] == -1)
			{
				a -= 1;
				return true;
			}
			Search(a-1,b);
		}
		if((b-1)>=0 && !MatrixLabel[a][b-1] && R_MatrixLabel[a][b-1] != 1)
		{
			if(Matrix[a][b-1] == -1)
			{
				b -= 1;
				return true;
			}
			Search(a,b-1);
		}
		if((b+1) < m_nColumn && !MatrixLabel[a][b+1] && R_MatrixLabel[a][b+1] != 1)
		{
			if(Matrix[a][b+1] == -1)
			{
				b += 1;
				return true;
			}
			Search(a,b+1);
		}
		if((a+1) < m_nRow && (b-1)>=0 && !MatrixLabel[a+1][b-1] && R_MatrixLabel[a+1][b-1] != 1)
		{
			if(Matrix[a+1][b-1] == -1)
			{
				a += 1;
				b -= 1;
				return true;
			}
			Search(a+1,b-1);
		}
		if((a-1)>= 0 && (b-1)>=0 && !MatrixLabel[a-1][b-1] && R_MatrixLabel[a-1][b-1] != 1)
		{
			if(Matrix[a-1][b-1] == -1)
			{
				a -= 1;
				b -= 1;
				return true;
			}
			Search(a-1,b-1);
		}
		if((a+1) < m_nRow && (b+1) < m_nColumn && !MatrixLabel[a+1][b+1] && R_MatrixLabel[a+1][b+1] != 1)
		{
			if(Matrix[a+1][b+1] == -1)
			{
				a += 1;
				b += 1;
				return true;
			}
			Search(a+1,b+1);
		}
		if((a-1)>= 0 && (b+1) < m_nColumn && !MatrixLabel[a-1][b+1] && R_MatrixLabel[a-1][b+1] != 1)
		{
			if(Matrix[a-1][b+1] == -1)
			{
				a -= 1;
				b += 1;
				return true;
			}
			Search(a-1,b+1);
		}
	}
	return false;
}

⌨️ 快捷键说明

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