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

📄 square.cpp

📁 俄罗斯方块游戏的原代码 用起来很方便 大家可以试一试
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}
			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 + -