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

📄 game.cpp

📁 用Visual C++实现的扫雷程序。基本功能都已实现。用到了很多VC的控件知识。
💻 CPP
字号:
// GAME.cpp: implementation of the GAME class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "扫雷.h"
#include "GAME.h"

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

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

GAME::GAME()
{
	GAME::Count=99;
	GAME::ActionNum=0;
	GAME::Width=18;
	GAME::Heigh=18;
	GAME::BombNum=36;
	GAME::BackWave=FALSE;
	int i,j;
	i=Width*15+11;j=Heigh*15+85;
	WindowRange=CRect(400-i/2,300-j/2,i,j);
}

GAME::~GAME()
{
    
}

int GAME::GetDombNum(POINT Mouse)
{
int x,y,total=0;
int i,j;
i=Mouse.x/15;j=Mouse.y/15;

for(x=i-1;x<=i+1;x++)
for(y=j-1;y<=j+1;y++)
if (x>=0 && x<Width && y>=0 && y<Heigh && GAME::box[x][y].Bomb) total++;
if (GAME::box[i][j].Bomb) total--;
return total;
}

int GAME::GetDombNum(int i,int j)
{
int x,y,total=0;
for(x=i-1;x<=i+1;x++)
for(y=j-1;y<=j+1;y++)
if (x>=0 && x<Width && y>=0 && y<Heigh && GAME::box[x][y].Bomb) total++;
if (GAME::box[i][j].Bomb) total--;
return total;
}

void GAME::DrawBox(CDC *pDC,POINT Mouse,POINT Pxy)
{
    CBitmap Bitmap;
    Bitmap.LoadBitmap(IDB_BITMAP);
    CDC dc;
	dc.CreateCompatibleDC(pDC);
    dc.SelectObject(&Bitmap);
    pDC->BitBlt(Mouse.x/15*15,Mouse.y/15*15,15,15,&dc,Pxy.x,Pxy.y,SRCCOPY);
	dc.DeleteDC();
}

void GAME::AutoDrawBox(CDC *pDC,int i,int j)
{
    CBitmap Bitmap;
    Bitmap.LoadBitmap(IDB_BITMAP);
    CDC dc;
	dc.CreateCompatibleDC(pDC);
    dc.SelectObject(&Bitmap);
	POINT XY;
    int Num=GetDombNum(i,j);
	switch(Num)
	{
	case 0:
		XY.x=0;
		XY.y=0;
		break;
	case 1:
	    XY.x=15;
		XY.y=15;
		break;
	case 2:
	    XY.x=30;
		XY.y=15;
		break;
	case 3:
	    XY.x=45;
		XY.y=15;
		break;
	case 4:
	    XY.x=60;
		XY.y=15;
		break;
	case 5:
        XY.x=0;
		XY.y=30;
		break;
	case 6:
        XY.x=15;
		XY.y=30;
		break;
	case 7:
        XY.x=30;
		XY.y=30;
		break;
	case 8:
        XY.x=45;
		XY.y=30;
		break;
	default:
		break;
	}
	if (GAME::box[i][j].Bomb) {XY.x=30;XY.y=0;}
	if (GAME::box[i][j].Tag)
	if (GAME::box[i][j].Bomb)
	    {XY.x=30;XY.y=0;}
	else
		if(GAME::GameStart)
		{XY.x=60;XY.y=30;}
		else
		{XY.x=60;XY.y=0;}
    if (GAME::box[i][j].Action==FALSE || GAME::box[i][j].Tag)
	{
    pDC->BitBlt(i*15,j*15,15,15,&dc,XY.x,XY.y,SRCCOPY);

	}
	GAME::box[i][j].Pxy.x=XY.x;
	GAME::box[i][j].Pxy.y=XY.y;
	dc.DeleteDC();
}

void GAME::ActionDrawBox(CDC *pDC,int i,int j)
{
	int x,y;
	if (GAME::box[i][j].AutoAction) return;
	if (GAME::GetDombNum(i,j)==0)
	{
	GAME::AutoDrawBox(pDC,i,j);
	GAME::box[i][j].AutoAction=TRUE;
	GAME::box[i][j].Action=TRUE;
	for(x=i-1;x<=i+1;x++)
	for(y=j-1;y<=j+1;y++)
	{	
		if (x>=0 && x<Width && y>=0 && y<Heigh)
		{
        GAME::AutoDrawBox(pDC,x,y);
	    GAME::box[x][y].Action=TRUE;
	
		if (GAME::GetDombNum(x,y)==0)
		GAME::ActionDrawBox(pDC,x,y);
	    GAME::box[x][y].AutoAction=TRUE;
		GAME::ActionNum++;
		}
		else 
			return;
	}
	}
}

void GAME::DrawAllBox(CDC *pDC)
{ 
  for(int i=0;i<Width;i++)
  for(int j=0;j<Heigh;j++)
	  GAME::AutoDrawBox(pDC,i,j);
}
void GAME::InitGame()
{
	GAME::GameStart=TRUE;

	GAME::TimeCount=0;
	GAME::ActionNum=0;
	GAME::ActionBombNum=GAME::BombNum;
	GAME::LeftBombNum=GAME::BombNum;
	GAME::PlayLeftBombNum=GAME::BombNum;
    int i,j;
	for(i=0;i<Width;i++)
	for(j=0;j<Heigh;j++)
	{
		GAME::box[i][j].Action=FALSE;
		GAME::box[i][j].AutoAction=FALSE;
		GAME::box[i][j].Tag=FALSE;
		GAME::box[i][j].Bomb=FALSE;
		GAME::box[i][j].x=i;
		GAME::box[i][j].y=j;
		GAME::box[i][j].Pxy.x=15;
		GAME::box[i][j].Pxy.y=0;
	}
	//这里产生随机雷坐标
        int Num=0;
		int Rand=GAME::BombNum*100/(GAME::Width*GAME::Heigh);
        while(Num<GAME::BombNum)
		{
		for(i=0;i<Width;i++)
		for(j=0;j<Heigh;j++)
		{
		if(Count%100<Rand && GAME::box[i][j].Bomb==FALSE)
		{
	    GAME::box[i][j].Bomb=TRUE;
		Num++;
		if (Num==BombNum) {i=Width;j=Heigh;}
		}
		Count+=Num+i+j;
		}

		}
}

void GAME::InitEndGame()
{
	GAME::GameStart=FALSE;
	GAME::ActionNum=0;
    int i,j;
	for(i=0;i<Width;i++)
	for(j=0;j<Heigh;j++)
	{
		GAME::box[i][j].Action=FALSE;
		GAME::box[i][j].Tag=FALSE;
		GAME::box[i][j].x=i;
		GAME::box[i][j].y=j;
		GAME::box[i][j].Pxy.x=15;
		GAME::box[i][j].Pxy.y=0;
	}
}

⌨️ 快捷键说明

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