📄 square.cpp
字号:
}
else
{
memDC.FillSolidRect(rect,BkColor);
}
}
}
pDC->BitBlt(5,5,RgRect.right,RgRect.bottom,&memDC,5,5,SRCCOPY);
//pDC->BitBlt(5,5,50,50,&memDC,5,5,SRCCOPY);
memDC.SelectObject(pOldPen1);
memDC.SelectObject(pOldBrush1);
memDC.DeleteDC();
}
void Square::MoveElement(int ElementNumber,int x,int y)
{
Element[ElementNumber].left += x;
Element[ElementNumber].right += x;
Element[ElementNumber].top += y;
Element[ElementNumber].bottom += y;
}
void Square::OnlyTurn(int move[8],int value)
{
for(int i = 0;i < 8&&value == -1;i++)
{
move[i] = -move[i];
}
for(i = 1;i <= 4;i++)
{
MoveElement(i,move[2*i - 2],move[2*i - 1]);
}
}
void Square::RightTurn(int move[8])
{
bool m_turn = false;
if(CheckRange(0,SIZE)&&CheckRange(0,2*SIZE))
{
m_turn = true;
OnlyTurn(move);
if(CheckMatrix(0,0) == false)//左右出界不算在内
{
m_turn = false;
OnlyTurn(move,-1);
TurnNumber -- ;
}
}
while(CheckRange(0,0) == false&&m_turn == true)
{
if(CheckRange(SIZE,0))
{
Move(SIZE,0);
}
else if(CheckRange(2*SIZE,0))
{
Move(2*SIZE,0);
}
else if(CheckRange(-SIZE,0))
{
Move(-SIZE,0);
}
else
{
Move(-2*SIZE,0);
}
}
}
void Square::Turn(CDC *pDC)
{
TurnNumber++;
int TurnType = TurnNumber%4;
switch (type)
{
case 0:
{
if(TurnType == 1||TurnType == 3)
{
int move01[8] = {-SIZE,SIZE,0,0,SIZE,-SIZE,2*SIZE,-2*SIZE};
Move(0,0,pDC,2);
RightTurn(move01);
Move(0,0,pDC);
}
else
{
int move02[8] = {SIZE,-SIZE,0,0,-SIZE,SIZE,-2*SIZE,2*SIZE};
Move(0,0,pDC,2);
RightTurn(move02);
Move(0,0,pDC);
}
break;
}
case 1:
{
switch (TurnType)
{
case 1:
{
Move(0,0,pDC,2);
int move11[8] = {0,0,-SIZE,-SIZE,-SIZE,SIZE,-2*SIZE,2*SIZE};
RightTurn(move11);
Move(0,0,pDC);
break;
}
case 2:
{
Move(0,0,pDC,2);
int move12[8] = {0,0,SIZE,-SIZE,-SIZE,-SIZE,-2*SIZE,-2*SIZE};
RightTurn(move12);
Move(0,0,pDC);
break;
}
case 3:
{
Move(0,0,pDC,2);
int move13[8] = {0,0,SIZE,SIZE,SIZE,-SIZE,2*SIZE,-2*SIZE};
RightTurn(move13);
Move(0,0,pDC);
break;
}
case 0:
{
Move(0,0,pDC,2);
int move10[8] = {0,0,-SIZE,SIZE,SIZE,SIZE,2*SIZE,2*SIZE};
RightTurn(move10);
Move(0,0,pDC);
break;
}
}
break;
}
case 2:
{
switch (TurnType)
{
case 1:
{
Move(0,0,pDC,2);
int move21[8] = {2*SIZE,-2*SIZE,-SIZE,-SIZE,SIZE,-SIZE,0,0};
RightTurn(move21);
Move(0,0,pDC);
break;
}
case 2:
{
Move(0,0,pDC,2);
int move22[8] = {2*SIZE,2*SIZE,SIZE,-SIZE,SIZE,SIZE,0,0};
RightTurn(move22);
Move(0,0,pDC);
break;
}
case 3:
{
Move(0,0,pDC,2);
int move23[8] = {-2*SIZE,2*SIZE,SIZE,SIZE,-SIZE,SIZE,0,0};
RightTurn(move23);
Move(0,0,pDC);
break;
}
case 0:
{
Move(0,0,pDC,2);
int move20[8] = {-2*SIZE,-2*SIZE,-SIZE,SIZE,-SIZE,-SIZE,0,0};
RightTurn(move20);
Move(0,0,pDC);
break;
}
}
break;
}
case 3:
{
switch (TurnType)
{
case 1:
{
Move(0,0,pDC,2);
int move31[8] = {0,0,0,-2*SIZE,0,0,-SIZE,SIZE};
RightTurn(move31);
Move(0,0,pDC);
break;
}
case 2:
{
Move(0,0,pDC,2);
int move32[8] = {0,0,0,0,0,0,SIZE,-SIZE};
RightTurn(move32);
Move(0,0,pDC);
break;
}
case 3:
{
Move(0,0,pDC,2);
int move33[8] = {SIZE,-SIZE,0,2*SIZE,0,0,0,0};
RightTurn(move33);
Move(0,0,pDC);
break;
}
case 0:
{
Move(0,0,pDC,2);
int move30[8] = {-SIZE,SIZE,0,0,0,0,0,0};
RightTurn(move30);
Move(0,0,pDC);
break;
}
}
break;
}
case 4:
{
if(TurnType == 1 || TurnType == 3)
{
Move(0,0,pDC,2);
int move41[8] = {0,2*SIZE,-SIZE,SIZE,0,0,-SIZE,-SIZE};
RightTurn(move41);
Move(0,0,pDC);
}
else
{
Move(0,0,pDC,2);
int move40[8] = {0,-2*SIZE,SIZE,-SIZE,0,0,SIZE,SIZE};
RightTurn(move40);
Move(0,0,pDC);
}
break;
}
case 5:
{
if(TurnType == 1 || TurnType == 3)
{
Move(0,0,pDC,2);
int move51[8] = {SIZE,SIZE,0,0,-SIZE,SIZE,-2*SIZE,0};
RightTurn(move51);
Move(0,0,pDC);
}
else
{
Move(0,0,pDC,2);
int move50[8] = {-SIZE,-SIZE,0,0,SIZE,-SIZE,2*SIZE,0};
RightTurn(move50);
Move(0,0,pDC);
}
break;
}
case 6:
{
break;
}
}
}
void Square::Remove(CDC *pDC)
{
bool full = false;
int line = 0;
CRect rect;
for(int j = 0; j <= H_NUMBER; j++)
{
full = true;
for(int i = 0; i <= W_NUMBER; i++)
{
if(Matrix[i][j] == 0)
{
full = false;
break;
}
}
if(full == true)
{
line ++;
for(int a = j; a >=0 ; a--)
{
for( i = 0;i <= W_NUMBER;i ++)
{
if(a == 0)
{
Matrix[i][a] = 0;
}
else
{
Matrix[i][a] = Matrix[i][a - 1];
}
}
}
j--;
}
}
/* for(int i = 0; i <= W_NUMBER; i++)
{
for(int j = 0; j < H_NUMBER; j++)
{
rect.left = i*SIZE + 5;
rect.top = j*SIZE + 5;
rect.right = rect.left + SIZE;
rect.bottom = rect.top + SIZE;
if(Matrix[i][j] == 0)
{
pDC->FillSolidRect(rect,BkColor);
}
}
}
*/
m_Score = m_Score+ 100*line*line;
ShowScore(pDC);
}
void Square::ShowScore(CDC *pDC)
{
CDC memDC;
memDC.CreateCompatibleDC(NULL);
CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(pDC,500,500);
memDC.SelectObject(&memBitmap);
memDC.SelectObject(&MyBrush);
memDC.FillSolidRect(0,0,380,410,RGB(0,200,255));
CString Score;
Score.Format("%d",m_Score);
CString Gold;
CString Sliver;
Gold.Format("%d",m_Score/10000);
Sliver.Format("%d",m_Score%10000);
CRect Rect(10+SIZE*(W_NUMBER+1),0,368,412);
// CRect Rect(0,0,380,410);
CBrush *brush,*pOldBrush;
CPen *pen,*pOldPen;
pen = new CPen;
pen->CreatePen(PS_SOLID,5,RGB(0,100,100));
pOldPen = memDC.SelectObject(pen);
brush = new CBrush;
brush->CreateSolidBrush(RGB(0,200,255));
pOldBrush = memDC.SelectObject(brush);
memDC.Rectangle(0,0,Rect.Width(),Rect.Height());//(Rect);
memDC.SelectObject(pOldBrush);
memDC.SelectObject(pOldPen);
memDC.SetTextColor(RGB(255,0,0));//设置文本颜色为红色
memDC.SetBkColor(RGB(0,200,255));//设置背景颜色为蓝色
memDC.TextOut(5,100,"你的口袋");
memDC.TextOut(5,120,"里有:");
memDC.TextOut(5,150,Sliver);
memDC.TextOut(50,150,"个银币");
memDC.TextOut(5,170,Gold);
memDC.TextOut(50,170,"个金币");
memDC.TextOut(5,230,"等级: ");
CString SGrade;
SGrade.Format("%d",Grade);
memDC.TextOut(60,230,SGrade);
memDC.TextOut(80,230,"级");
pDC->BitBlt(Rect.left,0,Rect.Width(),Rect.Height(),&memDC,0,0,SRCCOPY);
memDC.DeleteDC();
delete pen;
delete brush;
}
void Square::UpGrade(int *Elapse)
{
int s = 0;
for(int i = 0;i <= Grade;i++)
{
s += i;
}
if(m_Score >= s*10000)
{
Grade++;
}
*Elapse = 800/Grade;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -