-rw-r--r-- | noncore/games/kpacman/board.cpp | 6 | ||||
-rw-r--r-- | noncore/games/kpacman/keys.cpp | 10 | ||||
-rw-r--r-- | noncore/games/kpacman/kpacman.cpp | 30 | ||||
-rw-r--r-- | noncore/games/kpacman/kpacmanwidget.cpp | 4 | ||||
-rw-r--r-- | noncore/games/kpacman/painter.cpp | 6 | ||||
-rw-r--r-- | noncore/games/kpacman/referee.cpp | 54 | ||||
-rw-r--r-- | noncore/games/kpacman/score.cpp | 48 | ||||
-rw-r--r-- | noncore/games/kpacman/status.cpp | 4 |
8 files changed, 81 insertions, 81 deletions
diff --git a/noncore/games/kpacman/board.cpp b/noncore/games/kpacman/board.cpp index 849e75b..f95f699 100644 --- a/noncore/games/kpacman/board.cpp +++ b/noncore/games/kpacman/board.cpp @@ -1,256 +1,256 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <klocale.h> #endif #include <qrect.h> #include <qregexp.h> #include <qmessagebox.h> #include <qfile.h> #include <qtextstream.h> #include "board.h" #include "bitmaps.h" Board::Board(int size) : QArray<int> (size) { sz = size; // set size of board map = ""; mapName = ""; // no map loaded so far init(None); // initialize varibales } void Board::init(Image image, QString levelName) { prisonEntry = OUT; prisonExit = OUT; fruitHome = OUT; fruitPosition = OUT; pacmanHome = OUT; pacmanPosition = OUT; for (int m = 0; m < 8; m++) { monsterHome[m] = OUT; monsterPosition[m] = OUT; } for (int e = 0; e < 8; e++) { energizerPosition[e] = OUT; } for (int e = 0; e < 8; e++) { tunnelPosition[e] = OUT; } fill(0); numPoints = 0; numEnergizers = 0; numMonsters = 0; numTunnels = 0; if (!levelName.isNull() && !levelName.isEmpty()) if (mapName == levelName) image = File; else { QFile levelFile(levelName); if (!levelFile.open(IO_ReadOnly)) { - QString msg = i18n("The levelmap could not be constructed.\n\n" + QString msg = "The levelmap could not be constructed.\n\n" "The file '@LEVELNAME@' does not exist,\n" - "or could not be opened for reading."); + "or could not be opened for reading."; msg.replace(QRegExp("@LEVELNAME@"), levelName); - // QMessageBox::information(0, i18n("Initialization Error"), msg); + // QMessageBox::information(0, tr("Initialization Error"), msg); printf("%s\n", msg.data()); } else { map.fill(' ', BoardHeight*BoardWidth); int height = 0; QTextStream levelStream(&levelFile); while (!levelStream.eof() && height < BoardHeight) { QString line = levelStream.readLine(); if (line.find(QRegExp("^ *;")) == -1) { line.replace(QRegExp(";.*"), ""); // strip off comments line.replace(QRegExp("\" *$"), ""); // strip off trailing " line.replace(QRegExp("^ *\""), ""); // strip off leading " map.replace(height*BoardWidth, (line.length() > BoardWidth) ? BoardWidth : line.length(), line.data()); height++; } } mapName = levelName; levelFile.close(); image = File; } } switch (image) { case Intro : // setup(demo_bits); break; case Demo : setup(demo_bits); break; case Level : setup(demo_bits); break; case File : setup((uchar *) map.data()); break; default : break; } } void Board::setup(const uchar *buf) { for ( int index = 0; buf[index] != 0 && index < BoardWidth*BoardHeight; index++ ) { switch (buf[index]) { case '*' : set(index, brick); break; case '+' : set(index, out); break; case '#' : set(index, prison); break; case '-' : set(index, gate); break; case 'E' : set(index, tunnel); break; case '.' : set(index, Point); break; case 'o' : set(index, energizer); break; case 'I' : set(index, prisonentry); break; case 'O' : set(index, prisonexit); break; case 'F' : set(index, fruithome); break; case 'P' : set(index, pacmanhome); break; default : if (buf[index] >= '0' && buf[index] <= '7') { set(index, monsterhome, buf[index]-(uchar)'0'); } } } } bool Board::inBounds(int pos) { return ( pos < 0 || pos > sz-1 ? FALSE : TRUE); } void Board::set(int pos, Square sq, int m) { if (inBounds(pos)) switch (sq) { case out : at(pos) = OUT; break; case Point : at(pos) |= pointBit; numPoints++; break; case tunnel : at(pos) = sq; for (int e = 0; e < numTunnels; e++) { // if tunnel is already on board if (tunnelPosition[e] == pos) // don't do it again. pos = OUT; } if (pos != OUT) { tunnelPosition[numTunnels] = pos; numTunnels++; } break; case energizer : at(pos) |= energizerBit; for (int e = 0; e < numEnergizers; e++) { if (energizerPosition[e] == pos) pos = OUT; } if (pos != OUT) { energizerPosition[numEnergizers] = pos; numEnergizers++; } break; case fruit : at(pos) |= fruitBit; fruitPosition = pos; break; case pacman : at(pos) |= pacmanBit; pacmanPosition = pos; break; case monster : at(pos) |= (monsterBit << m); monsterPosition[m] = pos; break; case prisonentry : prisonEntry = pos; at(pos) = empty; break; case prisonexit : prisonExit = pos; at(pos) = empty; break; case fruithome : fruitHome = pos; at(pos) = empty; break; case pacmanhome : pacmanHome = pos; at(pos) = empty; break; case monsterhome : monsterHome[m] = pos; at(pos) = empty; if (m == 0 && prisonExit == OUT) prisonExit = pos; if (m == 1 && prisonEntry == OUT) prisonEntry = pos; numMonsters++; break; default : at(pos) = sq; } } void Board::reset(int pos, Square sq, int m) { bool found = FALSE; if (inBounds(pos)) switch (sq) { case out : at(pos) = empty; break; case Point : at(pos) &= ~ pointBit; numPoints--; break; case energizer : at(pos) &= ~ energizerBit; for (int e = 0; e < numEnergizers; e++) { // delete the position of the eaten if (found) // energizer in the position array energizerPosition[e-1] = energizerPosition[e]; if (energizerPosition[e] == pos) found = TRUE; } energizerPosition[numEnergizers--] = OUT; break; case fruit : at(pos) &= ~ fruitBit; fruitPosition = OUT; break; case pacman : at(pos) &= ~ pacmanBit; pacmanPosition = OUT; break; case monster : at(pos) &= ~ (monsterBit << m); monsterPosition[m] = OUT; break; default : at(pos) = at(pos) & varBits; } } int Board::position(Square sq, int m) { switch(sq) { case prisonentry : return prisonEntry; case prisonexit : return prisonExit; case fruit : return fruitPosition; case fruithome : return fruitHome; case pacman : return pacmanPosition; case pacmanhome : return pacmanHome; case monster : return monsterPosition[m]; case monsterhome : return monsterHome[m]; case energizer : return energizerPosition[m]; case tunnel : return tunnelPosition[m]; default : return OUT; } } bool Board::isOut(int pos) { if (inBounds(pos)) return (at(pos) == OUT ? TRUE : FALSE); return TRUE; } bool Board::isEmpty(int pos) { if (inBounds(pos)) return ((at(pos) & fixBits) == empty ? TRUE : FALSE); return TRUE; } bool Board::isBrick(int pos) { if (inBounds(pos)) return ((at(pos) & fixBits) == brick ? TRUE : FALSE); return FALSE; } bool Board::isPrison(int pos) { if (inBounds(pos)) return ((at(pos) & fixBits) == prison ? TRUE : FALSE); return FALSE; } bool Board::isGate(int pos) { if (inBounds(pos)) return ((at(pos) & fixBits) == gate ? TRUE : FALSE); return FALSE; } bool Board::isTunnel(int pos) { if (inBounds(pos)) diff --git a/noncore/games/kpacman/keys.cpp b/noncore/games/kpacman/keys.cpp index c609373..8b17785 100644 --- a/noncore/games/kpacman/keys.cpp +++ b/noncore/games/kpacman/keys.cpp @@ -1,203 +1,203 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <klocale.h> #include <kstddirs.h> #include <kaccel.h> #include <keys.h> #include <keys.moc> #elif defined( QPE_PORT ) #include <qaccel.h> #include <qpe/qpeapplication.h> #include "config.h" #include "keys.h" #endif #include <qpushbt.h> #include <qlabel.h> #include <qframe.h> #include <qkeycode.h> #include <qpixmap.h> #include <qstring.h> Keys::Keys( QWidget *parent, const char *name) : QDialog( parent, name, TRUE ) { //KStandardDirs *dirs = KGlobal::dirs(); QPushButton *okButton = new QPushButton(this); - okButton->setText(i18n("Ok")); + okButton->setText(tr("Ok")); okButton->setFixedSize(okButton->size()); connect( okButton, SIGNAL(clicked()),this, SLOT(ok()) ); okButton->move(20,210); QPushButton *defaultButton = new QPushButton(this); - defaultButton->setText(i18n("Defaults")); + defaultButton->setText(tr("Defaults")); defaultButton->setFixedSize(defaultButton->size()); connect( defaultButton, SIGNAL(clicked()),this, SLOT(defaults()) ); defaultButton->move(140,210); QPushButton *cancelButton = new QPushButton(this); - cancelButton->setText(i18n("Cancel")); + cancelButton->setText(tr("Cancel")); cancelButton->setFixedSize(cancelButton->size()); connect( cancelButton, SIGNAL(clicked()),this, SLOT(reject()) ); cancelButton->move(260,210); QFrame *separator = new QFrame(this); separator->setFrameStyle( QFrame::HLine | QFrame::Sunken ); separator->setGeometry( 20, 190, 340, 4 ); for ( int x = 0; x < 4; x++) { QLabel *l = new QLabel(this); l->setAlignment(AlignCenter); labels[x] = l; } labels[0]->setGeometry(120, 20, 140, 20 ); labels[1]->setGeometry(120,160, 140, 20 ); labels[2]->setGeometry( 20, 92, 100, 20 ); labels[3]->setGeometry(265, 92, 100, 20 ); QString pixPath; QPushButton *up = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/up.xpm" ); up->setPixmap( QPixmap(pixPath)); up->setFixedSize(up->pixmap()->size()); connect( up, SIGNAL(clicked()),this, SLOT(butUp()) ); up->move(180, 50); QPushButton *down = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/down.xpm"); down->setPixmap( QPixmap(pixPath)); down->setFixedSize(down->pixmap()->size()); connect( down, SIGNAL(clicked()),this, SLOT(butDown()) ); down->move(180, 130); QPushButton *left = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/left.xpm"); left->setPixmap( QPixmap(pixPath)); left->setFixedSize(left->pixmap()->size()); connect( left, SIGNAL(clicked()),this, SLOT(butLeft()) ); left->move(140, 90); QPushButton *right = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/right.xpm"); right->setPixmap( QPixmap(pixPath)); right->setFixedSize(right->pixmap()->size()); connect( right, SIGNAL(clicked()),this, SLOT(butRight()) ); right->move(220, 90); - setCaption(i18n("Change Direction Keys")); + setCaption(tr("Change Direction Keys")); setFixedSize(380, 260); lab = 0; init(); } void Keys::keyPressEvent( QKeyEvent *e ) { uint kCode = e->key() & ~(SHIFT | CTRL | ALT); QString string = KAccel::keyToString(kCode); if (lab != 0) { if ( string.isNull() ) - lab->setText(i18n("Undefined key")); + lab->setText(tr("Undefined key")); else lab->setText(string); } else if ( lab == 0 && e->key() == Key_Escape) reject(); } void Keys::butUp() { getKey(0); } void Keys::butDown() { getKey(1); } void Keys::butLeft() { getKey(2); } void Keys::butRight() { getKey(3); } void Keys::getKey(int i) { if ( lab != 0) focusOut(lab); focusIn(labels[i]); } void Keys::focusOut(QLabel *l) { l->setFrameStyle( QFrame::NoFrame ); l->setBackgroundColor(backgroundColor()); l->repaint(); } void Keys::focusIn(QLabel *l) { lab = l; lab->setFrameStyle( QFrame::Panel | QFrame::Sunken ); lab->setBackgroundColor(white); lab->repaint(); } void Keys::defaults() { if ( lab != 0) focusOut(lab); lab = 0; labels[0]->setText("Up"); labels[1]->setText("Down"); labels[2]->setText("Left"); labels[3]->setText("Right"); } void Keys::init() { APP_CONFIG_BEGIN( cfg ); QString up("Up"); up = cfg->readEntry("upKey", (const char*) up); labels[0]->setText(up); QString down("Down"); down = cfg->readEntry("downKey", (const char*) down); labels[1]->setText(down); QString left("Left"); left = cfg->readEntry("leftKey", (const char*) left); labels[2]->setText(left); QString right("Right"); right = cfg->readEntry("rightKey", (const char*) right); labels[3]->setText(right); APP_CONFIG_END( cfg ); } void Keys::ok() { APP_CONFIG_BEGIN( cfg ); cfg->writeEntry("upKey", (const char*) labels[0]->text() ); cfg->writeEntry("downKey", (const char*) labels[1]->text() ); cfg->writeEntry("leftKey", (const char*) labels[2]->text() ); cfg->writeEntry("rightKey",(const char*) labels[3]->text() ); APP_CONFIG_END( cfg ); accept(); } diff --git a/noncore/games/kpacman/kpacman.cpp b/noncore/games/kpacman/kpacman.cpp index 4077085..7df6ef0 100644 --- a/noncore/games/kpacman/kpacman.cpp +++ b/noncore/games/kpacman/kpacman.cpp @@ -1,350 +1,350 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kpacman.h> #include <kpacman.moc> #include <kcolordlg.h> #elif defined( QPE_PORT ) #include <qmenubar.h> #include "config.h" #include <qapplication.h> #include "kpacman.h" #endif #include <qkeycode.h> #include <qcolor.h> #include <qstring.h> #include <qpopmenu.h> #include <qmsgbox.h> Kpacman::Kpacman(QWidget *parent, const char *name) : KTMainWindow(parent, name) { schemesPopup = new QList<QPopupMenu>; schemesPopup->setAutoDelete(TRUE); menu(); view = new KpacmanWidget( this, QString(name)+"widget"); #ifndef QWS setFixedSize(view->width(), view->height()); #else setCaption( "Kpacman" ); #endif view->referee->setFocus(); connect(view->referee, SIGNAL(setScore(int, int)), view->score, SLOT(setScore(int, int))); connect(view->referee, SIGNAL(setPoints(int)), view->score, SLOT(set(int))); connect(view->referee, SIGNAL(setLifes(int)), view->status, SLOT(setLifes(int))); connect(view->referee, SIGNAL(setLevel(int)), view->status, SLOT(setLevel(int))); connect(view->referee, SIGNAL(forcedHallOfFame(bool)), this, SLOT(forcedHallOfFame(bool))); connect(view->referee, SIGNAL(togglePaused()), this, SLOT(togglePaused())); connect(view->referee, SIGNAL(toggleNew()), this, SLOT(toggleNew())); connect(view->score, SIGNAL(toggleNew()), this, SLOT(toggleNew())); connect(view->score, SIGNAL(forcedHallOfFame(bool)), this, SLOT(forcedHallOfFame(bool))); APP_CONFIG_BEGIN( cfg ); focusOutPause = !cfg->readBoolEntry("FocusOutPause", TRUE); focusInContinue = !cfg->readBoolEntry("FocusInContinue", TRUE); hideMouseCursor = !cfg->readBoolEntry("HideMouseCursor", TRUE); APP_CONFIG_END( cfg ); toggleFocusOutPause(); toggleFocusInContinue(); toggleHideMouseCursor(); #ifndef QWS menuBar->show(); view->show(); setMenu(menuBar); setView(view); #else setCentralWidget( view ); #endif } Kpacman::~Kpacman() { APP_CONFIG_BEGIN( cfg ); cfg->writeEntry("FocusOutPause", focusOutPause); cfg->writeEntry("FocusInContinue", focusInContinue); cfg->writeEntry("HideMouseCursor", hideMouseCursor); APP_CONFIG_END( cfg ); delete _menuBar; } void Kpacman::menu() { gamePopup = new QPopupMenu(); CHECK_PTR( gamePopup ); - newID = gamePopup->insertItem(i18n("&New"), this, SLOT(newKpacman()),Key_F2); - pauseID = gamePopup->insertItem(i18n("&Pause"), + newID = gamePopup->insertItem(tr("&New"), this, SLOT(newKpacman()),Key_F2); + pauseID = gamePopup->insertItem(tr("&Pause"), this, SLOT(pauseKpacman()), Key_F3); - hofID = gamePopup->insertItem(i18n("&Hall of fame"), + hofID = gamePopup->insertItem(tr("&Hall of fame"), this, SLOT(toggleHallOfFame()), Key_F4); gamePopup->insertSeparator(); - gamePopup->insertItem(i18n("&Quit"), this, SLOT(quitKpacman()), CTRL+Key_Q); + gamePopup->insertItem(tr("&Quit"), this, SLOT(quitKpacman()), CTRL+Key_Q); gamePopup->setCheckable(TRUE); optionsPopup = new QPopupMenu(); CHECK_PTR(optionsPopup); modesPopup = new QPopupMenu(); CHECK_PTR(modesPopup); - hideMouseCursorID = optionsPopup->insertItem(i18n("&Hide Mousecursor"), + hideMouseCursorID = optionsPopup->insertItem(tr("&Hide Mousecursor"), this, SLOT(toggleHideMouseCursor()), CTRL+Key_H); optionsPopup->insertSeparator(); if (lookupSchemes() > 0) { - optionsPopup->insertItem(i18n("&Select graphic scheme"), modesPopup); + optionsPopup->insertItem(tr("&Select graphic scheme"), modesPopup); optionsPopup->insertSeparator(); } - focusOutPauseID = optionsPopup->insertItem(i18n("&Pause in Background"), + focusOutPauseID = optionsPopup->insertItem(tr("&Pause in Background"), this, SLOT(toggleFocusOutPause())); - focusInContinueID = optionsPopup->insertItem(i18n("&Continue in Foreground"), + focusInContinueID = optionsPopup->insertItem(tr("&Continue in Foreground"), this, SLOT(toggleFocusInContinue())); optionsPopup->insertSeparator(); - optionsPopup->insertItem(i18n("Change &keys..."), this, SLOT(confKeys())); + optionsPopup->insertItem(tr("Change &keys..."), this, SLOT(confKeys())); #ifndef QWS - QString aboutText = i18n("@PACKAGE@ - @VERSION@\n\n" + QString aboutText = tr("@PACKAGE@ - @VERSION@\n\n" "Joerg Thoennissen (joe@dsite.de)\n\n" "A pacman game for the KDE Desktop\n\n" "The program based on the source of ksnake\n" "by Michel Filippi (mfilippi@sade.rhein-main.de).\n" "The design was strongly influenced by the pacman\n" "(c) 1980 MIDWAY MFG.CO.\n\n" "I like to thank my girlfriend Elke Krueers for\n" "the last 10 years of her friendship.\n"); aboutText.replace(QRegExp("@PACKAGE@"), PACKAGE); aboutText.replace(QRegExp("@VERSION@"), VERSION); QPopupMenu *helpPopup = helpMenu(aboutText, FALSE); #endif //_menuBar = new KMenuBar(this); //CHECK_PTR( _menuBar ); - //_menuBar->insertItem(i18n("&Game"), gamePopup); - //_menuBar->insertItem(i18n("&Options"), optionsPopup); + //_menuBar->insertItem(tr("&Game"), gamePopup); + //_menuBar->insertItem(tr("&Options"), optionsPopup); //_menuBar->insertSeparator(); #ifndef QWS - _menuBar->insertItem(i18n("&Help"), helpPopup); + _menuBar->insertItem(tr("&Help"), helpPopup); #endif } int Kpacman::lookupSchemes() { APP_CONFIG_BEGIN( cfg ); int ModeCount = cfg->readNumEntry("ModeCount", -1); int Mode = cfg->readNumEntry("Mode", -1); int SchemeCount = cfg->readNumEntry("SchemeCount"); int Scheme = cfg->readNumEntry("Scheme", -1); if (SchemeCount == 0 || Scheme == -1) { - QMessageBox::warning(this, i18n("Configuration Error"), - i18n("There are no schemes defined,\n" + QMessageBox::warning(this, tr("Configuration Error"), + tr("There are no schemes defined,\n" "or no scheme is selected.")); APP_CONFIG_END( cfg ); return 0; } connect(modesPopup, SIGNAL(activated(int)), this, SLOT(schemeChecked(int))); modeID.resize(ModeCount > 0 ? ModeCount : 0); if (!schemesPopup->isEmpty()) schemesPopup->clear(); SAVE_CONFIG_GROUP( cfg, oldgroup ); QString ModeGroup; QString ModeName; for (int m = 0; m < ModeCount; m++) { ModeGroup.sprintf("Mode %d", m); cfg->setGroup(ModeGroup); ModeName = cfg->readEntry("Description", ModeGroup); QPopupMenu *p = new QPopupMenu; p->setCheckable(TRUE); connect(p, SIGNAL(activated(int)), this, SLOT(schemeChecked(int))); schemesPopup->append(p); modeID[m] = modesPopup->insertItem(ModeName, schemesPopup->at(m)); modesPopup->setItemEnabled(modeID[m], FALSE); modesPopup->setItemChecked(modeID[m], m == Mode); } schemeID.resize(SchemeCount); schemeMode.resize(SchemeCount); QString SchemeGroup; QString SchemeName; int SchemeMode; for (int i = 0; i < SchemeCount; i++) { SchemeGroup.sprintf("Scheme %d", i); cfg->setGroup(SchemeGroup); SchemeName = cfg->readEntry("Description", SchemeGroup); SchemeMode = cfg->readNumEntry("Mode", -1); schemeMode[i] = SchemeMode; if (SchemeMode == -1) { schemeID[i] = modesPopup->insertItem(SchemeName); modesPopup->setItemChecked(schemeID[i], i == Scheme); } else { schemeID[i] = schemesPopup->at(SchemeMode)->insertItem(SchemeName); schemesPopup->at(SchemeMode)-> setItemChecked(schemeID[i], i == Scheme); modesPopup->setItemEnabled(modeID[SchemeMode], TRUE); } } RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); return SchemeCount; } void Kpacman::quitKpacman() { APP_QUIT(); } void Kpacman::newKpacman() { if (!gamePopup->isItemEnabled(hofID)) gamePopup->setItemEnabled(hofID, TRUE); if (gamePopup->isItemChecked(hofID)) toggleHallOfFame(); if (gamePopup->isItemChecked(pauseID)) pauseKpacman(); view->referee->play(); } void Kpacman::pauseKpacman() { view->referee->pause(); view->score->setPause(gamePopup->isItemChecked(pauseID)); } void Kpacman::toggleHallOfFame() { gamePopup->setItemChecked(hofID, !gamePopup->isItemChecked(hofID)); view->referee->toggleHallOfFame(); if (gamePopup->isItemChecked(hofID)) { view->referee->lower(); view->status->lower(); } else { view->status->raise(); view->referee->raise(); view->referee->setFocus(); } } /* * Disable or enable the "Hall of fame"-menuitem if the referee says so. * This is done, to disable turning off the "hall of fame"-display, in the automated * sequence of displaying the introduction, the demonstration (or playing) and the * hall of fame. * If on == TRUE then also lower the referee and the status widgets. */ void Kpacman::forcedHallOfFame(bool on) { if (!on && !gamePopup->isItemChecked(hofID)) return; gamePopup->setItemEnabled(hofID, !on); gamePopup->setItemChecked(hofID, on); view->referee->toggleHallOfFame(); if (on) { view->referee->lower(); view->status->lower(); } else { view->status->raise(); view->referee->raise(); view->referee->setFocus(); view->referee->intro(); } } void Kpacman::togglePaused() { static bool checked = FALSE; checked = !checked; gamePopup->setItemChecked( pauseID, checked ); view->score->setPause(gamePopup->isItemChecked(pauseID)); } /* * This disables the "New Game" menuitem to prevent interruptions of the current * play. */ void Kpacman::toggleNew() { gamePopup->setItemEnabled(newID, !gamePopup->isItemEnabled(newID)); } void Kpacman::toggleHideMouseCursor() { hideMouseCursor = !hideMouseCursor; optionsPopup->setItemChecked(hideMouseCursorID, hideMouseCursor); if (hideMouseCursor) view->setCursor(blankCursor); else view->setCursor(arrowCursor); } void Kpacman::toggleFocusOutPause() { focusOutPause = !focusOutPause; optionsPopup->setItemChecked(focusOutPauseID, focusOutPause); view->referee->setFocusOutPause(focusOutPause); } void Kpacman::toggleFocusInContinue() { focusInContinue = !focusInContinue; optionsPopup->setItemChecked(focusInContinueID, focusInContinue); view->referee->setFocusInContinue(focusInContinue); } void Kpacman::confKeys() { Keys *keys = new Keys(); if (keys->exec() == QDialog::Accepted) { view->referee->initKeys(); view->score->initKeys(); } delete keys; } void Kpacman::schemeChecked(int id) { int mode = 0, scheme = -1; for (uint s = 0; s < schemeID.size(); s++) { if (schemeID[s] == id) { scheme = s; mode = schemeMode[s]; } if (schemeMode[s] == -1) { diff --git a/noncore/games/kpacman/kpacmanwidget.cpp b/noncore/games/kpacman/kpacmanwidget.cpp index 330c88e..215dcda 100644 --- a/noncore/games/kpacman/kpacmanwidget.cpp +++ b/noncore/games/kpacman/kpacmanwidget.cpp @@ -1,162 +1,162 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <kstddirs.h> #include <kpacmanwidget.h> #include <kpacmanwidget.moc> #elif defined( QPE_PORT ) #include <qpe/qpeapplication.h> #include "config.h" #include "kpacmanwidget.h" #endif #include <qmessagebox.h> #include "bitfont.h" #include "score.h" #include "referee.h" #include "status.h" KpacmanWidget::KpacmanWidget( QWidget *parent, const char *name) : QWidget( parent, name ) { bitfont = NULL; fontName = ""; scheme = mode = -1; confScheme(); score = new Score(this, name, scheme, mode, bitfont); referee = new Referee( this, name, scheme, mode, bitfont); status = new Status(this, name, scheme, mode); #ifndef QWS setFixedSize(referee->width(), bitfont->height()*3 + referee->height() + status->height()); #else setBackgroundColor( black ); #endif } KpacmanWidget::~KpacmanWidget() { } void KpacmanWidget::confMisc(bool defGroup) { APP_CONFIG_BEGIN( cfg ); //KStandardDirs *dirs = KGlobal::dirs(); QString findPath; if (defGroup || cfg->hasKey("Font")) { fontName = cfg->readEntry("Font"); if (fontName.left(1) != "/" && fontName.left(1) != "~") fontName.insert(0, "fonts/"); if (fontName.right(1) == "/") fontName.append("font.xbm"); //findPath = dirs->findResource("appdata", fontName); findPath = FIND_APP_DATA( fontName ); if (!findPath.isEmpty()) fontName = findPath; bitfontFirstChar = cfg->readNumEntry("FontFirstChar", 0x0e); bitfontLastChar = cfg->readNumEntry("FontLastChar", 0x5f); } APP_CONFIG_END( cfg ); } void KpacmanWidget::confScheme() { APP_CONFIG_BEGIN( cfg ); QString lastFontName = fontName; SAVE_CONFIG_GROUP( cfg, oldgroup ); QString newgroup; // if not set, read mode and scheme from the configfile if (mode == -1 && scheme == -1) { scheme = cfg->readNumEntry("Scheme", -1); mode = cfg->readNumEntry("Mode", -1); // if mode is not set in the defGroup-group, lookup the scheme group if (scheme != -1 || mode == -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); mode = cfg->readNumEntry("Mode", -1); RESTORE_CONFIG_GROUP( cfg, oldgroup ); } } confMisc(); if (mode != -1) { newgroup.sprintf("Mode %d", mode); cfg->setGroup(newgroup); confMisc(FALSE); } if (scheme != -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); confMisc(FALSE); } if (lastFontName != fontName) { if (bitfont != 0) delete bitfont; bitfont = new Bitfont(fontName, bitfontFirstChar, bitfontLastChar); if (bitfont->width() == 0 || bitfont->height() == 0) { - QString msg = i18n("The bitfont could not be contructed.\n\n" + QString msg = tr("The bitfont could not be contructed.\n\n" "The file '@FONTNAME@' does not exist,\n" "or is of an unknown format."); msg.replace(QRegExp("@FONTNAME@"), fontName); - // QMessageBox::critical(this, i18n("Initialization Error"), msg); + // QMessageBox::critical(this, tr("Initialization Error"), msg); printf("%s\n", msg.data()); } } RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); } void KpacmanWidget::setScheme(int Scheme, int Mode) { mode = Mode; scheme = Scheme; confScheme(); score->setScheme(Scheme, Mode, bitfont); referee->setScheme(Scheme, Mode, bitfont); status->setScheme(Scheme, Mode); #ifndef QWS setFixedSize(referee->width(), bitfont->height()*3 + referee->height() + status->height()); #endif score->repaint(FALSE); referee->repaint(FALSE); status->repaint(FALSE); } void KpacmanWidget::resizeEvent( QResizeEvent * ) { referee->setGeometry(0, bitfont->height()*3, referee->width(), referee->height()); referee->setBackgroundColor(BLACK); status->setGeometry(0, bitfont->height()*3+referee->height(), referee->width(), status->height()); status->setBackgroundColor(BLACK); score->setGeometry(0, 0, referee->width(), bitfont->height()*3+referee->height()+status->height()); score->setBackgroundColor(BLACK); } diff --git a/noncore/games/kpacman/painter.cpp b/noncore/games/kpacman/painter.cpp index 16fed55..80aeab0 100644 --- a/noncore/games/kpacman/painter.cpp +++ b/noncore/games/kpacman/painter.cpp @@ -1,273 +1,273 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <kstddirs.h> #elif defined( QPE_PORT ) #include <qpe/qpeapplication.h> #include "config.h" #endif #include <qcolor.h> #include <qpainter.h> #include <qpixmap.h> #include <qbitmap.h> #include <qrect.h> #include <qstring.h> #include <qmessagebox.h> #include <qfileinfo.h> #include "painter.h" #include "board.h" Painter::Painter( Board *b, QWidget *parent, int Scheme, int Mode, Bitfont *font) { w = parent; board = b; pointPix = NULL; wallPix = NULL; prisonPix = NULL; energizerPix = NULL; fruitPix = NULL; pacmanPix = NULL; dyingPix = NULL; eyesPix = NULL; monsterPix = NULL; fruitScorePix = NULL; monsterScorePix = NULL; lastPointPixmapName = ""; lastWallPixmapName = ""; lastPrisonPixmapName = ""; lastEnergizerPixmapName = ""; lastFruitPixmapName = ""; lastPacmanPixmapName = ""; lastDyingPixmapName = ""; lastEyesPixmapName = ""; lastMonsterPixmapName = ""; lastFruitScorePixmapName = ""; lastMonsterScorePixmapName = ""; bitfont = font; scheme = Scheme; mode = Mode; level = 0; confScheme(); } QList<QPixmap> *Painter::loadPixmap(QWidget*, QString pixmapName, QList<QPixmap> *pixmaps) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); QPixmap PIXMAP(pixmapName); if (PIXMAP.isNull() || PIXMAP.mask() == NULL) { - QString msg = i18n("The pixmap could not be contructed.\n\n" + QString msg = "The pixmap could not be contructed.\n\n" "The file '@PIXMAPNAME@' does not exist,\n" - "or is of an unknown format."); + "or is of an unknown format."; msg.replace(QRegExp("@PIXMAPNAME@"), pixmapName); - // QMessageBox::critical(parent, i18n("Initialization Error"), msg); + // QMessageBox::critical(parent, tr("Initialization Error"), msg); printf("%s\n", msg.data()); return 0; } int height = PIXMAP.height(); int width = (height == 0) ? 0 : PIXMAP.width()/(PIXMAP.width()/height); QBitmap BITMAP; QBitmap MASK; BITMAP = *PIXMAP.mask(); MASK.resize(width, height); for (int x = 0; x < PIXMAP.width()/width; x++) { QPixmap *pixmap = new QPixmap(width, height); pixmaps->append(pixmap); bitBlt(pixmap, 0, 0, &PIXMAP, x*width, 0, width, height, QPixmap::CopyROP, TRUE); bitBlt(&MASK, 0, 0, &BITMAP, x*width, 0, width, height, QPixmap::CopyROP, TRUE); pixmap->setMask(MASK); } return pixmaps; } QList<QPixmap> *Painter::textPixmap(QStrList &str, QList<QPixmap> *pixmaps, QColor fg, QColor bg) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); for (uint s = 0; s < str.count(); s++) { QPixmap *pixmap = new QPixmap(bitfont->text(str.at(s), fg, bg)); pixmaps->append(pixmap); } return pixmaps; } QList<QPixmap> *Painter::textPixmap(QString str, QList<QPixmap> *pixmaps, QColor fg, QColor bg) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); QPixmap *pixmap = new QPixmap(bitfont->text(str, fg, bg)); pixmaps->append(pixmap); return pixmaps; } /* Return the point of the upperleft pixel of the block representing that position * on the board. */ QPoint Painter::point(int pos) { return QPoint((board->x(pos)-1)*BlockWidth, (board->y(pos)-1)*BlockHeight); } QRect Painter::rect(int pos, PixMap pix, uint i) { if (pos == OUT) return QRect(); QPixmap *PIXMAP = NULL; switch (pix) { case PacmanPix : PIXMAP = pacmanPix-> at(checkRange(i, pacmanPix->count()-1)); break; case DyingPix : PIXMAP = dyingPix-> at(checkRange(i, dyingPix->count()-1)); break; case MonsterPix : PIXMAP = monsterPix-> at(checkRange(i, monsterPix->count()-1)); break; case EyesPix : PIXMAP = eyesPix-> at(checkRange(i, eyesPix->count()-1)); break; case FruitPix : PIXMAP = fruitPix-> at(checkRange(i, fruitPix->count()-1)); break; case PointPix : PIXMAP = pointPix-> at(checkRange(i, pointPix->count()-1)); break; case EnergizerPix : PIXMAP = energizerPix-> at(checkRange(i, energizerPix->count()-1)); break; case FruitScorePix : PIXMAP = fruitScorePix-> at(checkRange(i, fruitScorePix->count()-1)); break; case MonsterScorePix : PIXMAP = monsterScorePix-> at(checkRange(i,monsterScorePix->count()-1)); break; default : PIXMAP = wallPix-> at(checkRange(i, wallPix->count()-1)); } if (PIXMAP == NULL) return QRect(); QRect rect = PIXMAP->rect(); QPoint point = this->point(pos); rect.moveCenter(QPoint(point.x()-1, point.y()-1)); return rect; } QRect Painter::rect(int pos, QString str, int align) { if (pos == OUT) // return an empty rect if the position return QRect(); // is invalid QPoint point = this->point(pos); QRect rect = bitfont->rect(str); rect.moveCenter(QPoint(point.x()-1, point.y()-1)); int dx = 0; int dy = 0; if (align & QLabel::AlignLeft || align & QLabel::AlignRight) { dx = (str.length()-1) * (bitfont->width()/2); if (align & QLabel::AlignRight) dx *= -1; } if (align & QLabel::AlignTop || align & QLabel::AlignBottom) { dy = bitfont->height()/2; if (align & QLabel::AlignBottom) dy *= -1; } if (dx != 0 || dy != 0) rect.moveBy(dx, dy); return rect; } QRect Painter::rect(QRect r1, QRect r2) { QRect rect; rect.setLeft(r1.left() < r2.left() ? r1.left() : r2.left()); rect.setTop(r1.top() < r2.top() ? r1.top() : r2.top()); rect.setRight(r1.right() > r2.right() ? r1.right() : r2.right()); rect.setBottom(r1.bottom() > r2.bottom() ? r1.bottom() : r2.bottom()); return rect; } void Painter::erase(int pos, PixMap pix, uint i) { if (pos == OUT) return; QRect rect = this->rect(pos, pix, i); bitBlt(&roomPix, rect.x(), rect.y(), &backPix, rect.x(), rect.y(), rect.width(), rect.height()); } int Painter::maxPixmaps(PixMap pix) { switch (pix) { case WallPix : return (int) wallPix->count(); case PrisonPix : return (int) prisonPix->count(); case PointPix : return (int) pointPix->count(); case EnergizerPix : return (int) energizerPix->count(); case FruitPix : return (int) fruitPix->count(); case PacmanPix : return (int) pacmanPix->count(); case DyingPix : return (int) dyingPix->count(); case EyesPix : return (int) eyesPix->count(); case MonsterPix : return (int) monsterPix->count(); case FruitScorePix : return (int) fruitScorePix->count(); case MonsterScorePix : return (int) monsterScorePix->count(); default : return 0; } } void Painter::draw(QPoint point, DrawWidget where, QPixmap pix) { switch (where) { case Widget : bitBlt(w, point.x(), point.y(), &pix); break; case RoomPix : bitBlt(&roomPix, point.x(), point.y(), &pix); break; case BackPix : bitBlt(&backPix, point.x(), point.y(), &pix); diff --git a/noncore/games/kpacman/referee.cpp b/noncore/games/kpacman/referee.cpp index 567a8ed..9edaabd 100644 --- a/noncore/games/kpacman/referee.cpp +++ b/noncore/games/kpacman/referee.cpp @@ -1,361 +1,361 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <kstddirs.h> #include <kaccel.h> #include <referee.h> #include <referee.moc> #elif defined( QPE_PORT ) #include <qaccel.h> #include <qpe/qpeapplication.h> #include "config.h" #include "referee.h" #endif #include <qdatetm.h> #include <stdlib.h> #include <qtimer.h> #include <qevent.h> #include <qcolor.h> #include <qkeycode.h> #include <qfileinfo.h> #include "board.h" #include "pacman.h" #include "monster.h" #include "fruit.h" #include "painter.h" Referee::Referee( QWidget *parent, const char *name, int Scheme, int Mode, Bitfont *font) : QWidget( parent, name ) { gameState.resize(12); gameTimer = 0; energizerTimer = 0; focusedPause = FALSE; setFocusPolicy(QWidget::StrongFocus); initKeys(); scheme = Scheme; mode = Mode; confScheme(); board = new Board(BoardWidth*BoardHeight); pix = new Painter(board, this, scheme, mode, font); setFixedSize(pix->levelPix().size()); pacman = new Pacman(board); fruit = new Fruit(board); monsters = new QList<Monster>; monsters->setAutoDelete(TRUE); monsterRect = new QList<QRect>; monsterRect->setAutoDelete(TRUE); energizers = new QList<Energizer>; energizers->setAutoDelete(TRUE); energizerRect = new QList<QRect>; energizerRect->setAutoDelete(TRUE); pacmanRect.setRect(0, 0, 0, 0); fruitRect.setRect(0, 0, 0, 0); QTime midnight( 0, 0, 0 ); srand( midnight.secsTo(QTime::currentTime()) ); lifes = 0; points = 0; emit setLifes(lifes); emit setPoints(points); intro(); } void Referee::paintEvent( QPaintEvent *e) { if (gameState.testBit(HallOfFame)) return; QRect rect = e->rect(); if (!rect.isEmpty()) { QPixmap p = pix->levelPix(); bitBlt(this, rect.x(), rect.y(), &p, rect.x(), rect.y(), rect.width(), rect.height()); } if ((gameState.testBit(GameOver) || gameState.testBit(Demonstration)) && - rect.intersects(pix->rect(board->position(fruithome), i18n("GAME OVER")))) - pix->draw(board->position(fruithome), Widget, i18n("GAME OVER"), RED); + rect.intersects(pix->rect(board->position(fruithome), tr("GAME OVER")))) + pix->draw(board->position(fruithome), Widget, tr("GAME OVER"), RED); for (Energizer *e = energizers->first(); e != 0; e = energizers->next()) { if (e && e->state() == on && rect.intersects(pix->rect(e->position(), EnergizerPix)) && !(e->position() == pacman->position() && gameState.testBit(Scoring))) { if (e->pix() != -1) pix->draw(e->position(), Widget, EnergizerPix, e->pix()); } } if (!gameState.testBit(Init)) { if (!gameState.testBit(Dying) && (fruit->pix() != -1)) if (fruit->state() != active) { if (rect.intersects(pix->rect(fruit->position(), FruitScorePix, fruit->pix()))) pix->draw(fruit->position(), Widget, FruitScorePix, fruit->pix()); } else { if (rect.intersects(pix->rect(fruit->position(), FruitPix, fruit->pix()))) pix->draw(fruit->position(), Widget, FruitPix, fruit->pix()); } for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->state() == harmless && rect.intersects(pix->rect(m->position(), MonsterPix)) && !(m->position() == pacman->position() && gameState.testBit(Scoring))) { if (m->body() != -1) pix->draw(m->position(), Widget, MonsterPix, m->body()); if (m->eyes() != -1) pix->draw(m->position(), Widget, EyesPix, m->eyes()); } if (!gameState.testBit(Scoring) && !gameState.testBit(LevelDone) && rect.intersects(pix->rect(pacman->position(), PacmanPix)) && pacman->pix() != -1) pix->draw(pacman->position(), Widget, PacmanPix, pacman->pix()); for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->state() != harmless && rect.intersects(pix->rect(m->position(), MonsterPix)) && !(m->position() == pacman->position() && gameState.testBit(Scoring))) { if (m->body() != -1) pix->draw(m->position(), Widget, MonsterPix, m->body()); if (m->eyes() != -1) pix->draw(m->position(), Widget, EyesPix, m->eyes()); } } if (gameState.testBit(Scoring) && rect.intersects(pix->rect(pacman->position(), MonsterScorePix, monstersEaten-1))) pix->draw(pacman->position(), Widget, MonsterScorePix, monstersEaten-1); if (gameState.testBit(Init) && gameState.testBit(Dying) && timerCount < pix->maxPixmaps(DyingPix) && rect.intersects(pix->rect(pacman->position(), PacmanPix))) pix->draw(pacman->position(), Widget, DyingPix, timerCount); if (gameState.testBit(LevelDone) && rect.intersects(pix->rect(pacman->position(), PacmanPix))) pix->draw(pacman->position(), Widget, PacmanPix, pacman->pix()); if (gameState.testBit(Player) && - rect.intersects(pix->rect(board->position(monsterhome, 0), i18n("PLAYER ONE")))) - pix->draw(board->position(monsterhome, 0), Widget, i18n("PLAYER ONE"), CYAN); + rect.intersects(pix->rect(board->position(monsterhome, 0), tr("PLAYER ONE")))) + pix->draw(board->position(monsterhome, 0), Widget, tr("PLAYER ONE"), CYAN); if (gameState.testBit(Ready) && - rect.intersects(pix->rect(board->position(fruithome), i18n("READY!")))) - pix->draw(board->position(fruithome), Widget, i18n("READY!"), YELLOW); + rect.intersects(pix->rect(board->position(fruithome), tr("READY!")))) + pix->draw(board->position(fruithome), Widget, tr("READY!"), YELLOW); if (gameState.testBit(Paused) && - rect.intersects(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, i18n("PAUSED")))) - pix->draw((BoardWidth*BoardHeight)/2-BoardWidth, Widget, i18n("PAUSED"), RED, BLACK); + rect.intersects(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, tr("PAUSED")))) + pix->draw((BoardWidth*BoardHeight)/2-BoardWidth, Widget, tr("PAUSED"), RED, BLACK); } void Referee::timerEvent( QTimerEvent *e ) { if (gameState.testBit(HallOfFame)) return; QRect lastRect; int lastPix; bool moved = FALSE; int eated = 0; if (e->timerId() == energizerTimer) { for (int e = 0; e < board->energizers(); e++) { lastRect = pix->rect(energizers->at(e)->position(), EnergizerPix); lastPix = energizers->at(e)->pix(); if (energizers->at(e)->move()) { moved = TRUE; *energizerRect->at(e) = pix->rect(energizers->at(e)->position(), EnergizerPix); if (lastPix == energizers->at(e)->pix() && lastRect == pix->rect(energizers->at(e)->position(), EnergizerPix)) energizerRect->at(e)->setRect(0, 0, 0, 0); else *energizerRect->at(e) = pix->rect(*energizerRect->at(e), lastRect); } } for (int e = 0; e < board->energizers(); e++) if (!energizerRect->at(e)->isNull()) repaint(*energizerRect->at(e), FALSE); return; } timerCount++; lastRect = pix->rect(pacman->position(), PacmanPix); lastPix = pacman->pix(); if (moved = pacman->move()) { // pacman really moved pacmanRect = pix->rect(pacman->position(), PacmanPix); if (lastPix == pacman->pix() && lastRect == pix->rect(pacman->position(), PacmanPix)) pacmanRect.setRect(0, 0, 0, 0); // nothing to do, because the pixmap else // and the position isn't changed. pacmanRect = pix->rect(pacmanRect, lastRect); } else pacmanRect.setRect(0, 0, 0, 0); int pos = pacman->position(); if (moved && board->isMonster(pos) && !gameState.testBit(Dying)) { for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->position() == pos) { if (m->state() == harmless && !gameState.testBit(Dying)) { m->setREM(remTicks[level]); m->setDirection(X); // prevent movement before eaten() eated++; if (gameState.testBit(Introducing)) m->setPosition(OUT); } if (m->state() == dangerous && !gameState.testBit(Dying)) killed(); } } if (moved && !gameState.testBit(Dying)) { if (board->isPoint(pos)) { board->reset(pos, Point); score(pointScore); pix->erase(pos, PointPix); } if (board->isEnergizer(pos)) { for (int e = 0; e < board->energizers();e++) { if (energizers->at(e)->position() == pos) { energizers->at(e)->setOff(); energizers->remove(e); energizerRect->remove(e); e = board->energizers(); } } board->reset(pos, energizer); score(energizerScore); monstersEaten = 0; for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->state() != rem) { m->setHarmless(harmlessTicks[level], harmlessDurTicks[level], harmlessWarnTicks[level]); if (gameState.testBit(Introducing)) m->setDirection(board->turn(m->direction())); } } if (pos == fruit->position() && fruit->state() == active) { fruit->setEaten(fruitScoreDurTicks[level]); initFruit(FALSE); score(fruitScore[fruit->pix()]); } } if (!gameState.testBit(Introducing)) { if (fruit->state() != active && fruit->pix() >= 0) lastRect = pix->rect(fruit->position(), FruitScorePix, fruit->pix()); else lastRect = pix->rect(fruit->position(), FruitPix, fruit->pix()); lastPix = fruit->pix(); if (fruit->move()) { if (pos == fruit->position() && fruit->state() == active) { fruit->setEaten(fruitScoreDurTicks[level]); initFruit(FALSE); score(fruitScore[fruit->pix()]); } if (fruit->state() != active && fruit->pix() >= 0) fruitRect = pix->rect(fruit->position(), FruitScorePix, fruit->pix()); else fruitRect = pix->rect(fruit->position(), FruitPix, fruit->pix()); if (lastPix == fruit->pix() && lastRect == fruitRect) fruitRect.setRect(0, 0, 0, 0); else fruitRect = pix->rect(fruitRect, lastRect); } else fruitRect.setRect(0, 0, 0, 0); } else fruitRect.setRect(0, 0, 0, 0); int lastBodyPix; int lastEyesPix; for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m) { lastRect = pix->rect(m->position(), MonsterPix); lastBodyPix = m->body(); lastEyesPix = m->eyes(); if (m->move()) { moved = TRUE; *monsterRect->at(m->id()) = pix->rect(m->position(), MonsterPix); if (lastBodyPix == m->body() && lastEyesPix == m->eyes() && lastRect == pix->rect(m->position(), MonsterPix)) monsterRect->at(m->id())->setRect(0, 0, 0, 0); else *monsterRect->at(m->id()) = pix->rect(*monsterRect->at(m->id()), lastRect); if (m->position() == pos && !gameState.testBit(Dying)) { if (m->state() == harmless && !gameState.testBit(Dying)) { m->setREM(remTicks[level]); eated++; if (gameState.testBit(Introducing)) { m->setPosition(OUT); m->setDirection(X); } } if (m->state() == dangerous && !gameState.testBit(Dying)) killed(); } } else monsterRect->at(m->id())->setRect(0, 0, 0, 0); } for (int m = 0; m < board->monsters(); m++) if (pacmanRect.intersects(*monsterRect->at(m))) { pacmanRect = pix->rect(pacmanRect, *monsterRect->at(m)); monsterRect->at(m)->setRect(0, 0, 0, 0); } else for (int im = m+1; im < board->monsters(); im++) if (monsterRect->at(m)->intersects(*monsterRect->at(im))) { *monsterRect->at(m) = pix->rect(*monsterRect->at(m), *monsterRect->at(im)); monsterRect->at(im)->setRect(0, 0, 0, 0); } if (!pacmanRect.isNull()) repaint(pacmanRect, FALSE); if (!fruitRect.isNull()) repaint(fruitRect, FALSE); for (int m = 0; m < board->monsters(); m++) if (!monsterRect->at(m)->isNull()) repaint(*monsterRect->at(m), FALSE); if (board->points() == 0 && !gameState.testBit(Dying)) levelUp(); if (eated > 0 && !gameState.testBit(Dying)) { timerCount = eated; eaten(); } if (gameState.testBit(Introducing) && moved) introPlay(); } void Referee::repaintFigures() { @@ -651,776 +651,776 @@ void Referee::confScheme() confLevels(); if (mode != -1) { newgroup.sprintf("Mode %d", mode); cfg->setGroup(newgroup); confLevels(FALSE); } if (scheme != -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); confLevels(FALSE); } RESTORE_CONFIG_GROUP( cfg, oldgroup ); confMisc(); confTiming(); confScoring(); if (mode != -1) { newgroup.sprintf("Mode %d", mode); cfg->setGroup(newgroup); confMisc(FALSE); confTiming(FALSE); confScoring(FALSE); } if (scheme != -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); confMisc(FALSE); confTiming(FALSE); confScoring(FALSE); } fillMapName(); RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); } void Referee::setScheme(int Scheme, int Mode, Bitfont *font) { mode = Mode; scheme = Scheme; confScheme(); pix->setScheme(scheme, mode, font); pacman->setMaxPixmaps(pix->maxPixmaps(PacmanPix)); fruit->setMaxPixmaps(pix->maxPixmaps(FruitPix)); for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m) m->setMaxPixmaps(pix->maxPixmaps(MonsterPix), pix->maxPixmaps(EyesPix)); for (Energizer *e = energizers->first(); e != 0; e = energizers->next()) if (e) e->setMaxPixmaps(pix->maxPixmaps(EnergizerPix)); if (gameState.testBit(Introducing)) for (int i = 0; i < (gameState.testBit(Init) ? timerCount : 15); i++) introPaint(i); setFixedSize(pix->levelPix().size()); repaint(); } void Referee::keyPressEvent( QKeyEvent *k ) { uint key = k->key(); #ifdef QWS // "OK" => new game if ( key == Key_F33 || key == Key_F2 || key == Key_Enter ) play(); else if ( !gameState.testBit(Playing) && key == Key_Space ) play(); // "Space" => pause //else if ( key == Key_Space || key == Key_F3 ) // pause(); // "Menu" => hall of fame //else if ( key == Key_F11 || key == Key_F4 ) // toggleHallOfFame(); #endif if (gameState.testBit(Paused) || gameState.testBit(HallOfFame) || gameState.testBit(Demonstration) || gameState.testBit(Dying) || gameState.testBit(Ready) || gameState.testBit(LevelDone) || !gameState.testBit(Playing)) return; if (key == UpKey) pacman->setDirection(N); else if (key == DownKey) pacman->setDirection(S); else if (key == RightKey) pacman->setDirection(E); else if (key == LeftKey) pacman->setDirection(W); #ifdef CHEATS else if (key == Key_L) { printf("levelUp()\n"); levelUp(); } else if (key == Key_F) { printf("fruit->move(TRUE)\n"); fruit->move(TRUE); repaint(FALSE); } else if (key == Key_E) { printf("setLifes(++lifes)\n"); emit setLifes(++lifes); } #endif else { k->ignore(); return; } k->accept(); } void Referee::score(int p) { if (!gameState.testBit(Playing)) return; if ((points += p) < 0) points = 0; emit setPoints(points); if (points >= nextExtraLifeScore) { emit setLifes(++lifes); if (extraLifeScoreIndex < (int) extraLifeScore.size()-1) extraLifeScoreIndex++; if (extraLifeScore[extraLifeScoreIndex] < 0) nextExtraLifeScore = extraLifeScore[extraLifeScoreIndex] * -1; else nextExtraLifeScore += extraLifeScore[extraLifeScoreIndex]; } } void Referee::eaten() { if (gameState.testBit(Ready)) return; stop(); if (monstersEaten < 4) monstersEaten++; gameState.setBit(Scoring); score(monsterScore[monstersEaten-1]); repaint(pix->rect(pix->rect(pacman->position(), MonsterPix), pix->rect(pacman->position(), MonsterScorePix, monstersEaten-1))); if (--timerCount > 0) QTimer::singleShot( monsterScoreDurMS, this, SLOT(eaten())); else { for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->direction() == X && !gameState.testBit(Introducing)) m->setDirection(N); if (monstersEaten != 4 || !gameState.testBit(Introducing)) QTimer::singleShot( monsterScoreDurMS, this, SLOT(start())); } } void Referee::toggleHallOfFame() { gameState.toggleBit(HallOfFame); } void Referee::hallOfFame() { if (gameState.testBit(HallOfFame)) // If the HallOfFame is switched on manually, toggle the toggleHallOfFame(); // bit twice. emit setLevel(0); // Clear status display for hall of fame emit setScore(level, 0); emit forcedHallOfFame(TRUE); } void Referee::pause() { static int pausedTimer = 0; if (!gameState.testBit(Paused)) { pausedTimer = gameTimer; stop(); stopEnergizer(); gameState.setBit(Paused); - repaint(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, i18n("PAUSED")), FALSE); + repaint(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, tr("PAUSED")), FALSE); } else { gameState.clearBit(Paused); - repaint(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, i18n("PAUSED")), FALSE); + repaint(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, tr("PAUSED")), FALSE); if (pausedTimer) { pausedTimer = 0; start(); } } emit togglePaused(); } void Referee::intro() { stop(); stopEnergizer(); bool paused = gameState.testBit(Paused); gameState.fill(FALSE); gameState.setBit(Introducing); gameState.setBit(Init); if (paused) gameState.setBit(Paused); level = 0; emit setLevel(level); board->init(Intro); pix->setLevel(level); initPacman(); initFruit(); initMonsters(); initEnergizers(); repaint(); monstersEaten = 0; timerCount = 0; introPlay(); } void Referee::introMonster(int id) { Monster *m = new Monster(board, id); m->setPosition((10+id*6)*BoardWidth+10); m->setDirection(E); m->setDangerous(dangerousTicks[level], monsterIQ[level]); m->setMaxPixmaps(pix->maxPixmaps(MonsterPix), pix->maxPixmaps(EyesPix)); if (m->body() != -1) pix->draw(m->position(), RoomPix, MonsterPix, m->body()); if (m->eyes() != -1) pix->draw(m->position(), RoomPix, EyesPix, m->eyes()); repaint(pix->rect(m->position(), MonsterPix), FALSE); m->setPosition(OUT); } void Referee::introPaint(int t) { QString pts; switch (t) { - case 0 : repaint(pix->draw(16, 6, RoomPix, i18n("CHARACTER"), WHITE, QColor(), AlignLeft), FALSE); - repaint(pix->draw(36, 6, RoomPix, i18n("/"), WHITE, QColor(), AlignLeft), FALSE); - repaint(pix->draw(40, 6, RoomPix, i18n("NICKNAME"), WHITE, QColor(), AlignLeft), FALSE); + case 0 : repaint(pix->draw(16, 6, RoomPix, tr("CHARACTER"), WHITE, QColor(), AlignLeft), FALSE); + repaint(pix->draw(36, 6, RoomPix, tr("/"), WHITE, QColor(), AlignLeft), FALSE); + repaint(pix->draw(40, 6, RoomPix, tr("NICKNAME"), WHITE, QColor(), AlignLeft), FALSE); break; case 1 : introMonster(0); break; - case 2 : repaint(pix->draw(16, 10, RoomPix, i18n("-SHADOW"), RED, QColor(), AlignLeft), FALSE); + case 2 : repaint(pix->draw(16, 10, RoomPix, tr("-SHADOW"), RED, QColor(), AlignLeft), FALSE); break; - case 3 : repaint(pix->draw(38, 10, RoomPix, i18n("\"BLINKY\""), RED, QColor(), AlignLeft), FALSE); + case 3 : repaint(pix->draw(38, 10, RoomPix, tr("\"BLINKY\""), RED, QColor(), AlignLeft), FALSE); break; case 4 : introMonster(1); break; - case 5 : repaint(pix->draw(16, 16, RoomPix, i18n("-SPEEDY"), PINK, QColor(), AlignLeft), FALSE); + case 5 : repaint(pix->draw(16, 16, RoomPix, tr("-SPEEDY"), PINK, QColor(), AlignLeft), FALSE); break; - case 6 : repaint(pix->draw(38, 16, RoomPix, i18n("\"PINKY\""), PINK, QColor(), AlignLeft), FALSE); + case 6 : repaint(pix->draw(38, 16, RoomPix, tr("\"PINKY\""), PINK, QColor(), AlignLeft), FALSE); break; case 7 : introMonster(2); break; - case 8 : repaint(pix->draw(16, 22, RoomPix, i18n("-BASHFUL"), CYAN, QColor(), AlignLeft), FALSE); + case 8 : repaint(pix->draw(16, 22, RoomPix, tr("-BASHFUL"), CYAN, QColor(), AlignLeft), FALSE); break; - case 9 : repaint(pix->draw(38, 22, RoomPix, i18n("\"INKY\""), CYAN, QColor(), AlignLeft), FALSE); + case 9 : repaint(pix->draw(38, 22, RoomPix, tr("\"INKY\""), CYAN, QColor(), AlignLeft), FALSE); break; case 10 : introMonster(3); break; - case 11 : repaint(pix->draw(16, 28, RoomPix, i18n("-POKEY"), ORANGE, QColor(), AlignLeft), FALSE); + case 11 : repaint(pix->draw(16, 28, RoomPix, tr("-POKEY"), ORANGE, QColor(), AlignLeft), FALSE); break; - case 12 : repaint(pix->draw(38, 28, RoomPix, i18n("\"CLYDE\""), ORANGE, QColor(), AlignLeft), FALSE); + case 12 : repaint(pix->draw(38, 28, RoomPix, tr("\"CLYDE\""), ORANGE, QColor(), AlignLeft), FALSE); break; case 13 : pts.sprintf("%d", pointScore); repaint(pix->draw(28, 44, RoomPix, pts.data(), WHITE, QColor(), AlignRight), FALSE); repaint(pix->draw(31, 44, RoomPix, "\x1C\x1D\x1E", WHITE, QColor(), AlignLeft), FALSE); pts.sprintf("%d", energizerScore); repaint(pix->draw(28, 48, RoomPix, pts.data(), WHITE, QColor(), AlignRight), FALSE); repaint(pix->draw(31, 48, RoomPix, "\x1C\x1D\x1E", WHITE, QColor(), AlignLeft), FALSE); break; case 14 : // "@ 1980 MIDWAY MFG.CO." #if defined( KDE2_PORT ) repaint(pix->draw(30, 58, RoomPix, "© 1998-2002 J.THÖNNISSEN", PINK), FALSE); #elif defined( QPE_PORT ) repaint(pix->draw(30, 55, RoomPix, "© 1998-2002 J.THÖNNISSEN", PINK), FALSE); repaint(pix->draw(29, 60, RoomPix, "Qtopia port: Catalin CLIMOV", GREEN), FALSE); #endif break; } } void Referee::introPlay() { if (!gameState.testBit(Introducing) || gameState.testBit(Ready)) return; if (gameState.testBit(Paused) || gameState.testBit(HallOfFame)) { QTimer::singleShot(afterPauseMS, this, SLOT(introPlay())); return; } if (!gameState.testBit(Init)) { if (monstersEaten == 4) { stop(); QTimer::singleShot(introPostAnimationMS, this, SLOT(demo())); } if (pacman->direction() == W) { int id = -1; if (pacman->position() == 37*BoardWidth-6) id = 0; else if (board->isMonster(37*BoardWidth-6)) for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->position() == 37*BoardWidth-6) { id = m->id(); id++; break; } if (id >= 0 && id <= 4) for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->id() == id && m->position() == OUT) { m->setPosition(37*BoardWidth-1); m->setDirection(W); m->setDangerous(dangerousTicks[level], monsterIQ[level]); board->set(37*BoardWidth-1, monsterhome, id); repaint(pix->rect(m->position(), MonsterPix)); break; } } return; } if (timerCount < 15) introPaint(timerCount); switch (timerCount) { case 13 : board->set(44*BoardWidth+22, Point); pix->drawPoint(44*BoardWidth+22); repaint(pix->rect(44*BoardWidth+22, PointPix), FALSE); energizers->at(0)->setPosition(48*BoardWidth+22); energizers->at(0)->setOn(); repaint(pix->rect(48*BoardWidth+22, EnergizerPix), FALSE); break; case 14 : energizers->at(1)->setPosition(36*BoardWidth+10); energizers->at(1)->setOn(); repaint(pix->rect(36*BoardWidth+10, EnergizerPix), FALSE); for (int pos = 8; pos < BoardWidth; pos++) { board->set(34*BoardWidth+pos, out); board->set(38*BoardWidth+pos, out); } board->set(36*BoardWidth+8, out); break; case 15 : gameState.clearBit(Init); initPacman(); pacman->setDemo(TRUE); pacman->setPosition(37*BoardWidth-1); repaintFigures(); start(); return; } if (timerCount++ < 15) QTimer::singleShot(introAnimationMS, this, SLOT(introPlay())); } void Referee::demo() { if (gameState.testBit(Ready)) return; if (gameState.testBit(Paused) || gameState.testBit(HallOfFame)) { QTimer::singleShot(afterPauseMS, this, SLOT(demo())); return; } stop(); stopEnergizer(); gameState.fill(FALSE); gameState.setBit(Init); gameState.setBit(Demonstration); level = 0; emit setLevel(level); board->init(Demo, mapName.at(0)); pix->setLevel(level); initPacman(); initFruit(); initMonsters(); initEnergizers(); gameState.clearBit(Init); repaint(); timerCount = 0; QTimer::singleShot(playerDurMS, this, SLOT(start())); } void Referee::play() { stop(); stopEnergizer(); gameState.fill(FALSE); gameState.setBit(Init); gameState.setBit(Playing); gameState.setBit(Player); gameState.setBit(Ready); lifes = 3; level = 1; points = 0; extraLifeScoreIndex = 0; nextExtraLifeScore = extraLifeScore[extraLifeScoreIndex]; if (nextExtraLifeScore < 0) nextExtraLifeScore *= -1; board->init(Level, mapName.at(level)); pix->setLevel(level); initPacman(); initFruit(); initMonsters(); initEnergizers(); repaint(); emit toggleNew(); emit setLifes(lifes); emit setLevel(level); emit setPoints(points); - repaint(pix->rect(board->position(monsterhome, 0), i18n("PLAYER ONE")), FALSE); - repaint(pix->rect(board->position(fruithome), i18n("READY!")), FALSE); + repaint(pix->rect(board->position(monsterhome, 0), tr("PLAYER ONE")), FALSE); + repaint(pix->rect(board->position(fruithome), tr("READY!")), FALSE); timerCount = 0; QTimer::singleShot(playerDurMS, this, SLOT(ready())); } void Referee::ready() { if (gameState.testBit(Paused) || gameState.testBit(HallOfFame)) { QTimer::singleShot(afterPauseMS, this, SLOT(ready())); return; } if (gameState.testBit(Player)) { emit setLifes(--lifes); gameState.clearBit(Player); gameState.clearBit(Init); - repaint(pix->rect(board->position(monsterhome, 0), i18n("PLAYER ONE")), FALSE); + repaint(pix->rect(board->position(monsterhome, 0), tr("PLAYER ONE")), FALSE); repaintFigures(); QTimer::singleShot(playerDurMS, this, SLOT(ready())); return; } if (gameState.testBit(Ready)) { gameState.clearBit(Ready); - repaint(pix->rect(board->position(fruithome), i18n("READY!")), FALSE); + repaint(pix->rect(board->position(fruithome), tr("READY!")), FALSE); start(); } else { gameState.setBit(Ready); gameState.clearBit(Init); - repaint(pix->rect(board->position(fruithome), i18n("READY!")), FALSE); + repaint(pix->rect(board->position(fruithome), tr("READY!")), FALSE); QTimer::singleShot(readyDurMS, this, SLOT(ready())); } } void Referee::levelUp() { stop(); stopEnergizer(); gameState.setBit(LevelDone); pacman->setPosition(pacman->position()); // set mouthPosition to "0" repaint(pix->rect(pacman->position(), PacmanPix)); timerCount = 0; QTimer::singleShot(levelUpPreAnimationMS, this, SLOT(levelUpPlay())); } void Referee::levelUpPlay() { if (gameState.testBit(Ready)) return; if (gameState.testBit(Paused) || gameState.testBit(HallOfFame)) { QTimer::singleShot(afterPauseMS, this, SLOT(levelUpPlay())); return; } switch (timerCount) { case 0 : gameState.setBit(Init); setOnEnergizers(); repaintFigures(); break; case 1 : gameState.clearBit(LevelDone); repaint(pix->rect(pacman->position(), PacmanPix)); break; } if (timerCount++ < 2) { QTimer::singleShot(levelUpAnimationMS, this, SLOT(levelUpPlay())); return; } gameState.clearBit(Init); if (gameState.testBit(Demonstration)) { hallOfFame(); return; } if (level < maxLevel) level++; board->init(Level, mapName.at(level)); pix->setLevel(level); initPacman(); initFruit(); initMonsters(); initEnergizers(); repaint(); emit setLevel(level); ready(); } void Referee::start() { if (gameState.testBit(Ready)) return; if (gameState.testBit(Paused) || gameState.testBit(HallOfFame)) { QTimer::singleShot(afterPauseMS, this, SLOT(start())); return; } if (gameState.testBit(Scoring)) { gameState.clearBit(Scoring); repaint(pix->rect(pix->rect(pacman->position(), MonsterPix), pix->rect(pacman->position(), MonsterScorePix, monstersEaten-1))); } if (!gameTimer) gameTimer = startTimer( speed [level] ); if (!energizerTimer) energizerTimer = startTimer( energizerAnimationMS ); } void Referee::start(int t) { gameTimer = startTimer(t); } void Referee::stop() { if (gameTimer) { killTimer (gameTimer); gameTimer = 0; } } void Referee::stopEnergizer() { if (energizerTimer) { killTimer (energizerTimer); energizerTimer = 0; } } void Referee::killed() { if (gameState.testBit(Ready)) return; if (!gameState.testBit(Dying)) { gameState.setBit(Dying); pacman->setDirection(X, TRUE); for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m) m->setDirection(X); QTimer::singleShot(dyingPreAnimationMS, this, SLOT(killed())); } else { stop(); if (gameState.testBit(Paused) || gameState.testBit(HallOfFame)) { QTimer::singleShot(afterPauseMS, this, SLOT(killed())); return; } gameState.setBit(Init); repaintFigures(); timerCount = 0; killedPlay(); } } void Referee::killedPlay() { if (!gameState.testBit(Dying) || gameState.testBit(Ready)) return; if (gameState.testBit(Paused) || gameState.testBit(HallOfFame)) { QTimer::singleShot(afterPauseMS, this, SLOT(killedPlay())); return; } if (timerCount <= pix->maxPixmaps(DyingPix)) { repaint(pix->rect(pacman->position(), PacmanPix), FALSE); if (timerCount >= pix->maxPixmaps(DyingPix)-1 || timerCount == 0) QTimer::singleShot(dyingPostAnimationMS, this, SLOT(killedPlay())); else QTimer::singleShot(dyingAnimationMS, this, SLOT(killedPlay())); timerCount++; } else { gameState.clearBit(Dying); stopEnergizer(); if (lifes == 0) { gameState.setBit(GameOver); gameState.clearBit(Playing); for (int e = 0; e < board->energizers(); e++) { energizers->at(e)->setOff(); repaint(pix->rect(board->position(energizer, e), EnergizerPix), FALSE); } - repaint(pix->rect(board->position(fruithome), i18n("GAME OVER")), FALSE); + repaint(pix->rect(board->position(fruithome), tr("GAME OVER")), FALSE); QTimer::singleShot(gameOverDurMS, this, SLOT(hallOfFame())); } else { gameState.clearBit(Init); initPacman(); initFruit(); initMonsters(); initEnergizers(); emit setLifes(--lifes); repaintFigures(); ready(); } } } void Referee::initPacman() { pacman->setMaxPixmaps(pix->maxPixmaps(PacmanPix)); pacman->setDemo(gameState.testBit(Demonstration)); pacman->setPosition(board->position(pacmanhome)); pacman->setDirection(W, TRUE); pacman->setAlive(pacmanTicks[level]); } void Referee::initFruit(bool fullInitialization) { if (fullInitialization) { fruit->setMaxPixmaps(pix->maxPixmaps(FruitPix)); if (fruitIndex[level] == 0) fruit->setLevel(level, fruitAppearsTicks[level], fruitDurTicks[level], fruitTicks[level]); else if (fruitIndex[level] < 0) fruit->setLevel(pix->maxPixmaps(FruitPix)+1, fruitAppearsTicks[level], fruitDurTicks[level], fruitTicks[level]); else fruit->setLevel(fruitIndex[level], fruitAppearsTicks[level], fruitDurTicks[level], fruitTicks[level]); } if (board->tunnels() > 0) fruit->setMovement(board->position(tunnel, rand() % board->tunnels()), board->position(tunnel, rand() % board->tunnels()), fruitIQ[level]); } void Referee::initMonsters() { if( !monsters->isEmpty()) monsters->clear(); if( !monsterRect->isEmpty()) monsterRect->clear(); for (int id = 0; id < (gameState.testBit(Introducing) ? 4 : board->monsters()); id++) { Monster *m = new Monster(board, id); monsters->append(m); QRect *r = new QRect(); monsterRect->append(r); if (!gameState.testBit(Introducing)) { m->setFreedom(board->position(prisonexit)); m->setDangerous(dangerousTicks[level], monsterIQ[level]); if (id == 0) m->setPrison(board->position(prisonentry)); else { m->setPrison(board->position(monsterhome, id)); m->setArrested(arrestTicks[level], arrestDurTicks[level]*id); } m->setPosition(board->position(monsterhome, id)); switch(id) { case 0 : m->setDirection(W); break; case 1 : m->setDirection(N); break; default : m->setDirection(S); } } m->setMaxPixmaps(pix->maxPixmaps(MonsterPix), pix->maxPixmaps(EyesPix)); } } void Referee::initEnergizers() { if( !energizers->isEmpty()) energizers->clear(); if( !energizerRect->isEmpty()) energizerRect->clear(); for (int id = 0; id < (gameState.testBit(Introducing) ? 2 : board->energizers()); id++) { Energizer *e = new Energizer(board); energizers->append(e); QRect *r = new QRect(); energizerRect->append(r); if (!gameState.testBit(Introducing)) { e->setPosition(board->position(energizer, id)); e->setOn(); } e->setMaxPixmaps(pix->maxPixmaps(EnergizerPix)); } } void Referee::setOnEnergizers() { for (int e = 0; e < board->energizers(); e++) { energizers->at(e)->setOn(); } } void Referee::setFocusOutPause(bool FocusOutPause) { focusOutPause = FocusOutPause; } void Referee::setFocusInContinue(bool FocusInContinue) { focusInContinue = FocusInContinue; } void Referee::focusInEvent(QFocusEvent *) { if (focusInContinue && focusedPause && gameState.testBit(Paused) && gameState.testBit(Playing)) { pause(); } } void Referee::focusOutEvent(QFocusEvent *) { if (focusOutPause && !gameState.testBit(Paused) && gameState.testBit(Playing)) { focusedPause = TRUE; pause(); } } diff --git a/noncore/games/kpacman/score.cpp b/noncore/games/kpacman/score.cpp index 6e660e8..17dbf0a 100644 --- a/noncore/games/kpacman/score.cpp +++ b/noncore/games/kpacman/score.cpp @@ -1,642 +1,642 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <score.h> #include <score.moc> #include <kaccel.h> #include <kapp.h> #include <kconfig.h> #include <kstddirs.h> #include <kmessagebox.h> #elif defined( QPE_PORT ) #include <qaccel.h> #include "config.h" #include "score.h" #endif #include <stdlib.h> #include <ctype.h> #include <qpixmap.h> #include <qstring.h> #include <qdstream.h> #include <qkeycode.h> #include <qtimer.h> #include <qfileinfo.h> #include "bitfont.h" Score::Score(QWidget *parent, const char *name, int Scheme, int Mode, Bitfont *font) : QWidget(parent, name) { setFocusPolicy(QWidget::StrongFocus); paused = FALSE; lastScore = -1; lastPlayer = -1; cursorBlinkTimer = 0; cursorBlinkMS = -1; cursor.x = -1; cursor.y = -1; cursor.on = FALSE; cursor.chr = QChar('?'); initKeys(); scheme = Scheme; mode = Mode; confScheme(); bitfont = font; highscoreFile.setName(locateHighscoreFilePath().filePath()); read(); for (int p = 0; p < maxPlayer; p++) { playerScore[p] = 0; playerName[p] = getenv("LOGNAME"); if (playerName[p].length() < minPlayerNameLength) playerName[p].setExpand(minPlayerNameLength-1, ' '); for (uint i = 0; i < playerName[p].length(); i++) if (playerName[p].at(i) < bitfont->firstChar() || playerName[p].at(i) > bitfont->lastChar()) playerName[p].at(i) = playerName[p].at(i).upper(); } } Score::~Score() { // write(); } void Score::paintEvent( QPaintEvent *e) { - if (rect(1, 0, i18n(" 1UP ")).intersects(e->rect())) { + if (rect(1, 0, tr(" 1UP ")).intersects(e->rect())) { QPixmap pix; QColor fg = BLACK; if (cursor.on || paused || lastPlayer != 0) fg = WHITE; - pix = bitfont->text(i18n(" 1UP "), fg, BLACK); + pix = bitfont->text(tr(" 1UP "), fg, BLACK); bitBlt(this, x(1), y(0), &pix); } - if (rect(8, 0, i18n(" HIGH SCORE ")).intersects(e->rect())) { - QPixmap pix = bitfont->text(i18n(" HIGH SCORE "), WHITE, BLACK); + if (rect(8, 0, tr(" HIGH SCORE ")).intersects(e->rect())) { + QPixmap pix = bitfont->text(tr(" HIGH SCORE "), WHITE, BLACK); bitBlt(this, x(8), y(0), &pix); } - if (maxPlayer > 1 && rect(21, 0, i18n(" 2UP ")).intersects(e->rect())) { + if (maxPlayer > 1 && rect(21, 0, tr(" 2UP ")).intersects(e->rect())) { QPixmap pix; QColor fg = BLACK; if (cursor.on || paused || lastPlayer != 1) fg = WHITE; - pix = bitfont->text(i18n(" 2UP "), fg, BLACK); + pix = bitfont->text(tr(" 2UP "), fg, BLACK); bitBlt(this, x(21), y(0), &pix); } QString s; s.sprintf("%6d0", playerScore[0]/10); if (rect(0, 1, s).intersects(e->rect())) { QPixmap pix = bitfont->text(s, WHITE, BLACK); bitBlt(this, x(0), y(1), &pix); } s.sprintf("%8d0", HighScore/10); if (rect(8, 1, s).intersects(e->rect())) { QPixmap pix = bitfont->text(s, WHITE, BLACK); bitBlt(this, x(8), y(1), &pix); } if (lastScore >= 0) { - if (rect(1, 4*1.25, i18n(" CONGRATULATIONS ")).intersects(e->rect())) { - QPixmap pix = bitfont->text(i18n(" CONGRATULATIONS "), YELLOW, BLACK); + if (rect(1, 4*1.25, tr(" CONGRATULATIONS ")).intersects(e->rect())) { + QPixmap pix = bitfont->text(tr(" CONGRATULATIONS "), YELLOW, BLACK); bitBlt(this, x(1), y(4*1.25), &pix); } - if (rect(1, 6*1.25, i18n(" YOU HAVE ARCHIEVED ")).intersects(e->rect())) { - QPixmap pix = bitfont->text(i18n(" YOU HAVE ARCHIEVED "), CYAN, BLACK); + if (rect(1, 6*1.25, tr(" YOU HAVE ARCHIEVED ")).intersects(e->rect())) { + QPixmap pix = bitfont->text(tr(" YOU HAVE ARCHIEVED "), CYAN, BLACK); bitBlt(this, x(1), y(6*1.25), &pix); } - if (rect(1, 7*1.25, i18n(" A SCORE IN THE TOP 10. ")).intersects(e->rect())) { - QPixmap pix = bitfont->text(i18n(" A SCORE IN THE TOP 10. "), CYAN, BLACK); + if (rect(1, 7*1.25, tr(" A SCORE IN THE TOP 10. ")).intersects(e->rect())) { + QPixmap pix = bitfont->text(tr(" A SCORE IN THE TOP 10. "), CYAN, BLACK); bitBlt(this, x(1), y(7*1.25), &pix); } - if (rect(1, 8*1.25, i18n(" ")).intersects(e->rect())) { - QPixmap pix = bitfont->text(i18n(" "), CYAN, BLACK); + if (rect(1, 8*1.25, tr(" ")).intersects(e->rect())) { + QPixmap pix = bitfont->text(tr(" "), CYAN, BLACK); bitBlt(this, x(1), y(8*1.25), &pix); } } - if (rect(1, 9.5*1.25, i18n("RNK SCORE NAME DATE")).intersects(e->rect())) { - QPixmap pix = bitfont->text(i18n("RNK SCORE NAME DATE"), WHITE, BLACK); + if (rect(1, 9.5*1.25, tr("RNK SCORE NAME DATE")).intersects(e->rect())) { + QPixmap pix = bitfont->text(tr("RNK SCORE NAME DATE"), WHITE, BLACK); bitBlt(this, x(1), y(9.5*1.25), &pix); } for (int i = 0; i < 10; i++) { s.sprintf("%2d%9d %-3.3s %-8.8s", i+1, hallOfFame[i].points, hallOfFame[i].name.utf8().data(), formatDate(hallOfFame[i].moment.date()).data()); if (rect(1, (11+i)*1.25, s).intersects(e->rect())) { QPixmap pix = bitfont->text(s, (i == lastScore) ? YELLOW : WHITE, BLACK); bitBlt(this, x(1), y((11+i)*1.25), &pix); } } if (cursor.x != -1 && cursor.y != -1 && cursor.on) { if (rect(cursor.x, (cursor.y*1.25), cursor.chr).intersects(e->rect())) { QPixmap pix = bitfont->text(cursor.chr, BLACK, YELLOW); bitBlt(this, x(cursor.x), y(cursor.y*1.25), &pix); } } if (paused) { - QPixmap pix = bitfont->text(i18n("PAUSED"), RED, BLACK); - QRect r = bitfont->rect(i18n("PAUSED")); + QPixmap pix = bitfont->text(tr("PAUSED"), RED, BLACK); + QRect r = bitfont->rect(tr("PAUSED")); r.moveCenter(QPoint(this->width()/2, this->height()/2)); bitBlt(this, r.x(), r.y(), &pix); } } void Score::timerEvent(QTimerEvent*) { cursor.on = !cursor.on; if (paused) return; if (cursor.x != -1 && cursor.y != -1) repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE); scrollRepeat = FALSE; if (lastPlayer == 0) - repaint(rect(1, 0, i18n(" 1UP ")), FALSE); + repaint(rect(1, 0, tr(" 1UP ")), FALSE); if (lastPlayer == 1) - repaint(rect(21, 0, i18n(" 2UP ")), FALSE); + repaint(rect(21, 0, tr(" 2UP ")), FALSE); } void Score::keyPressEvent(QKeyEvent *k) { if (lastScore < 0 || lastPlayer < 0 || lastPlayer >= maxPlayer || paused) { k->ignore(); return; } int x = cursor.x; int y = cursor.y; uint key = k->key(); if (scrollRepeat && (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)) { k->ignore(); return; } if (key != Key_Return) { if (key == RightKey || key == Key_Right) if (++cursor.x > 16) cursor.x = 14; if (key == LeftKey || key == Key_Left) if (--cursor.x < 14) cursor.x = 16; if (key == UpKey || key == Key_Up) if (cursor.chr.unicode() < bitfont->lastChar()) cursor.chr = cursor.chr.unicode()+1; else cursor.chr = bitfont->firstChar(); if (key == DownKey || key == Key_Down) if (cursor.chr.unicode() > bitfont->firstChar()) cursor.chr = cursor.chr.unicode()-1; else cursor.chr = bitfont->lastChar(); if (cursor.x == x && cursor.y == y && cursor.chr == hallOfFame[lastScore].name.at(cursor.x-14)) { uint ascii = k->ascii(); if (ascii < bitfont->firstChar() || ascii > bitfont->lastChar()) ascii = toupper(ascii); if (ascii >= bitfont->firstChar() && ascii <= bitfont->lastChar()) { cursor.chr = ascii; hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr; if (++cursor.x > 16) cursor.x = 14; } } } if (key == Key_Return) { playerName[lastPlayer] = hallOfFame[lastScore].name; write(); read(); lastScore = -1; cursor.x = -1; cursor.y = -1; // killTimers(); emit toggleNew(); end(); } if (x != cursor.x || y != cursor.y) { if (cursor.x != -1) cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14); scrollRepeat = FALSE; repaint(rect(x, y*1.25, cursor.chr), FALSE); } else hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr; if (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down) scrollRepeat = TRUE; else repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE); } void Score::initKeys() { APP_CONFIG_BEGIN( cfg ); QString up("Up"); up = cfg->readEntry("upKey", (const char*) up); UpKey = KAccel::stringToKey(up); QString down("Down"); down = cfg->readEntry("downKey", (const char*) down); DownKey = KAccel::stringToKey(down); QString left("Left"); left = cfg->readEntry("leftKey", (const char*) left); LeftKey = KAccel::stringToKey(left); QString right("Right"); right = cfg->readEntry("rightKey", (const char*) right); RightKey = KAccel::stringToKey(right); APP_CONFIG_END( cfg ); } void Score::confTiming(bool defGroup) { APP_CONFIG_BEGIN( cfg ); if (defGroup || cfg->hasKey("CursorBlinkMS")) cursorBlinkMS = cfg->readNumEntry("CursorBlinkMS", 250); if (defGroup || cfg->hasKey("HallOfFameMS")) hallOfFameMS = cfg->readNumEntry("HallOfFameMS", 7000); if (defGroup || cfg->hasKey("AfterPauseMS")) afterPauseMS = cfg->readNumEntry("AfterPauseMS", 1000); APP_CONFIG_END( cfg ); } void Score::confScheme() { APP_CONFIG_BEGIN( cfg ); SAVE_CONFIG_GROUP( cfg, oldgroup ); QString newgroup; // if not set, read mode and scheme from the configfile if (mode == -1 && scheme == -1) { scheme = cfg->readNumEntry("Scheme", -1); mode = cfg->readNumEntry("Mode", -1); // if mode is not set in the defGroup-group, lookup the scheme group if (scheme != -1 || mode == -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); mode = cfg->readNumEntry("Mode", -1); RESTORE_CONFIG_GROUP( cfg, oldgroup ); } } int oldCursorBlinkMS = cursorBlinkMS; confTiming(); if (mode != -1) { newgroup.sprintf("Mode %d", mode); cfg->setGroup(newgroup); confTiming(FALSE); } if (scheme != -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); confTiming(FALSE); } if (cursorBlinkMS != oldCursorBlinkMS) { if (cursorBlinkTimer) killTimer(cursorBlinkTimer); cursorBlinkTimer = startTimer(cursorBlinkMS); } RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); } void Score::setScheme(int Scheme, int Mode, Bitfont *font) { mode = Mode; scheme = Scheme; confScheme(); bitfont = font; for (int p = 0; p < maxPlayer; p++) for (uint i = 0; i < playerName[p].length(); i++) if (playerName[p].at(i) < bitfont->firstChar() || playerName[p].at(i) > bitfont->lastChar()) playerName[p].at(i) = playerName[p].at(i).upper(); for (int i = 0; i < 10; i++) for (uint j = 0; j < hallOfFame[i].name.length(); j++) if (hallOfFame[i].name.at(j) < bitfont->firstChar() || hallOfFame[i].name.at(j) > bitfont->lastChar()) hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper(); if (cursor.chr.unicode() < bitfont->firstChar() || cursor.chr.unicode() > bitfont->lastChar()) cursor.chr = cursor.chr.upper(); } void Score::set(int score) { set(score, 0); } void Score::set(int score, int player) { if (player < 0 || player >= maxPlayer) return; lastPlayer = player; playerScore[lastPlayer] = score; QString s; s.sprintf("%6d0", playerScore[lastPlayer]/10); repaint(rect(0, 1, s), FALSE); if (score > HighScore) { HighScore = score; s.sprintf("%8d0", HighScore/10); repaint(rect(8, 1, s), FALSE); } } /* * Set the score for player after the game if over. If the score is in the * high scores then the hall of fame is updated (shifted) and the scoreboard * is shown. */ void Score::setScore(int level, int player) { lastScore = -1; if (player < 0 || player >= maxPlayer || level == 0) { if (level != 0) emit toggleNew(); QTimer::singleShot(hallOfFameMS, this, SLOT(end())); return; } lastPlayer = player; for (int i = 0; i < 10; i++) if ( playerScore[lastPlayer] > hallOfFame[i].points) { lastScore = i; break; } if (lastScore < 0) { emit toggleNew(); QTimer::singleShot(hallOfFameMS, this, SLOT(end())); return; } for (int i = 9; i > lastScore && i > 0; i--) hallOfFame[i] = hallOfFame[i-1]; hallOfFame[lastScore].points = playerScore[lastPlayer]; hallOfFame[lastScore].levels = level; hallOfFame[lastScore].moment = QDateTime::currentDateTime(); hallOfFame[lastScore].name = playerName[lastPlayer]; cursor.x = 14; cursor.y = 11+lastScore; cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14); // startTimer(cursorBlinkMS); setFocus(); } /* * Read the highscores, if no file or a file shorter than 4 bytes (versions before 0.2.4 stores only * the points of one highscore) exists - the highscores were initialized with default values. */ void Score::read() { if (highscoreFile.exists() && highscoreFile.size() > 4) { if (highscoreFile.open(IO_ReadOnly)) { QDataStream s(&highscoreFile); char *name; for (int i = 0; i < 10; i++) { s >> hallOfFame[i].points >> hallOfFame[i].levels >> hallOfFame[i].duration >> hallOfFame[i].moment >> name; hallOfFame[i].name = QString::fromLatin1(name); delete(name); } highscoreFile.close(); } } else { for (int i = 0; i < 10; i++) { hallOfFame[i].points = 5000; hallOfFame[i].levels = 0; hallOfFame[i].duration = QTime(); hallOfFame[i].moment = QDateTime(); hallOfFame[i].name = "???"; } // write(); } for (int i = 0; i < 10; i++) for (uint j = 0; j < hallOfFame[i].name.length(); j++) if (hallOfFame[i].name.at(j) < bitfont->firstChar() || hallOfFame[i].name.at(j) > bitfont->lastChar()) hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper(); HighScore = hallOfFame[0].points; } void Score::write() { #ifndef QWS if (!highscoreFile.exists() && highscoreFile.name() == systemHighscoreFileInfo.filePath()) KMessageBox::information(0, - i18n("You're going to create the highscore-file\n" + tr("You're going to create the highscore-file\n" "'%1'\n" "for your maschine, that should be used systemwide.\n" "\n" "To grant access to the other users, set the appropriate rights (a+w)\n" "on that file or ask your systemadministator for that favor.\n" "\n" "To use a different directory or filename for the highscores," "specify them in the configfile (kpacmanrc:highscoreFilePath)." ).arg(systemHighscoreFileInfo.filePath())); if (highscoreFile.name() == privateHighscoreFileInfo.filePath()) KMessageBox::information(0, - i18n("You're using a private highscore-file, that's mostly because of\n" + tr("You're using a private highscore-file, that's mostly because of\n" "missing write-access to the systemwide file\n" "'%1' .\n" "\n" "Ask your systemadministrator for granting you access to that file,\n" "by setting the appropriate rights (a+w) on it.\n" "\n" "To use a different directory or filename for the highscores," "specify them in the configfile (kpacmanrc:highscoreFilePath)." ).arg(systemHighscoreFileInfo.filePath()), QString::null, "PrivateHighscore"); #endif if (highscoreFile.open(IO_WriteOnly)) { QDataStream s(&highscoreFile); for (int i = 0; i < 10; i++) s << hallOfFame[i].points << hallOfFame[i].levels << hallOfFame[i].duration << hallOfFame[i].moment << hallOfFame[i].name.latin1(); highscoreFile.close(); } } void Score::setPause(bool Paused) { paused = Paused; - QRect r = bitfont->rect(i18n("PAUSED")); + QRect r = bitfont->rect(tr("PAUSED")); r.moveCenter(QPoint(this->width()/2, this->height()/2)); repaint(r, TRUE); // repaint 1UP or 2UP repaint(FALSE); } void Score::end() { if (paused) { QTimer::singleShot(afterPauseMS, this, SLOT(end())); return; } // repaint 1UP or 2UP lastPlayer = -1; repaint(FALSE); emit forcedHallOfFame(FALSE); } /* * Return the date in a formatted QString. The format can be changed using internationalization * of the string "YY/MM/DD". Invalid QDate's where returned as "00/00/00". */ QString Score::formatDate(QDate date) { - QString s = i18n("@YY@/@MM@/@DD@"); + QString s = tr("@YY@/@MM@/@DD@"); QString dd; dd.sprintf("%02d", date.isValid() ? date.year() % 100 : 0); s.replace(QRegExp("@YY@"), dd); dd.sprintf("%02d", date.isValid() ? date.month() : 0); s.replace(QRegExp("@MM@"), dd); dd.sprintf("%02d", date.isValid() ? date.day() : 0); s.replace(QRegExp("@DD@"), dd); return s; } QRect Score::rect(int col, float row, QString str, int align) { QRect r = bitfont->rect(str); r.moveBy(x(col), y(row)); int dx = 0; int dy = 0; if (align & AlignLeft || align & AlignRight) { dx = (str.length()-1) * (bitfont->width()/2); if (align & AlignRight) dx *= -1; } if (align & AlignTop || align & AlignBottom) { dy = bitfont->height()/2; if (align & AlignBottom) dy *= -1; } if (dx != 0 || dy != 0) r.moveBy(dx, dy); return r; } int Score::x(int col) { return col*bitfont->width(); } int Score::y(float row) { return (int) (row*(bitfont->height()+bitfont->height()/4)); } /** * Ermittelt die zu benutzende "highscore"-Datei, in die auch geschrieben werden kann. * Über den "highscoreFilePath"-KConfig-Eintrag, kann abweichend von der Standardlokation * der Standort der "highscore"-Datei spezifiziert werden. * Wenn die systemweite "highscore"-Datei nicht beschrieben werden kann, wird mit einer * privaten Datei gearbeitet. */ QFileInfo Score::locateHighscoreFilePath() { #ifndef QWS QFileInfo systemHighscoreDirPath; QStringList systemHighscoreDirs; // Schreibfähige "private" highscore-Datei ermitteln für den fallback. privateHighscoreFileInfo.setFile(KGlobal::dirs()->saveLocation("appdata")+highscoreName); // FilePath aus der Konfigurationsdatei benutzen systemHighscoreFileInfo.setFile(cfg->readEntry("HighscoreFilePath")); // Kein Wert aus der Konfiguration erhalten, dann die "system"-Datei suchen. if (systemHighscoreFileInfo.filePath().isEmpty()) systemHighscoreDirs = KGlobal::dirs()->resourceDirs("appdata"); else systemHighscoreDirs = QStringList(systemHighscoreFileInfo.filePath()); for (QStringList::Iterator i = systemHighscoreDirs.begin(); i != systemHighscoreDirs.end(); ++i) { systemHighscoreFileInfo.setFile(*i); if (systemHighscoreFileInfo.fileName().isEmpty()) systemHighscoreFileInfo.setFile(systemHighscoreFileInfo.dirPath()+"/"+highscoreName); // privateHighscoreFileInfo für die "system" Suche ignorieren if (systemHighscoreFileInfo.filePath() != privateHighscoreFileInfo.filePath()) if (!systemHighscoreFileInfo.exists()) { systemHighscoreDirPath.setFile(systemHighscoreFileInfo.dirPath()); if (systemHighscoreDirPath.exists() && systemHighscoreDirPath.isWritable()) return systemHighscoreFileInfo; } else if (systemHighscoreFileInfo.isWritable()) return systemHighscoreFileInfo; } #endif return privateHighscoreFileInfo; } diff --git a/noncore/games/kpacman/status.cpp b/noncore/games/kpacman/status.cpp index 00d1f22..3453d37 100644 --- a/noncore/games/kpacman/status.cpp +++ b/noncore/games/kpacman/status.cpp @@ -1,247 +1,247 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <klocale.h> #include <kstddirs.h> #include <status.h> #include <status.moc> #elif defined( QPE_PORT ) #include <qpe/qpeapplication.h> #include "config.h" #include "status.h" #endif #include <qpixmap.h> #include <qbitmap.h> #include <qstring.h> #include <qmsgbox.h> #include <qfileinfo.h> Status::Status( QWidget *parent, const char *name, int Scheme, int Mode ) : QWidget( parent, name ) { actualLifes = 0; actualLevel = 0; lifesPix = NULL; levelPix = NULL; scheme = Scheme; mode = Mode; level = 0; confScheme(); } QList<QPixmap> *Status::loadPixmap(QWidget *parent, QString pixmapName, QList<QPixmap> *pixmaps) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); QPixmap PIXMAP(pixmapName); if (PIXMAP.isNull() || PIXMAP.mask() == NULL) { - QString msg = i18n("The pixmap could not be contructed.\n\n" + QString msg = tr("The pixmap could not be contructed.\n\n" "The file '@PIXMAPNAME@' does not exist,\n" "or is of an unknown format."); msg.replace(QRegExp("@PIXMAPNAME@"), pixmapName); - QMessageBox::information(parent, i18n("Initialization Error"), + QMessageBox::information(parent, tr("Initialization Error"), (const char *) msg); return 0; } int height = PIXMAP.height(); int width = (height == 0) ? 0 : PIXMAP.width()/(PIXMAP.width()/height); QBitmap BITMAP; QBitmap MASK; BITMAP = *PIXMAP.mask(); MASK.resize(width, height); for (int x = 0; x < PIXMAP.width()/width; x++) { QPixmap *pixmap = new QPixmap(width, height); pixmaps->append(pixmap); bitBlt(pixmap, 0, 0, &PIXMAP, x*width, 0, width, height, CopyROP, TRUE); bitBlt(&MASK, 0, 0, &BITMAP, x*width, 0, width, height, CopyROP, TRUE); pixmap->setMask(MASK); } return pixmaps; } void Status::paintEvent( QPaintEvent *) { for (int x = 0; x < actualLifes && !lifesPix->isEmpty(); x++) bitBlt(this, lifesPix->at(0)->width()+(lifesPix->at(0)->width()*x), (height()-lifesPix->at(0)->height())/2, lifesPix->at(0), 0, 0, lifesPix->at(0)->width(), lifesPix->at(0)->height()); for (int x = 0; x < actualLevel && !levelPix->isEmpty(); x++) { erase((width()-levelPix->at(x)->width()*2)-(levelPix->at(x)->width()*levelPos[x]), (height()-levelPix->at(x)->height())/2, levelPix->at(x)->width(), levelPix->at(x)->height()); bitBlt(this, (width()-levelPix->at(x)->width()*2)-(levelPix->at(x)->width()*levelPos[x]), (height()-levelPix->at(x)->height())/2, levelPix->at(x), 0, 0, levelPix->at(x)->width(), levelPix->at(x)->height()); } } void Status::initPixmaps() { if (lastLifesPixmapName != lifesPixmapName.at(level)) { lifesPix = loadPixmap(this, lifesPixmapName.at(level), lifesPix); lastLifesPixmapName = lifesPixmapName.at(level); } if (lastLevelPixmapName != levelPixmapName.at(level)) { levelPix = loadPixmap(this, levelPixmapName.at(level), levelPix); lastLevelPixmapName = levelPixmapName.at(level); } } QString Status::decodeHexOctString(QString s) { QString value; QString valids; int pos, xpos = 0, opos = 0; int v, len, leadin; const char *ptr; uchar c; while (((xpos = s.find(QRegExp("\\\\x[0-9a-fA-F]+"), xpos)) != -1) || ((opos = s.find(QRegExp("\\\\[0-7]+"), opos)) != -1)) { if (xpos != -1) { valids = "0123456789abcdef"; leadin = 2; pos = xpos; } else { valids = "01234567"; leadin = 1; pos = opos; } c = '\0'; len = 0; value = s.mid(pos+leadin, 3); ptr = (const char *) value; while (*ptr != '\0' && (v = valids.find(*ptr++, 0, FALSE)) != -1) { c = (c * valids.length()) + v; len++; } value.fill(c, 1); s.replace(pos, len+leadin, value); } return s; } void Status::fillArray(QArray<int> &array, QString values, int max) { array.resize(max); int last = 0; bool ok; QString value; for (uint i = 0; i < array.size(); i++) { if (values.find(',') < 0 && values.length() > 0) { value = values; values = ""; } if (values.find(',') >= 0) { value = values.left(values.find(',')); values.remove(0,values.find(',')+1); } array[i] = value.toInt(&ok); if (ok) last = array[i]; else array[i] = last; } } void Status::fillStrList(QStrList &list, QString values, int max) { if (!list.isEmpty()) list.clear(); QString last = ""; QString value; for (uint i = 0; i < (uint) max; i++) { if (values.find(',') < 0 && values.length() > 0) { value = values; values = ""; } if (values.find(',') >= 0) { value = values.left(values.find(',')); values.remove(0,values.find(',')+1); } if (!value.isEmpty()) last = decodeHexOctString(value); list.append(last); } } void Status::fillPixmapName(QStrList &pixmapName) { QStrList list = pixmapName; if (!pixmapName.isEmpty()) pixmapName.clear(); QString pixmap; QFileInfo fileInfo; for (uint i = 0; i < list.count(); i++) { pixmap = list.at(i); if (pixmap.left(1) != "/" && pixmap.left(1) != "~") pixmap = FIND_APP_DATA( pixmapDirectory+pixmap ); fileInfo.setFile(pixmap); if (!fileInfo.isReadable() || !fileInfo.isFile()) pixmap = ""; pixmapName.append(pixmap); } } void Status::confLevels(bool defGroup) { APP_CONFIG_BEGIN( cfg ); if (defGroup || cfg->hasKey("Levels")) maxLevel = cfg->readNumEntry("Levels", 13); APP_CONFIG_END( cfg ); } void Status::confMisc(bool defGroup) { APP_CONFIG_BEGIN( cfg ); if (defGroup || cfg->hasKey("LevelPosition")) fillArray(levelPos, cfg->readEntry("LevelPosition", "0,1,2,3,,4,,5,,6,,7"), maxLevel); if (defGroup || cfg->hasKey("PixmapDirectory")) { pixmapDirectory = cfg->readEntry("PixmapDirectory"); if (pixmapDirectory.left(1) != "/" && pixmapDirectory.left(1) != "~") pixmapDirectory.insert(0, "pics/"); if (pixmapDirectory.right(1) != "/") pixmapDirectory.append("/"); } if (defGroup || cfg->hasKey("LifesPixmapName")) fillStrList(lifesPixmapName, cfg->readEntry("LifesPixmapName", "lifes.xpm"), maxLevel+1); if (defGroup || cfg->hasKey("LevelPixmapName")) |