void Tetris::moveHorizontallyBy(int xMovement){ int newX = this->currentTetromino.getX() + xMovement; Tetromino newTetromino = Tetromino(this->currentTetromino); newTetromino.setX(newX); if(isTetrominoActionValid(newTetromino)){ this->currentTetromino = newTetromino; } }
//each clock iteration will move the block along the y-axis void Engine::clock() { Tetromino activeBlock = _tetromino; activeBlock.move(0,1); //block has not hit wall or another block if(!_grid.collides(activeBlock)) { _tetromino = activeBlock; } //update the grid and create a new tetromino else { _grid.join(_tetromino); _grid.removeLines(); //create new block _tetromino = Tetromino(Tetromino::Block(rand() % 7)); if(_grid.collides(_tetromino)) //check for collision at the top { restart(); } } }
//redraw grid and block void Engine::restart() { _grid = Grid(); _tetromino = Tetromino(Tetromino::Block(rand()%7)); }