示例#1
0
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();
}
示例#3
0
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();
    }
}