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

📄 cbombgame.cpp

📁 实现了windows自带小游戏扫雷的简单功能
💻 CPP
字号:
// CBombGame.cpp: implementation of the CBombGame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ClearBomb.h"
#include "CBombGame.h"
#include "stdlib.h"
#include "time.h"

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

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

CBombGame::CBombGame()
{

}

CBombGame::~CBombGame()
{

}

void CBombGame::InitBombArray()
{
	srand((int)time(NULL));
	int i=0,j=0,tmp;
	int BombPos[BombNum];
	BombPos[0] = rand()%(NXN*NXN);
	for(i=1;i<BombNum;i++)
	{
		tmp = rand()%(NXN*NXN);
		for(j=0;j<i;j++)
			if(tmp == BombPos[j])
				tmp++;		 
		if(tmp<BombPos[i-1])
		{
			for(j=i;j>=0;j--)
			{	

				BombPos[j] = BombPos[j-1];
				if(tmp>BombPos[j])
				{
					BombPos[j] = tmp; 
					break;
				}			
			}
		}
		else
			BombPos[i] = tmp;
	}

	for(i=0;i<NXN;i++)
	{
		for(j=0;j<NXN;j++)
		{
			m_ArrayBomb[i][j].state = 0;
			m_ArrayBomb[i][j].selected = false;
		}
	}
	for(tmp=0;tmp<BombNum;tmp++)
	{	
		i = (BombPos[tmp]+NXN)/NXN -1;
		j = BombPos[tmp]%NXN;
		m_ArrayBomb[i][j].state = 9;
	}
}


void CBombGame::CalcBombArray()
{
	int i=0,j=0;
	for(i=0;i<NXN;i++)
		for(j=0;j<NXN;j++)
		{
			if(m_ArrayBomb[i][j].state == 9)
			continue;
			if(i-1>=0&&i-1<NXN&&j-1>=0&&j-1<NXN)
			{
				if(m_ArrayBomb[i-1][j-1].state==9)
					m_ArrayBomb[i][j].state += 1;
			}
			
			if(i-1>=0&&i-1<NXN)
			{
				if(m_ArrayBomb[i-1][j].state == 9)
					m_ArrayBomb[i][j].state += 1;
			}
				
			if(i-1>=0&&i-1<NXN&&j+1>=0&&j+1<NXN)
			{
				if(m_ArrayBomb[i-1][j+1].state == 9)
					m_ArrayBomb[i][j].state += 1;
			}
				
			if(j-1>=0&&j-1<NXN)
			{
				if(m_ArrayBomb[i][j-1].state == 9)
					m_ArrayBomb[i][j].state += 1;
			}
				
			if(j+1>=0&&j+1<NXN)
			{
				if(m_ArrayBomb[i][j+1].state == 9)
					m_ArrayBomb[i][j].state += 1;
			}
				
			if(i+1>=0&&i+1<NXN&&j-1>=0&&j-1<NXN)
			{
				if(m_ArrayBomb[i+1][j-1].state == 9)
					m_ArrayBomb[i][j].state += 1;
			}
				
			if(i+1>=0&&i+1<NXN)
			{
				if(m_ArrayBomb[i+1][j].state == 9)
					m_ArrayBomb[i][j].state += 1;
			}
				
			if(i+1>=0&&i+1<NXN&&j+1>=0&&j+1<NXN)
			{
				if(m_ArrayBomb[i+1][j+1].state == 9)
					m_ArrayBomb[i][j].state += 1;
			}
		}
}


BOOL CBombGame::SelectXY(int x,int y)
{
	int i = x;
	int j = y;
	m_ArrayBomb[i][j].selected = true;
	if(9 == m_ArrayBomb[i][j].state)
		return FALSE;
	if(0 == m_ArrayBomb[i][j].state)
		BrowseNoBomb(i,j);
	return TRUE;
}

void CBombGame::BrowseNoBomb(int x,int y)
{
	int i = x;
	int j = y;
	CString str;
//	str.Format("%d,%d",i,j);
//	AfxMessageBox(str);
	if(i-1>=0&&j-1>=0)
	{	
		if(m_ArrayBomb[i-1][j-1].selected == false)
		{
			m_ArrayBomb[i-1][j-1].selected = true;
			if(m_ArrayBomb[i-1][j-1].state == 0)
				BrowseNoBomb(i-1,j-1);
		}
	}
	if(i-1>=0)
	{	
		if(m_ArrayBomb[i-1][j].selected == false)
		{
			m_ArrayBomb[i-1][j].selected = true;
			if(m_ArrayBomb[i-1][j].state == 0)
				BrowseNoBomb(i-1,j);
		}
	}			
	if(i-1>=0&&j+1<NXN)
	{
		if(m_ArrayBomb[i-1][j+1].selected == false)
		{
			m_ArrayBomb[i-1][j+1].selected = true;
			if(m_ArrayBomb[i-1][j+1].state == 0)
				BrowseNoBomb(i-1,j+1);
		}
	}
	
	if(j-1>=0)
	{
		if(m_ArrayBomb[i][j-1].selected == false)
		{
			m_ArrayBomb[i][j-1].selected = true;
			if(m_ArrayBomb[i][j-1].state == 0)
				BrowseNoBomb(i,j-1);
		}
	}
				
	if(j+1<NXN)
	{
		if(m_ArrayBomb[i][j+1].selected == false)
		{
			m_ArrayBomb[i][j+1].selected = true;
			if(m_ArrayBomb[i][j+1].state == 0)
				BrowseNoBomb(i,j+1);
		}
	}
			
	if(i+1<NXN&&j-1>=0)
	{
		if(m_ArrayBomb[i+1][j-1].selected == false)
		{
			m_ArrayBomb[i+1][j-1].selected = true;
			if(m_ArrayBomb[i+1][j-1].state == 0)
				BrowseNoBomb(i+1,j-1);
		}
	}
				
	if(i+1<NXN)
	{
		if(m_ArrayBomb[i+1][j].selected == false)
		{
			m_ArrayBomb[i+1][j].selected = true;
			if(m_ArrayBomb[i+1][j].state == 0)
				BrowseNoBomb(i+1,j);
		}
	}
				
	if(i+1<NXN&&j+1<NXN)
	{
		if(m_ArrayBomb[i+1][j+1].selected == false)
		{
			m_ArrayBomb[i+1][j+1].selected = true;
			if(m_ArrayBomb[i+1][j+1].state == 0)
				BrowseNoBomb(i+1,j+1);
		}
	}	
}

bool CBombGame::GetXYSelect(int x,int y)
{
	return m_ArrayBomb[x][y].selected;
}

int CBombGame::GetXYState(int x,int y)
{
	return m_ArrayBomb[x][y].state;
}
void CBombGame::SetXYSelected(int x,int y)
{
	m_ArrayBomb[x][y].selected = true;
}

⌨️ 快捷键说明

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