From: Marja Hassinen Date: Sun, 3 Jan 2010 19:14:50 +0000 (+0200) Subject: Refining the "continuing game" feature. X-Git-Tag: 0.1~25 X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;ds=sidebyside;h=69803eadbe3e842830fbd5878b314876e1714992;p=evilplumber Refining the "continuing game" feature. --- diff --git a/src/game.cpp b/src/game.cpp index 907292c..bd9b0b9 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -49,8 +49,7 @@ QString pieceToIconId(const Piece* piece, bool flow1 = false, bool flow2 = false fileName += (QString("_flow_") + (flow1? "1" : "0") + (flow2? "1" : "0")); } - - qDebug() << "need: " << fileName; + //qDebug() << "need: " << fileName; return fileName + ".png"; } @@ -555,12 +554,12 @@ LevelSwitcher::LevelSwitcher(GameController* gameController, QWidget* startWidget, QLabel* startTitle, QLabel* startLabel, QPushButton* startButton, QLabel* levelLabel, QLabel* scoreLabel, - QStringList levelCollections) + QStringList collections) : gameController(gameController), levelWidget(levelWidget), levelList(levelList), levelStartButton(levelStartButton), startWidget(startWidget), startTitle(startTitle), startLabel(startLabel), startButton(startButton), levelLabel(levelLabel), scoreLabel(scoreLabel), - levelCollections(levelCollections), curColl(0), level(0), totalScore(0) + curColl(""), level(0), totalScore(0) { connect(levelStartButton, SIGNAL(clicked()), this, SLOT(onLevelCollectionChosen())); @@ -568,6 +567,7 @@ LevelSwitcher::LevelSwitcher(GameController* gameController, connect(gameController, SIGNAL(levelPassed(int)), this, SLOT(onLevelPassed(int))); connect(gameController, SIGNAL(levelFailed()), this, SLOT(onLevelFailed())); readSavedGames(); + readLevelCollections(collections); chooseLevelCollection(); } @@ -575,7 +575,7 @@ void LevelSwitcher::chooseLevelCollection() { levelList->clear(); bool first = true; - foreach (const QString& collection, levelCollections) { + foreach (const QString& collection, levelCollections.keys()) { QListWidgetItem *newItem = new QListWidgetItem(); // Check how many levels the user has already passed @@ -583,10 +583,15 @@ void LevelSwitcher::chooseLevelCollection() if (savedGames.contains(collection)) { passed = savedGames[collection]; } + int total = 0; + if (levelCollections.contains(collection)) { + total = levelCollections[collection].size(); + } - newItem->setText(collection + " " + QString::number(passed) + " / " /*+ y*/); + newItem->setText(collection + " " + + QString::number(passed) + " / " + QString::number(total)); levelList->addItem(newItem); // transfers ownership - if (first) { // TODO: and passed < total + if (first && passed < total) { levelList->setCurrentItem(newItem); first = false; } @@ -598,22 +603,19 @@ void LevelSwitcher::onLevelCollectionChosen() { levelWidget->hide(); curColl = levelList->currentItem()->text().split(" ").first(); - QFile file(QString(LEVDIR) + "/" + curColl + ".dat"); - qDebug() << "Trying to read" << file.fileName(); - if (!file.exists()) - qFatal("Error reading game file: doesn't exist"); - file.open(QIODevice::ReadOnly); - QTextStream levelData(&file); - levels.clear(); - - while (!levelData.atEnd()) - levels << levelData.readLine(); + + if (levelCollections.contains(curColl)) { + levels = levelCollections[curColl]; + } + else + qFatal("Error choosing a level collection: unrecognized"); level = 0; // Go to the level the user has not yet passed if (savedGames.contains(curColl)) { + qDebug() << "going to saved level" << savedGames[curColl]; level = savedGames[curColl]; - if (level >= levels.size() - 1) { + if (level >= levels.size()) { level = 0; } } @@ -621,7 +623,6 @@ void LevelSwitcher::onLevelCollectionChosen() totalScore = 0; startTitle->setText("Starting a new game."); scoreLabel->setText("0"); - file.close(); initiateLevel(); } @@ -676,7 +677,7 @@ void LevelSwitcher::onLevelPassed(int score) startButton->disconnect(); connect(startButton, SIGNAL(clicked()), this, SLOT(chooseLevelCollection())); // Record that all levels have been passed - savedGames.insert(curColl, levels.size() - 1); + savedGames.insert(curColl, levels.size()); writeSavedGames(); level = 0; @@ -710,12 +711,31 @@ void LevelSwitcher::readSavedGames() file.close(); } +void LevelSwitcher::readLevelCollections(QStringList collections) +{ + foreach (const QString& coll, collections) { + QFile file(QString(LEVDIR) + "/" + coll + ".dat"); + qDebug() << "Trying to read" << file.fileName(); + if (!file.exists()) + qFatal("Error reading level collection: doesn't exist"); + file.open(QIODevice::ReadOnly); + QTextStream levelData(&file); + QStringList readLevels; + while (!levelData.atEnd()) + readLevels << levelData.readLine(); + + levelCollections.insert(coll, readLevels); + file.close(); + } +} + void LevelSwitcher::writeSavedGames() { QFile file(QDir::homePath() + "/.evilplumber"); file.open(QIODevice::Truncate | QIODevice::WriteOnly); QTextStream saveData(&file); foreach (const QString& collection, savedGames.keys()) { + qDebug() << "writing" << collection << savedGames[collection]; saveData << collection << " " << savedGames[collection] << endl; } file.close(); diff --git a/src/game.h b/src/game.h index 681aac8..8ec06d4 100644 --- a/src/game.h +++ b/src/game.h @@ -245,6 +245,7 @@ private: void initiateLevel(); void readSavedGames(); void writeSavedGames(); + void readLevelCollections(QStringList collections); GameController* gameController; // Not owned QWidget* levelWidget; // Not owned @@ -257,12 +258,12 @@ private: QLabel* levelLabel; // Not owned QLabel* scoreLabel; // Not owned - QStringList levelCollections; QString curColl; QStringList levels; int level; int totalScore; QHash savedGames; // level collection -> next level ix + QHash levelCollections; // level collection -> level names }; #endif