示例#1
0
//方块向下移动
bool CBlock::MoveDown()
{
	if (GetBlockBound(DOWN) <= 0)
	{
		for (int i=0; i!=m_block.size(); ++i)
		{
			g_pFrm->SetFilled(m_block[i].x, m_block[i].y);
		}
		return false;
	}
	//先判断是否会撞击
	if (IsCrashed(DOWN))
	{
		for (int i=0; i!=m_block.size(); ++i)
		{
			g_pFrm->SetFilled(m_block[i].x, m_block[i].y);
		}
		cout << "Crashed!" << endl;
		return false;
	}
	else
	{
		for (int i=0; i!=m_block.size(); ++i)
		{
			--m_block[i].y;
		}
		--m_ptRotate.y;
		cout << "CBlock::MoveDown" << endl;
		return true;
	}
}
示例#2
0
//方块向右移动
void CBlock::MoveRight()
{
	if (GetBlockBound(RIGHT) >= g_pFrm->GetWidth() - 1)
	{
		return;
	}
	//先判断是否会撞击
	if (IsCrashed(RIGHT))
	{
		cout << "Crashed!" << endl;
		return;
	}
	else
	{
		for (int i=0; i!=m_block.size(); ++i)
		{
			++m_block[i].x;
		}
		++m_ptRotate.x;
		cout << "CBlock::MoveRight" << endl;
	}
}
示例#3
0
//方块向左移动
void CBlock::MoveLeft()
{
	if (GetBlockBound(LEFT) <= 0)
	{
		return;
	}
	//先判断是否会撞击
	if (IsCrashed(LEFT))
	{
		cout << "Crashed!" << endl;
		return;
	}
	else
	{
		for (int i=0; i!=m_block.size(); ++i)
		{
			--m_block[i].x;
		}
		--m_ptRotate.x;
		cout << "CBlock::MoveLeft" << endl;
	}
}
示例#4
0
//重写长条方块的旋转方法
void CBar::Rotate()
{
	Square_vec tmpvec;
	tmpvec.reserve(m_block.size());

	//如果是竖的则变成横的,反之亦然
	if (m_block[0].y - m_block[1].y != 0)
	{
		tmpvec.push_back(m_ptRotate);
		tmpvec.push_back(Square(m_ptRotate.x-2, m_ptRotate.y));
		tmpvec.push_back(Square(m_ptRotate.x-1, m_ptRotate.y));
		tmpvec.push_back(Square(m_ptRotate.x+1, m_ptRotate.y));
	}
	else
	{
		tmpvec.push_back(m_ptRotate);
		tmpvec.push_back(Square(m_ptRotate.x, m_ptRotate.y+2));
		tmpvec.push_back(Square(m_ptRotate.x, m_ptRotate.y+1));
		tmpvec.push_back(Square(m_ptRotate.x, m_ptRotate.y-1));
	}

	m_block.swap(tmpvec);

	//判断旋转后的方块是否会发生越界
	if (GetBlockBound(LEFT) < 0 || GetBlockBound(RIGHT) > g_pFrm->GetWidth()-1 ||
		GetBlockBound(DOWN) < 0)
	{
		m_block.swap(tmpvec);
		return;
	}

	//判断旋转后的方块是否会和frame内的方块发生重叠
	if (IsCrashed(NO))
	{
		m_block.swap(tmpvec);
		return;
	}
}
示例#5
0
/*	正反L型方块,正反Z型方块和T型方块都调用基类的Rotate来旋转,
思路即是将其放入一个3X3的矩阵中,然后旋转矩阵就行了,各方块在旋转时旋转点不动	*/
void CBlock::Rotate()
{
	//在最顶上的时候不能旋转,因为可能会超出界限
	if (GetBlockBound(UP) >= g_pFrm->GetHeight()-1)
	{
		return;
	}

	int rect[3][3] = {};
	for (int i=0; i!=m_block.size(); ++i)
	{
		int x = m_block[i].x - m_ptRotate.x + 1;
		int y = m_block[i].y - m_ptRotate.y + 1;
		rect[y][x] = 1;
	}

	//旋转3x3数组
	int tmp[3][3] = {};
    for (int i=0; i<3; i++)
    {
        for (int j=0; j<3; j++)
        {
            tmp[i][j] = rect[j][2-i];
        }
    }

	
	Square_vec tmpvec;
	tmpvec.reserve(m_block.size());
    for (int i=0;i<3;i++)
    {
        for (int j=0;j<3;j++)
        {
			if (tmp[i][j] == 1)
			{
				//Square newsqr(j + m_ptRotate.x-1, i + m_ptRotate.y-1);
				tmpvec.push_back(Square(j+m_ptRotate.x-1, i+m_ptRotate.y-1));
			}
        }
    }

	//判断旋转后的方块是否会发生越界
	/*
	for (int i=0; i!=tmpvec.size(); ++i)
	{
		if (tmpvec[i].x <= 0 || tmpvec[i].x >= g_pFrm->GetWidth() || 
			tmpvec[i].y <= 0 || tmpvec[i].y >= g_pFrm->GetHeight())
			return;
	}
	*/
	m_block.swap(tmpvec);
	//判断旋转后的方块是否会发生越界
	if (GetBlockBound(LEFT) < 0 || GetBlockBound(RIGHT) > g_pFrm->GetWidth()-1 ||
		GetBlockBound(DOWN) < 0)
	{
		m_block.swap(tmpvec);
		return;
	}

	//判断旋转后的方块是否会和frame内的方块发生重叠
	if (IsCrashed(NO))
	{
		m_block.swap(tmpvec);
		return;
	}

	cout << "CBlock::Rotate" << endl;
}
bool IsCrashed(CharaObj &c1, CharaObj &c2, float cs1, float cs2){
	return IsCrashed(c1.p.x(), c1.p.y(), c2.p.x(), c2.p.y(), c1.size.x(), c1.size.y(), cs1, cs2);
}
bool IsCrashed(CharaObj &c1, CharaObj &c2){
	return IsCrashed(c1.p.x(), c1.p.y(), c2.p.x(), c2.p.y(), c1.size.x(), c1.size.y(), c2.size.x(), c2.size.y());
}