这是我的代码,用于检查将来的移动是否合法,我已经假定其合法并将移动复制到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拥有TCell数组,该数组具有颜色,并且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,如果您想查看的话。我完成了所有的类(class),将其放在一起是很难的。
Project Tetris
最佳答案
我看到三个问题。
关于c++ - 当单元格是否为空时,CLI/C++ Tetris块崩溃MSVisualStudio 2008,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12109860/