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

📄 gamecontrol.cpp

📁 俄罗斯方块
💻 CPP
字号:
#include "GameControl.h"
GameControl::GameControl(Box *b,Grid *g,GameForm *f)
{
	pBox = b;
	pGrid = g;
	pGameForm = f;
}
void GameControl::moveBoxLeft(void)
{
	pGameForm->eraseBox(*pBox);//擦除原有方块
	Box b = *pBox;//保存原有方块
	pBox->left();
	if(isObstacle())//若遇障碍则撤销移动
	{
		*pBox = b;
	}
	pGameForm->drawBox(*pBox);//重新绘制新的方块
}
void GameControl::moveBoxRight(void)
{
	pGameForm->eraseBox(*pBox);//擦除原有方块
	Box b = *pBox;//保存原有方块
	pBox->right();
	if(isObstacle())//若遇障碍则撤销移动
	{
		*pBox = b;
	}
	pGameForm->drawBox(*pBox);//重新绘制新的方块
}
void GameControl::dropBox(void)
{
	pGameForm->eraseBox(*pBox);//擦除原有方块
	Box b = *pBox;//保存原有方块
	pBox->drop();
	if(isObstacle())//若遇障碍则接收方块
	{
		*pBox = b;
		pGameForm->eraseGrid();
		if(!pGrid->acceptBox(*pBox))
		{
			exit(0);
		}
		
		pGameForm->drawGrid(*pGrid);
		pBox->init();
		//待完善接收失败的处理
	}
	pGameForm->drawBox(*pBox);//重新绘制新的方块
}
void GameControl::straightDown(void)
{
}
void GameControl::rotateBox(void)
{
	pGameForm->eraseBox(*pBox);//擦除原有方块
	Box b = *pBox;//保存原有方块
	pBox->rotate();
	if(isObstacle())//若遇障碍则撤销移动
	{
		*pBox = b;
	}
	pGameForm->drawBox(*pBox);//重新绘制新的方块
}
bool GameControl::isObstacle(void)
{
	Coord location = pBox->getLocation();
	BoxCode code = pBox->getCode();
	
	int x,y;
	for (int i=0; i<16;i++)
	{
		if (true == code.test(15-i))
		{
			x = location.x+ i%4;
			y = location.y+ i/4;
			
			if(x<0||x>=COLUMNS||y<0||y>=LINES)
			{
				return true;
			}

			if (pGrid->isOccupied(y,x))
			{
				return true;
			}			
		}
	}
	return false;
}

void GameControl::startGame(void)
{
	pGameForm->draw();
	pGameForm->drawGrid(*pGrid);
	pGameForm->drawBox(*pBox);
	
	Command c;
	while (c != QUIT)
	{
		c = pGameForm->readOperator();
		switch(c) {
		case LEFT:
			moveBoxLeft();
			break;
		case RIGHT:
			moveBoxRight();
			break;
		case ROTATE:
			rotateBox();
			break;
		case NONE:
			dropBox();
			break;	

		//default:
		}
		Sleep(400);
	}

}

⌨️ 快捷键说明

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