SDK版挖地雷游戏源码.docx
《SDK版挖地雷游戏源码.docx》由会员分享,可在线阅读,更多相关《SDK版挖地雷游戏源码.docx(75页珍藏版)》请在冰点文库上搜索。
SDK版挖地雷游戏源码
SourceFiles:
LandMine.c文件:
#include"stdafx.h"
#include"Resource.h"
#include"LandMine.h"
externCPenPen1,Pen2,Pen3,Pen4,Pen5,Pen6,Pen7;
voidCMineButton:
:
DrawItem(BOOLbFail)
{
RECTrect;
rect.left=m_nX;
rect.top=m_nY;
rect.right=m_nX+14;
rect.bottom=m_nY+14;
CClientDCClientDC(m_pParent);
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.SelectStockObject(LTGRAY_BRUSH);
ClientDC.SelectObject(Pen6);
ClientDC.Rectangle(&rect);
if(m_nStatus==MS_OPEN||bFail&&m_nStatus==MS_FLAG&&m_nMineNum>=0)
{
switch(m_nMineNum)
{
case1:
ClientDC.SetTextColor(RGB(0,128,0));
break;
case2:
ClientDC.SetTextColor(RGB(0,128,128));
break;
case3:
ClientDC.SetTextColor(RGB(0,0,128));
break;
case4:
ClientDC.SetTextColor(RGB(0,128,0));
break;
case5:
ClientDC.SetTextColor(RGB(128,0,0));
break;
case6:
ClientDC.SetTextColor(RGB(0,255,0));
break;
case7:
ClientDC.SetTextColor(RGB(128,128,0));
break;
case8:
ClientDC.SetTextColor(RGB(255,0,255));
break;
}
charcTmp[2]={0,0};
if(m_nMineNum>0)
{
cTmp[0]=m_nMineNum+'0';
ClientDC.DrawText(cTmp,-1,&rect,DT_CENTER|DT_VCENTER);
}
intnI;
ClientDC.SelectObject(Pen6);
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.SelectStockObject(NULL_BRUSH);
ClientDC.Rectangle(rect.left,rect.top,rect.right+1,rect.bottom+1);
for(nI=rect.left;nIClientDC.SetPixel(nI,rect.bottom+1,RGB(0,0,0));
for(nI=rect.top;nIClientDC.SetPixel(rect.right+1,nI,RGB(0,0,0));
if(bFail&&m_nStatus==MS_FLAG&&m_nMineNum!
=-1)
{
ClientDC.SelectObject(Pen4);
ClientDC.MoveTo(rect.left+1,rect.top+1);
ClientDC.LineTo(rect.right-1,rect.bottom-1);
ClientDC.MoveTo(rect.right-1,rect.top+1);
ClientDC.LineTo(rect.left+1,rect.bottom-1);
}
return;
}
if(bFail==1&&m_nMineNum==-1)
{
CBitmapBitmap;
if(m_nStatus!
=MS_EXPLODE)
Bitmap.LoadBitmap(IDB_MINE);
else
Bitmap.LoadBitmap(IDB_MINEEXPLODE);
//drawthewholebutton
CDCmemDC;
memDC.CreateCompatibleDC(&ClientDC);
CBitmap*pOld=memDC.SelectObject(&Bitmap);
if(pOld==NULL)
return;//destructorswillcleanup
ClientDC.BitBlt(rect.left,rect.top,16,16,
&memDC,0,0,SRCCOPY);
memDC.SelectObject(pOld);
intnI;
for(nI=rect.left;nIClientDC.SetPixel(nI,rect.bottom+1,RGB(0,0,0));
for(nI=rect.top;nIClientDC.SetPixel(rect.right+1,nI,RGB(0,0,0));
return;
}
if(m_nStatus==MS_QUEST)
{
ClientDC.SetTextColor(RGB(0,0,128));
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.DrawText("?
",1,&rect,DT_CENTER|DT_VCENTER);
}
else
{
if(m_nStatus==MS_FLAG)
{
CBitmapBitmap;
Bitmap.LoadBitmap(IDB_FLAG);
//drawthewholebutton
CDCmemDC;
memDC.CreateCompatibleDC(&ClientDC);
CBitmap*pOld=memDC.SelectObject(&Bitmap);
if(pOld==NULL)
return;//destructorswillcleanup
ClientDC.BitBlt(rect.left,rect.top,14,14,
&memDC,0,0,SRCCOPY);
memDC.SelectObject(pOld);
}
}
ClientDC.SelectObject(Pen3);
ClientDC.MoveTo(rect.right,rect.top);
ClientDC.LineTo(rect.left,rect.top);
ClientDC.LineTo(rect.left,rect.bottom);
ClientDC.SelectObject(Pen7);
ClientDC.LineTo(rect.right,rect.bottom);
ClientDC.LineTo(rect.right,rect.top);
}
voidCMineButton:
:
ButtonDown(intStatus)
{
RECTrect;
rect.left=m_nX;
rect.top=m_nY;
rect.right=m_nX+15;
rect.bottom=m_nY+15;
CClientDCClientDC(m_pParent);
if(Status==1)
{
ClientDC.SelectObject(Pen6);
ClientDC.SetBkColor(RGB(198,198,198));
ClientDC.SelectStockObject(NULL_BRUSH);
ClientDC.Rectangle(&rect);
intnI;
for(nI=rect.left;nIClientDC.SetPixel(nI,rect.bottom,RGB(0,0,0));
for(nI=rect.top;nIClientDC.SetPixel(rect.right,nI,RGB(0,0,0));
}
else
{
ClientDC.SelectObject(Pen6);
ClientDC.MoveTo(rect.left,rect.bottom);
ClientDC.LineTo(rect.right,rect.bottom);
ClientDC.LineTo(rect.right,rect.top+1);
DrawItem(FALSE);
}
}
intCMineButton:
:
OpenMine()
{
if(m_nStatus==MS_NORMAL||m_nStatus==MS_QUEST)
{
if(m_nMineNum!
=-1)
{
m_nStatus=MS_OPEN;
DrawItem(FALSE);
if(m_nMineNum==0)
return0;
else
return1;
}
else
{
m_nStatus=MS_EXPLODE;
DrawItem(TRUE);//Fail
return-1;
}
}
return1;
};
voidCLandMine:
:
Create(intnRow,intnCol,intnMineNum,intnX,intnY,CWnd*pParent)
{
m_pParent=pParent;
m_nX=nX;
m_nY=nY;
Reset(nRow,nCol,nMineNum);
}
voidCLandMine:
:
ReDraw(intbFail)
{
intnI;
for(nI=0;nIm_aLandMine[nI]->DrawItem(bFail);
}
voidCLandMine:
:
Reset(intnRow,intnCol,intnMineNum)
{
intnI;
RECTrect;
for(nI=0;nI{
if(m_aLandMine[nI]!
=NULL)
deletem_aLandMine[nI];
}
for(nI=0;nI{
rect.left=m_nX+nI%nCol*16+1;
rect.top=m_nY+nI/nCol*16+1;
//rect.right=m_nX+nI/nCol*16+15;
//rect.bottom=m_nY+nI%nCol*16+15;
m_aLandMine[nI]=newCMineButton;
m_aLandMine[nI]->Create(m_pParent,rect.left,rect.top);
m_aLandMine[nI]->SetStatus(MS_NORMAL);
//m_aLandMine[nI]->SetMineNum(0);
}
m_nRow=nRow;
m_nCol=nCol;
m_nMineNum=nMineNum;
intnCurMines=0;
intnCurMine;
srand((unsigned)time(NULL));
//srand
(1);
while(nCurMines{
nCurMine=rand()%(m_nRow*m_nCol);
if(m_aLandMine[nCurMine]->GetMineNum()!
=-1)
{
m_aLandMine[nCurMine]->SetMineNum(-1);
intnMineRound,nMineRound1;
//right;
nMineRound=GetRight(nCurMine);
if(nMineRound>=0)
{
if(m_aLandMine[nMineRound]->GetMineNum()!
=-1)
++(*m_aLandMine[nMineRound]);
//righttop
nMineRound1=GetTop(nMineRound);
if(nMineRound1>=0&&m_aLandMine[nMineRound1]->GetMineNum()!
=-1)
{
++(*m_aLandMine[nMineRound1]);
}
//rightbottom
nMineRound1=GetBot(nMineRound);
if(nMineRound1>=0&&m_aLandMine[nMineRound1]->GetMineNum()!
=-1)
{
++(*m_aLandMine[nMineRound1]);
}
}
//left
nMineRound=GetLeft(nCurMine);
if(nMineRound>=0)
{
if(m_aLandMine[nMineRound]->GetMineNum()!
=-1)
++(*m_aLandMine[nMineRound]);
//Lefttop
nMineRound1=GetTop(nMineRound);
if(nMineRound1>=0&&m_aLandMine[nMineRound1]->GetMineNum()!
=-1)
{
++(*m_aLandMine[nMineRound1]);
}
//Leftbottom
nMineRound1=GetBot(nMineRound);
if(nMineRound1>=0&&m_aLandMine[nMineRound1]->GetMineNum()!
=-1)
{
++(*m_aLandMine[nMineRound1]);
}
}
//Top
nMineRound=GetTop(nCurMine);
if(nMineRound>=0&&m_aLandMine[nMineRound]->GetMineNum()!
=-1)
{
++(*m_aLandMine[nMineRound]);
}
//Bottom
nMineRound=GetBot(nCurMine);
if(nMineRound>=0&&m_aLandMine[nMineRound]->GetMineNum()!
=-1)
{
++(*m_aLandMine[nMineRound]);
}
nCurMines++;
}
}
}
voidCLandMine:
:
LButtonDown(CPointpoint)
{
intnCol=(point.x-m_nX)/16;
intnRow=(point.y-m_nY)/16;
intnCurMine=nCol+nRow*m_nCol;
if(nRow>=m_nRow||nCol>=m_nCol||point.x{
m_nOldMine=-1;
return;
}
if(nCol&&(m_aLandMine[nCurMine]->GetStatus()==MS_NORMAL||m_aLandMine[nCurMine]->GetStatus()==MS_QUEST))
{
m_aLandMine[nCurMine]->ButtonDown
(1);
m_nOldMine=nCurMine;
}
};
intCLandMine:
:
LButtonUp(CPointpoint)
{
intnCol=(point.x-m_nX)/16;
intnRow=(point.y-m_nY)/16;
intnCurMine=nCol+nRow*m_nCol;
if(nRow>=m_nRow||nCol>=m_nCol||point.xreturn0;
BOOLnStatus=OpenMine(nCurMine);
if(nStatus==FALSE)
{intnI;
for(nI=0;nI{
if(m_aLandMine[nI]->GetMineNum()==-1)
m_aLandMine[nI]->DrawItem(TRUE);
if(m_aLandMine[nI]->GetStatus()==MS_FLAG)
m_aLandMine[nI]->DrawItem(TRUE);
}
return-1;
}
return1;
}
BOOLCLandMine:
:
OpenMine(intnCurMine)
{
intnRoundMine,nRoundMine1;
intaMine[500];
intnTop=0,nTail=0;
aMine[nTop++]=nCurMine;
while(nTop!
=nTail)
{
intnCurrent=aMine[nTail];
nTail=(nTail+1)%500;
switch(m_aLandMine[nCurrent]->OpenMine())
{
case0:
//Minenumberiszero
nRoundMine=GetLeft(nCurrent);
if(nRoundMine!
=-1)
{
aMine[nTop]=nRoundMine;
nTop=(nTop+1)%500;
nRoundMine1=GetTop(nRoundMine);
if(nRoundMine1!
=-1)
{
aMine[nTop]=nRoundMine1;
nTop=(nTop+1)%500;
nRoundMine1=GetTop(nRoundMine);
}
nRoundMine1=GetBot(nRoundMine);
if(nRoundMine1!
=-1)
{
aMine[nTop]=nRoundMine1;
nTop=(nTop+1)%500;
nRoundMine1=GetTop(nRoundMine);
}
}
nRoundMine=GetRight(nCurrent);
if(nRoundMine!
=-1)
{
aMine[nTop]=nRoundMine;
nTop=(nTop+1)%500;
nRoundMine1=GetTop(nRoundMine);
if(nRoundMine1!
=-1)
{
aMine[nTop]=nRoundMine1;
nTop=(nTop+1)%500;
nRoundMine1=GetTop(nRoundMine);
}
nRoundMine1=GetBot(nRoundMine);
if(nRoundMine1!
=-1)
{
aMine[nTop]=nRoundMine1;
nTop=(nTop+1)%500;
nRoundMine1=GetTop(nRoundMine);
}
}
nRoundMine=GetTop(nCurrent);
if(nRoundMine!
=-1)
{
aMine[nTop]=nRoundMine;
nTop=(nTop+1)%500;
}
nRoundMine=GetBot(nCurrent);
if(nRoundMine!
=-1)
{
aMine[nTop]=nRoundMine;
nTop=(nTop+1)%500;
}
break;
case1:
break;
case-1:
returnFALSE;//fail
}
}
returnTRUE;
}
BOOLCLandMine:
:
IsSuccess()
{
intnI,nStatus;
for(nI=0;nI{
nStatus=m_aLandMine[nI]->GetStatus();