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