1 2 /** 3 * 4 * @file gamemode.h 5 * 6 * Part of the OpenJazz project 7 * 8 * @par History: 9 * - 23rd August 2005: Created OpenJazz.h 10 * - 2nd March 2009: Created network.h from parts of OpenJazz.h 11 * - 9th February 2009: Renamed network.h to game.h 12 * - 2nd August 2009: Created gamemode.h from parts of game.h 13 * 14 * @par Licence: 15 * Copyright (c) 2005-2017 Alister Thomson 16 * 17 * OpenJazz is distributed under the terms of 18 * the GNU General Public License, version 2.0 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 23 * 24 */ 25 26 27 #ifndef _GAMEMODE_H 28 #define _GAMEMODE_H 29 30 31 // Constants 32 33 #define MAX_PLAYERS (MAX_CLIENTS + 1) 34 35 36 // Enum 37 38 /// Game mode identifier 39 enum GameModeType { 40 41 M_SINGLE = 0, ///< Single-player mode 42 M_COOP = 1, ///< Co-operative mode 43 M_BATTLE = 2, ///< Battle mode 44 M_TEAMBATTLE = 3, ///< Team battle mode 45 M_RACE = 4 ///< Race mode 46 47 }; 48 49 50 // Classes 51 52 class Font; 53 class Game; 54 class Player; 55 56 /// Game mode base class 57 class GameMode { 58 59 public: 60 virtual ~GameMode (); 61 62 virtual GameModeType getMode () = 0; 63 virtual unsigned char chooseTeam () = 0; 64 virtual void drawScore (Font* font) = 0; 65 virtual bool hit (Player *source, Player *victim); 66 virtual bool kill (Game* game, Player *source, Player *victim); 67 virtual bool endOfLevel (Game* game, Player *player, int gridX, int gridY); 68 virtual void outOfTime (); 69 70 }; 71 72 /// Single-player game mode 73 class SingleGameMode : public GameMode { 74 75 public: 76 GameModeType getMode (); 77 unsigned char chooseTeam (); 78 void drawScore (Font* font); 79 80 }; 81 82 /// Co-operative game mode base class 83 class CooperativeGameMode : public GameMode { 84 85 public: 86 unsigned char chooseTeam (); 87 virtual void drawScore (Font* font); 88 89 }; 90 91 /// Free-for-all game mode base class 92 class FreeForAllGameMode : public GameMode { 93 94 public: 95 unsigned char chooseTeam (); 96 virtual void drawScore (Font* font); 97 98 }; 99 100 /// Team-based game mode base class 101 class TeamGameMode : public GameMode { 102 103 public: 104 unsigned char chooseTeam (); 105 virtual void drawScore (Font* font); 106 107 }; 108 109 /// Co-operative game mode 110 class CoopGameMode : public CooperativeGameMode { 111 112 public: 113 GameModeType getMode (); 114 115 }; 116 117 /// Battle game mode 118 class BattleGameMode : public FreeForAllGameMode { 119 120 private: 121 int targetKills; ///< Number of kills required for a player to win 122 123 public: 124 GameModeType getMode (); 125 126 }; 127 128 /// Team battle game mode 129 class TeamBattleGameMode : public TeamGameMode { 130 131 private: 132 int targetKills; ///< Number of kills required for a team to win 133 134 public: 135 GameModeType getMode (); 136 137 }; 138 139 /// Race game mode 140 class RaceGameMode : public FreeForAllGameMode { 141 142 private: 143 int targetLaps; ///< Number of laps required for a player to win 144 145 public: 146 GameModeType getMode (); 147 bool hit (Player *source, Player *victim); 148 bool endOfLevel (Game* game, Player *player, int gridX, int gridY); 149 150 }; 151 152 #endif 153 154