📄 operate.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 + -