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

📄 board.h

📁 一个用VC开发的完整的俄罗斯方块游戏源程序代码。
💻 H
字号:
class CBoard//方块板类
{
private:
	CDiamond *dia;//连接方块
	char board[16][10];//板数据
public:
	CBoard();//构造函数
	void NewDiamond(CDiamond *d);//加入新方块
	void AddDiamond(void);//老化方块
	void GetBoard(char b[16][10]);//获得数据
//	void Floor(void);//下落
	CDiamond *GetDiamond(void) const;
	int Judge(void);//判断吸收
	void TransFram(char td[16][10]);
	bool Touch(char td[16][10]);
	bool Die(void);
};
CBoard::CBoard()
{
	//清零
	for(int i=0;i<10;i++)
		for(int j=0;j<16;j++)
			board[i][j]=0;
	dia=NULL;
}
void CBoard::GetBoard(char b[16][10])
{
	for(int i=0;i<16;i++)
		for(int j=0;j<10;j++)
			b[i][j]=board[i][j];
}
void CBoard::AddDiamond(void)
{
	char d[4][4];
	int x,y;
	dia->GetData(d);
	dia->GetPoint(x,y);
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
			if(d[i][j]!=0) board[i+y][j+x]=d[i][j];
}
void CBoard::NewDiamond(CDiamond *d)
{

	dia=d;
	dia->SetPoint(4,0);
}
/*
void CBoard::Floor(void)
{
	dia->Floor();
}
*/
CDiamond *CBoard::GetDiamond(void) const
{
	return dia;
}
int CBoard::Judge(void)
{
	int count,num=0;
	for(int k=0;k<16;k++)
	{
		count=0;
		for(int i=0;i<10;i++)
			if(board[k][i]) ++count;
		if(count==10) 
		{
			for(int i=k;i>0;i--)
				for(int j=0;j<10;j++)
				{
					board[i][j]=board[i-1][j];
				}
			++num;
		}
	}
	return num;
}
bool CBoard::Touch(char td[16][10])
{
	bool IsTouch=0;
	char data[4][4];
	int PointX,PointY;
	dia->GetPoint(PointX,PointY);
	dia->GetData(data);
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
		{
			if(data[i][j]!=0&& PointY+i>14) IsTouch=1;
			if(data[i][j]!=0&&td[PointY+i+1][PointX+j]==1) IsTouch=1;
		}
	return IsTouch;
}
void CBoard::TransFram(char td[16][10])
{
	bool IsBlock=0;
	char data[4][4],nextdata[4][4],limit[4][4];
	int PointX,PointY,x,y;
	dia->GetPoint(PointX,PointY);
	dia->GetData(data);
	dia->GetNext()->GetData(nextdata);
	dia->GetLimit(limit);
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
		{
			if(nextdata[i][j]!=0&&nextdata[i][j]==td[PointY+i][PointX+j]) IsBlock=1;			
			if(nextdata[i][j]!=0&&(PointX+j>9||PointX+j<0||PointY+i>15||PointY+i<0)) IsBlock=1;
			if(limit[i][j]!=0&&limit[i][j]==td[PointY+i][PointX+j]) IsBlock=1;

			
		}
	if(!IsBlock)
	{
		dia->GetPoint(x,y);
		dia->GetNext()->SetPoint(x,y);
		dia=dia->GetNext();
	}
}
bool CBoard::Die(void)
{
	for(int i=0;i<10;i++)
		if(board[2][i]!=0) return 1;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -