diff options
Diffstat (limited to 'kreversi/kreversi.h')
-rw-r--r-- | kreversi/kreversi.h | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/kreversi/kreversi.h b/kreversi/kreversi.h new file mode 100644 index 00000000..17599fa2 --- /dev/null +++ b/kreversi/kreversi.h @@ -0,0 +1,178 @@ +/* Yo Emacs, this -*- C++ -*- + ******************************************************************* + ******************************************************************* + * + * + * KREVERSI + * + * + ******************************************************************* + * + * A Reversi (or sometimes called Othello) game + * + ******************************************************************* + * + * created 1997 by Mario Weilguni <[email protected]> + * + ******************************************************************* + * + * This file is part of the KDE project "KREVERSI" + * + * KREVERSI 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, or (at your option) + * any later version. + * + * KREVERSI 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 KREVERSI; see the file COPYING. If not, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + ******************************************************************* + */ + + +#ifndef KREVERSI_H +#define KREVERSI_H + + +#include "kzoommainwindow.h" + +#include "Score.h" +#include "Game.h" +#include "Engine.h" +//#include "board.h" +#include "qreversigame.h" +#include "qreversigameview.h" + + +class QLabel; + +class KAction; + + +class KReversi : public KZoomMainWindow +{ + Q_OBJECT + +public: + + enum State { Ready, Thinking, Hint}; + + KReversi(); + ~KReversi(); + + bool isPlaying() const; + + // Methods that deal with the game + Color toMove() const { return m_game->toMove(); } + Color humanColor() const { return m_humanColor; } + Color computerColor() const { return opponent(m_humanColor); } + + // Methods that deal with the engine. + void setStrength(uint); + uint strength() const { return m_engine->strength(); } + void interrupt() { m_engine->setInterrupt(TRUE); } + bool interrupted() const { return (m_game->toMove() == computerColor() + && m_state == Ready); } + + // State of the program (Hint, Ready, Thinking, etc). + void setState(State); + State state() const { return m_state; } + +private: + // Initialisation + void createKActions(); + + // View functions. + QString getPlayerName(); + + virtual void writeZoomSetting(uint zoom); + virtual uint readZoomSetting() const; + virtual void writeMenubarVisibleSetting(bool visible); + virtual bool menubarVisibleSetting() const; + + virtual void saveProperties(KConfig *); + virtual void readProperties(KConfig *); + virtual bool queryExit(); + + +private slots: + + // Slots for KActions. + void slotNewGame(); + void slotOpenGame(); + void slotSave(); + void slotHint(); + void slotUndo(); + void slotSwitchSides(); + + // Interrupt and continue the engines thinking (also KActions). + void slotInterrupt(); + void slotContinue(); + void slotShowLastMove(); + void slotShowLegalMoves(); + + // Slots for game IO + void slotSquareClicked(int, int); + + // Misc slots. + void configureNotifications(); + + // Some dialogs and other misc stuff. + void showHighScoreDialog(); + void slotEditSettings(); + void loadSettings(); + + public slots: + // Slots for the view. + void handleMove(uint moveno, Move &move); + void showTurn(); + void showTurn(Color color); + void slotGameOver(); + +private: + + // Private methods + void humanMakeMove(int row, int col); + void computerMakeMove(); + void illegalMove(); + void showGameOver(Color); + + void saveGame(KConfig *); + bool loadGame(KConfig *); + + +private: + // Some Actions that need to be manipulated. + KAction *stopAction; + KAction *continueAction; + + KToggleAction *showLastMoveAction; + KToggleAction *showLegalMovesAction; + + // The game itself and game properties + QReversiGame *m_game; // The main document - the game + + Color m_humanColor; // The Color of the human player. + bool m_gameOver; // True if the game is over + bool m_cheating; // True if the user has changed sides + uint m_lowestStrength; // Lowest strength during the game. + bool m_competitiveGame;// True if the game has been + // competitive during all moves so far. + + State m_state; // Ready, Thinking, Hint + Engine *m_engine; // The AI that creates the computers moves. + + // Widgets + QReversiGameView *m_gameView; // The board widget. +}; + + +#endif + |