/*************************************************************************** * Copyright (C) 2003 by Ian Wadham and Marco Kr�ger * * ianw2@optusnet.com.au * * * * 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. * ***************************************************************************/ #ifndef KGRGAME_H #define KGRGAME_H // Macros to smooth out the differences between TQt 1 and TQt 2 classes. // // "myStr" converts a TQString object to a C language "char*" character string. // "myChar" extracts a C language character (type "char") from a TQString object. // "endData" checks for an end-of-file condition. // #define myStr latin1 #define myChar(i) tqat((i)).latin1() #define endData atEnd #include #ifdef QT3 #include #else #include #endif #include #include #include #include #include #include /** Sets up games and levels in KGoldrunner and controls the play. @author Ian Wadham */ class KGrObject; class KGrHero; class KGrEnemy; class KGrCollection; class KGrGame : public TQObject { Q_OBJECT TQ_OBJECT public: KGrGame (KGrCanvas * theView, TQString theSystemDir, TQString theUserDir); ~KGrGame(); bool initCollections(); KGrHero * getHero(); int getLevel(); void startPlaying(); bool inMouseMode(); // True if the game is in mouse mode. bool inEditMode(); // True if the game is in editor mode. bool isLoading(); // True if a level is being loaded. bool saveOK (bool exiting); // Check if edits were saved. TQString getTitle(); // Collection - Level NNN, Name. void setEditObj (char newEditObj); // Set object for editor to paint. TQString getFilePath (Owner o, KGrCollection * colln, int lev); public slots: void startLevelOne(); // Start any game from level 1. void startAnyLevel(); // Start any game from any level. void startNextLevel(); // Start next level of current game. void setMouseMode (bool on_off); // Set mouse OR keyboard control. void startLevel (int startingAt, int requestedLevel); void newGame (const int lev, const int gameIndex); void startTutorial(); // Start tutorial game. void showHint(); // Show hint for current level. void showHighScores(); // Show high scores for current game. void incScore(int); // Update the score. void herosDead(); // Hero was caught or he quit (key Q). void showHiddenLadders(); // Show hidden ladders (nuggets gone). void goUpOneLevel(); // Hero completed the level. void loseNugget(); // Nugget destroyed (not collected). void heroAction (KBAction movement);// Move hero under keyboard control. void saveGame(); // Save game ID, score and level. void loadGame(); // Re-load game, score and level. signals: void showScore (long); // For main window to show the score. void showLives (long); // For main window to show lives left. void showLevel (int); // For main window to show the level. void hintAvailable (bool); // For main window to adjust menu text. void setEditMenu (bool); // Enable/Disable edit menu items. void defaultEditObj(); // Set default edit-toolbar button. void markRuleType (char); // Mark KGoldrunner/Traditional rules. void gameFreeze (bool); // Do visual feedback in the GUI. private slots: void finalBreath (); // Hero is dead: re-start the level. void readMousePos (); // Timed reading of mouse position. void doDig (int button); // Dig when under mouse-button control. private: void setBlankLevel (bool playable); int loadLevel (int levelNo); bool openLevelFile (int levelNo, TQFile & openlevel); void changeObject (unsigned char kind, int i, int j); void createObject (KGrObject *o, char picType, int x, int y); void setTimings (); void initSearchMatrix(); void checkHighScore(); // Check if high score for current game. int selectLevel (int action, int requestedLevel); int selectedGame; void restart(); // Kickstart the game action. /******************************************************************************/ /************************** PLAYFIELD AND GAME DATA *************************/ /******************************************************************************/ private: KGrCanvas * view; // Where the game is displayed. TQString systemDataDir; // System games are stored here. TQString userDataDir; // User games are stored here. KGrObject * playfield[30][22]; // Array of playfield objects. char editObjArray[30][22]; // Character-code equivalent. char lastSaveArray[30][22]; // Copy for use in "saveOK()". int level; // Current play/edit level. TQString levelName; // Level name (optional). TQString levelHint; // Level hint (optional). long lives; // Lives remaining. long score; // Current score. long startScore; // Score at start of level. KGrHero * hero; // The HERO figure !! Yay !!! int startI, startJ; // The hero's starting position. #ifdef QT3 TQPtrList enemies; // The list of enemies. #else TQList enemies; // The list of enemies. #endif int enemyCount; // How many enemies. KGrEnemy * enemy; // One of the enemies. int nuggets; // How many gold nuggets. bool newLevel; // Next level will be a new one. bool loading; // Stop input until it's loaded. bool modalFreeze; // Stop game during dialog. bool messageFreeze; // Stop game during message. TQTimer * mouseSampler; // Timer for mouse tracking. TQTimer * dyingTimer; // For pause when the hero dies. int lgHighlight; // Row selected in "loadGame()". /******************************************************************************/ /************************** AUTHORS' DEBUGGING AIDS **************************/ /******************************************************************************/ public slots: void doStep(); // Do one animation step. void showFigurePositions(); // Show everybody's co-ordinates. void showHeroState(); // Show hero's co-ordinates and state. void showEnemyState (int); // Show enemy's co-ordinates and state. void showObjectState(); // Show an object's state. void bugFix(); // Turn a bug fix on/off dynamically. void startLogging(); // Turn logging on/off. /******************************************************************************/ /******************** GAME EDITOR PROPERTIES AND METHODS ********************/ /******************************************************************************/ public slots: // Slots connected to the Menu and Edit Toolbar. void createLevel(); // Set up a blank level-display for edit. void updateLevel(); // Update an existing level. void updateNext(); // Update the current level + 1. void editNameAndHint(); // Run a dialog to edit the level name and hint. bool saveLevelFile(); // Save the edited level in a text file (.grl). void moveLevelFile(); // Move level to another collection or number. void deleteLevelFile(); // Delete a level file. void editCollection (int action); void setLevel (int lev); // Set level to be edited. void freeze(); // Stop the gameplay action. void unfreeze(); // Restart the gameplay action. void setMessageFreeze (bool); private: bool mouseMode; // Flag to set up keyboard OR mouse control. bool editMode; // Flag to change keyboard and mouse functions. char editObj; // Type of object to be painted by the mouse. bool paintEditObj; // Sets painting on/off (toggled by clicking). int oldI, oldJ; // Last mouse position painted. int editLevel; // Level to be edited (= 0 for new level). int heroCount; // Can enter at most one hero. bool shouldSave; // True if name or hint was edited. private: void loadEditLevel (int); // Load and display an existing level for edit. void initEdit(); void deleteLevel(); void insertEditObj (int, int); void setEditableCell (int, int, char); void showEditLevel(); bool reNumberLevels (int, int, int, int); bool ownerOK (Owner o); // Pixmaps for tqrepainting objects as they are edited. TQPixmap digpix[10]; TQPixmap brickbg, fbrickbg; TQPixmap freebg, nuggetbg, polebg, betonbg, ladderbg, hladderbg; TQPixmap edherobg, edenemybg; private slots: void doEdit(int); // For mouse-click when in edit-mode. void endEdit(int); // For mouse-release when in edit-mode. /******************************************************************************/ /******************** COLLECTION PROPERTIES AND METHODS *******************/ /******************************************************************************/ private: // Note that a collection of KGoldrunner levels is the same thing as a "game". #ifdef QT3 TQPtrList collections; // List of ALL collections. #else TQList collections; // List of ALL collections. #endif KGrCollection * collection; // Collection currently in use. Owner owner; // Collection owner. int collnIndex; // Index in collections list. void mapCollections(); bool loadCollections (Owner); bool saveCollections (Owner); /******************************************************************************/ /********************** WORD-WRAPPED MESSAGE BOX ************************/ /******************************************************************************/ void myMessage (TQWidget * tqparent, TQString title, TQString contents); }; /******************************************************************************/ /********************** CLASS TO DISPLAY THUMBNAIL ***********************/ /******************************************************************************/ class KGrThumbNail : public TQFrame { public: KGrThumbNail (TQWidget *tqparent = 0, const char *name = 0); void setFilePath (TQString &, TQLabel *); // Set filepath and name field. static TQColor backgroundColor; static TQColor brickColor; static TQColor ladderColor; static TQColor poleColor; protected: void drawContents (TQPainter *); // Draw a preview of a level. TQString filePath; TQLabel * lName; }; /******************************************************************************/ /*********************** COLLECTION DATA CLASS **************************/ /******************************************************************************/ // Note that a collection of KGoldrunner levels is the same thing as a "game". class KGrCollection { public: KGrCollection (Owner o, const TQString & n, const TQString & p, const char s, int nl, const TQString & a); Owner owner; // Collection owner: "System" or "User". TQString name; // Collection name. TQString prefix; // Collection's filename prefix. char settings; // Collection rules: KGoldrunner or Traditional. int nLevels; // Number of levels in the collection. TQString about; // Optional text about the collection. }; #endif