www.pudn.com > 7_2.zip > Russia0.cpp
// Russia0.cpp: implementation of the CRussia0 class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "8_1.h"
#include "Russia0.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRussia0::CRussia0()
{
jiemian0.LoadBitmap(IDB_BITMAP11);
}
CRussia0::~CRussia0()
{
}
void CRussia0::DrawJiemian(CDC *pDC)
{
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
//画背景
Dc.SelectObject(jiemian0);
pDC->BitBlt(0,0,500,600,&Dc,0,0,SRCCOPY);
//画分数,速度,难度
//设置字体颜色及其背景颜色
CString str;
pDC->SetTextColor(RGB(198,24,190));
pDC->SetBkColor(RGB(255,255,0));
//输出数字
str.Format("%d",m_Level);
if(m_Level>=0)
pDC->TextOut(80,70,str);
str.Format("%d",m_Speed);
if(m_Speed>=0)
pDC->TextOut(80,42,str);
str.Format("%d",m_Score);
if(m_Score>=0)
pDC->TextOut(80,12,str);
//如果有方块,显示方块
//游戏区
for(int i=0;iBitBlt(j*20,100+i*20,30,30,&Dc,0,0,SRCCOPY);
}
//预先图形
for(int n=0;n<4;n++)
for(int m=0;m<4;m++)
if(Will[n][m]==1)
{
Dc.SelectObject(fangkuai2);
pDC->BitBlt( 220+m*20,10+n*20,30,30,&Dc,0,0,SRCCOPY);
}
}
void CRussia0::Start()
{
end=false;//运行结束标志
m_Score=0; //初始分数
m_Speed=0; //初始速度
m_Level=0; //初始难度
m_RowCount=25; //行数
m_ColCount=25; //列数
Count=7; //方块种类
for(int i=0;ii) k=i;
if(l>j) l=j;
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
Will[i][j]=0;
//把变换后的矩阵移到左上角
for(i=k;i<4;i++)
for(j=l;j<4;j++)
Will[i-k][j-l]=tmp[i][j];
//开始位置
if(a==Now)
{
NowPosition.x=0;
NowPosition.y=m_ColCount/4;
}
if(a==Now0)
{
NowPosition0.x=0;
NowPosition0.y=3*m_ColCount/4;
}
}
void CRussia0::Move(int direction)
{
if(end) return;
switch(direction)
{
//左
case 1:
if(Meet(Now,1,NowPosition)) break;
NowPosition.y--;
break;
//右
case 2:
if(Meet(Now,2,NowPosition)) break;
NowPosition.y++;
break;
//下
case 3:
if(Meet(Now,3,NowPosition))
{
LineDelete(Now);
break;
}
NowPosition.x++;
break;
//上
case 4:
Meet(Now,4,NowPosition);
break;
//左
case 5:
if(Meet(Now0,1,NowPosition0)) break;
NowPosition0.y--;
break;
//右
case 6:
if(Meet(Now0,2,NowPosition0)) break;
NowPosition0.y++;
break;
//下
case 7:
if(Meet(Now0,3,NowPosition0))
{
LineDelete(Now0);
break;
}
NowPosition0.x++;
break;
//上
case 8:
Meet0(Now0,8,NowPosition0);
break;
default:
break;
}
}
bool CRussia0::Meet0(int a[][4], int direction, CPoint p)
{
int i,j;
//先把原位置清0
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i][j]==1)
Russia[p.x+i][p.y+j]=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i][j]==1)
{
if(!Change(a,p,Russia))
{
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i][j]==1)
Russia[p.x+i][p.y+j]=1;
return true;
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
Now0[i][j]=After[i][j];
a[i][j]=Now0[i][j];
}
return false;
}
return true;
}
void CRussia0::LineDelete(int a[][4])
{
int m=0; //本次共消去的行数
bool flag=0;
for(int i=0;i0;k--)
//上行给下行
for(int l=0;l