这是我检查未来移动是否合法的代码,我假设它是合法的并将移动复制到 mySquares 数组中。然后我在表单中设置的游戏周期和计时器处理程序中调用此方法,即:
canvas->drawGrid();
testBlock->drawBlock();
testBlock->moveDown();//this method has checkBounds for when hit sides, top & bottom
if(newBlock->canMoveDown()==false)
{
newBlock->addMySelfToGameBoard();
mainGameBoard->updateGrid();
}
//timer1 handler finish
bool TTetrisBlock::canMoveDown()
{
array<Point>^ temporaryCopy = gcnew array<Point>(4);
bool canGoDown = true;
for(int i=0;i<mySquares->Length;i++)
{
//Set future move
temporaryCopy[i].X = mySquares[i].X;
temporaryCopy[i].Y = mySquares[i].Y+1;
}
//Check if future move cells are full, if not assign values to mySquares
//Check if future move is legal
for(int j=0;j<temporaryCopy->Length;j++)
{
if(gameBoard->isCellOccupied(temporaryCopy[j].X,temporaryCopy[j].Y) == true)
{
mySquares[j].X = temporaryCopy[j].X;
mySquares[j].Y = temporaryCopy[j].Y;
}
}
return canGoDown;
}
//end of moveDown
在我的游戏板类中,我有检查 TCell 是否被占用的方法。TGameBoar 拥有一个 TCells 数组,它有一个颜色并且 bool isOccupied = false;
bool TGameBoard::isCellOccupied(int c,int r)
{
//Checks if TCell is occupied
return myGrid[c,r]->getIsOccupied();
}
它崩溃并表明这是问题所在,我目前在学校学习 C++。我会很感激一些帮助。我也在为使用 e->KeyData == Keys::Left) 等向左和向右移动而苦苦挣扎,并在通过循环时创建一个新块。如果你想看看,我有我的项目 rar。我已经完成了所有的课程,只是把它放在一起是很难的。