diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | c90c389a8a8d9d8661e9772ec4144c5cf2039f23 (patch) | |
tree | 6d8391395bce9eaea4ad78958617edb20c6a7573 /katomic/gamewidget.cpp | |
download | tdegames-c90c389a8a8d9d8661e9772ec4144c5cf2039f23.tar.gz tdegames-c90c389a8a8d9d8661e9772ec4144c5cf2039f23.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdegames@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'katomic/gamewidget.cpp')
-rw-r--r-- | katomic/gamewidget.cpp | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/katomic/gamewidget.cpp b/katomic/gamewidget.cpp new file mode 100644 index 00000000..fc6838a8 --- /dev/null +++ b/katomic/gamewidget.cpp @@ -0,0 +1,230 @@ +/* toplevel.cpp + + Copyright (C) 1998 Andreas Wüst (AndreasWuest@gmx.de) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + */ + +#include "settings.h" +#include "gamewidget.h" +#include "feld.h" +#include "molek.h" + +#include <qscrollbar.h> +#include <qgroupbox.h> +#include <qlayout.h> +#include <qvbox.h> +#include <qlabel.h> + +#include <kapplication.h> +#include <kscoredialog.h> +#include <kmessagebox.h> +#include <klocale.h> +#include <kstandarddirs.h> +#include <kglobal.h> +#include <ksimpleconfig.h> +#include <kglobalsettings.h> + +Options settings; + +#define MPOSX 480 +#define MPOSY 90 + +// ########################## +// # class GameWidget # +// ########################## + +int level; + +void GameWidget::moveUp() +{ + feld->startAnimation (Feld::MoveUp); +} + +void GameWidget::moveDown() +{ + feld->startAnimation (Feld::MoveDown); +} + +void GameWidget::moveLeft() +{ + feld->startAnimation (Feld::MoveLeft); +} + +void GameWidget::moveRight() +{ + feld->startAnimation (Feld::MoveRight); +} + +void GameWidget::nextAtom() +{ + feld->nextAtom(); +} + +void GameWidget::previousAtom() +{ + feld->previousAtom(); +} + +void GameWidget::getButton (int button) +{ + feld->startAnimation ((Feld::Direction)button); +} + +void GameWidget::doUndo () +{ + feld->doUndo (); +} + +void GameWidget::doRedo () +{ + feld->doRedo (); +} + +void GameWidget::gameOver(int moves) { + KMessageBox::information(this, i18n("You solved level %1 with %2 moves!").arg(level).arg(moves), i18n("Congratulations")); + + KScoreDialog high(KScoreDialog::Name | KScoreDialog::Score, this); + high.setCaption(i18n("Level %1 Highscores").arg(level)); + high.setConfigGroup(QString("Highscores Level %1").arg(level)); + + KScoreDialog::FieldInfo scoreInfo; + + if (high.addScore(moves, scoreInfo, true, true)) + { + high.exec(); + } + updateLevel(level+1); +} + +void GameWidget::getMoves(int moves) +{ + current.setNum(moves); + ys->setText(current); +} + +void GameWidget::updateLevel (int l) +{ + level=l; + QString levelFile = locate("appdata", QString("levels/level_%1").arg(l)); + if (levelFile.isNull()) { + return updateLevel(1); + } + + KSimpleConfig cfg(levelFile, true); + cfg.setGroup("Level"); + feld->load(cfg); + + highScore->setConfigGroup(QString("High Scores Level %1").arg(level)); + highest.setNum(highScore->highScore()); + + if (highest != "0" ) hs->setText(highest); + else hs->setText("-"); + ys->setText("0"); + scrl->setValue(level); + + feld->repaint(); +} + +void GameWidget::restartLevel() +{ + updateLevel(level); +} + +GameWidget::GameWidget ( QWidget *parent, const char* name ) + : QWidget( parent, name ) +{ + level = 1; + nlevels = KGlobal::dirs()->findAllResources("appdata", "levels/level_*", + false, true).count(); + + QHBoxLayout *top = new QHBoxLayout(this, 10); + + // spielfeld + feld = new Feld (this, "feld"); + feld->setFocus(); + + top->addWidget(feld); + + QVBox *vb = new QVBox(this); + vb->setSpacing(20); + top->addWidget(vb); + + // scrollbar + scrl = new QScrollBar(1, nlevels, 1, + 5, 1, QScrollBar::Horizontal, vb, "scrl" ); + connect (scrl, SIGNAL (valueChanged (int)), SLOT (updateLevel (int))); + + // molekül + molek = new Molek (vb, "molek"); + feld->setMolek(molek); + + connect (feld, SIGNAL (gameOver(int)), SLOT(gameOver(int))); + connect (feld, SIGNAL (sendMoves(int)), SLOT(getMoves(int))); + connect (feld, SIGNAL (enableRedo(bool)), SIGNAL(enableRedo(bool))); + connect (feld, SIGNAL (enableUndo(bool)), SIGNAL(enableUndo(bool))); + + highScore = new KScoreDialog(KScoreDialog::Name | KScoreDialog::Score, this); + + // the score group + QGroupBox *bg = new QGroupBox (i18n("Score"), vb, "bg"); + QBoxLayout *slay = new QVBoxLayout (bg, 10); + + slay->addSpacing(10); + + slay->addWidget(new QLabel(i18n("Highscore:"), bg)); + + QFont headerFont = KGlobalSettings::generalFont(); + headerFont.setBold(true); + + hs = new QLabel (highest, bg); + hs->setAlignment(Qt::AlignRight); + hs->setFont(headerFont); + slay->addWidget(hs); + + slay->addSpacing(10); + + slay->addWidget(new QLabel(i18n("Your score so far:"), bg)); + + ys = new QLabel (current, bg); + ys->setAlignment(Qt::AlignRight); + ys->setFont(headerFont); + slay->addWidget(ys); + + updateLevel(1); + + KConfig *config = KGlobal::config(); + config->setGroup("Options"); + settings.anim_speed = config->readNumEntry("Animation Speed", 1); + if (settings.anim_speed < 1 || settings.anim_speed > MAX_SPEED) + settings.anim_speed = 1; + + settings.changed = false; +} + +GameWidget::~GameWidget() +{ +} + +void GameWidget::showHighscores () +{ + KScoreDialog high(KScoreDialog::Name | KScoreDialog::Score, this); + high.setCaption(i18n("Level %1 Highscores").arg(level)); + high.setConfigGroup(QString("Highscores Level %1").arg(level)); + high.exec(); +} + +#include "gamewidget.moc" |