void MainWindow::rightClickMenu(const QPoint &pos){ QPoint PItem = ui->list_LevelSet->mapToGlobal(pos); if(ui->list_LevelSet->indexAt(pos).row() >= 0){ QMenu submenu; submenu.addAction("Regenerate Level"); submenu.addAction("Delete Level"); submenu.addAction("View Solution"); QAction* rightClickItem = submenu.exec(PItem); if(rightClickItem && rightClickItem->text().contains("Delete Level")){ QListWidgetItem* item = ui->list_LevelSet->takeItem(ui->list_LevelSet->indexAt(pos).row()); if(item != NULL){ int levelNum = item->data(Qt::UserRole).toInt(); Generator.deleteLevel(levelNum); vector<SokoGenerator::Level> levelSet = Generator.getLevels(); for(int i = levelNum; i < ui->list_LevelSet->count(); i++){ ui->list_LevelSet->item(i)->setData(Qt::UserRole, i); int millis = levelSet[i].generationTime % 1000; int seconds = ((int)levelSet[i].generationTime / 1000) % 60 ; int minutes = ((int)levelSet[i].generationTime / (1000*60)) % 60; QString padMillis = QString("%1").arg(millis, 3, 10, QChar('0')); QString padSeconds = QString("%1").arg(seconds, 2, 10, QChar('0')); QString padMinutes = QString("%1").arg(minutes, 2, 10, QChar('0')); QString diff = levelSet[i].difficulty; ui->list_LevelSet->item(i)->setText("Level " + QString::number(i+1) + " - " + padMinutes + ":" + padSeconds + ":" + padMillis + " - " + diff); } if(item->data(Qt::UserRole).toInt() == ui->list_LevelSet->count()){ ui->list_LevelSet->setCurrentRow(ui->list_LevelSet->count()-1); } else{ ui->list_LevelSet->setCurrentRow(item->data(Qt::UserRole).toInt()); } delete item; } } else if(rightClickItem && rightClickItem->text().contains("Regenerate Level")){ int row = ui->list_LevelSet->indexAt(pos).row(); if(row >= 0){ regenerateLevel(row); displayLevel(row); } } else if(rightClickItem && rightClickItem->text().contains("View Solution")){ int row = ui->list_LevelSet->indexAt(pos).row(); if(row >= 0){ QString solution = createSolution(row); QMessageBox::about(this, "Level " + QString::number(row+1) + " Solution", solution); } } } }
void MainWindow::resetGame() { score = 0; level = 1; numberOfRobots = MIN_ROBOTS; gameState = GameState(numberOfRobots); gameState.draw(scene); displayScore(); displayLevel(); gameOver = false; gameOverWindow.hide(); }
void kajiya2D::runKajiya2D() { while (inputHandlerThread_->globalflags_.Running) { handleEvents(); if(inputHandlerThread_->globalflags_.displaySpritesLibrary) { displaySpritesLibrary(); } else { displayLevel(); } appWindow_->Display(); appWindow_->Clear(); } }
/* * Process results of viable move */ void MainWindow::processMove(bool waiting) { gameState.moveRobots(); score += gameState.countCollisions() * (POINTS_PER_ROBOT + (waiting ? WAIT_BONUS : 0)); gameState.draw(scene); displayScore(); if (!gameState.anyRobotsLeft()) { // won level numberOfRobots = std::min(MAX_ROBOTS, numberOfRobots + ROBOTS_INC); gameState = GameState(numberOfRobots); gameState.draw(scene); ++level; displayLevel(); } else if (gameState.heroDead()) { // game over gameOver = true; gameOverWindow.show(); } }