/* ******************************************************************************** This file is part of the game 'KTron' Copyright (C) 1998-2000 by Matthias Kiefer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *******************************************************************************/ #ifndef TRON_H #define TRON_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include class TDEActionCollection; #include "player.h" enum Player{One,Two,Both,Nobody}; // Bits that defines the rect and which sides to draw enum {BACKGROUND=0, PLAYER1=1,PLAYER2=2,TOP=4,BOTTOM=8,LEFT=16,RIGHT=32}; /** * @short The playingfield */ class Tron : public TQWidget { Q_OBJECT public: Tron(TQWidget *parent=0, const char *name=0); ~Tron(); void setActionCollection(TDEActionCollection*); void updatePixmap(); void setBackgroundPix(TQPixmap); void setComputerplayer(Player player, bool); bool isComputer(Player player); void setVelocity(int); void setRectSize(int newSize); public slots: /** Starts a new game. The difference to reset is, that the players * points are set to zero. Emits gameEnds(Nobody). */ void newGame(); void togglePause(); /** * checks if both players are computer and starts the game */ void computerStart(); void loadSettings(); signals: void gameEnds(Player loser); void gameReset(); protected: /** bitBltīs the rect that has to be updated from the * bufferpixmap on the screen and writes eventually text */ void paintEvent(TQPaintEvent *); /** resets game and creates a new playingfield */ void resizeEvent(TQResizeEvent *); void keyPressEvent(TQKeyEvent *); void keyReleaseEvent(TQKeyEvent *); /** pauses game */ void focusOutEvent(TQFocusEvent *); private: /** Stores key shortcuts */ TDEActionCollection* actionCollection; /** Drawing buffer */ TQPixmap *pixmap; /** The playingfield */ TQMemArray *playfield; /** game status flag */ bool gamePaused; /** game status flag */ bool gameEnded; /** used for waiting after game ended */ bool gameBlocked; /** flag, if a string should be drawn, how to start the game */ bool beginHint; /** Height of the playingfield in number of rects*/ int fieldHeight; /** Width of the playingfield in number of rects*/ int fieldWidth; TQTimer *timer; player players[2]; /** Backgroundpixmap **/ TQPixmap bgPix; /** time in ms between two moves */ int velocity; /** size of the rects */ int rectSize; /** The random sequence generator **/ KRandomSequence random; // Options /** determines level of computerplayer */ int lookForward; // Funktionen /** resets the game */ void reset(); /** starts the game timer */ void startGame(); /** stops the game timer */ void stopGame(); /** creates a new playfield and a bufferpixmap */ void createNewPlayfield(); /** paints players at current player coordinates */ void paintPlayers(); /** draws a rect in current TronStyle at position x,y of the playingfield */ void drawRect(TQPainter & p, int x, int y); /** emits gameEnds(Player) and displays the winner by changing color*/ void showWinner(Player winner); /** calculates if player playerNr would crash * if he moves xInc in x-direction and yInc in y-direction */ bool crashed(int playerNr,int xInc, int yInc) const; /** calculates if player playerNr should change direction */ void think(int playerNr); void changeDirection(int playerNr,int dis_right,int dis_left); /** sets the direction of player playerNr to newDirection */ void switchDir(int playerNr,Directions::Direction newDirection); /** * updates the the rect at current position to not draw a * border in the direction of the next step. * (only used in mode OLine) * * -1 means update both players */ void updateDirections(int playerNr=-1); private slots: /** * This is the main function of KTron. * It checkes if an accelerator is pressed and than moves this player * forward. Then it checkes if a crash occurred. * If no crash happen it moves both players forward and checks again * if someone crashed. */ void doMove(); void unblockGame(); void showBeginHint(); }; #endif // TRON_H