Zappy Server
C++ game server: world, rules, scheduler, network
Loading...
Searching...
No Matches
World.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <random>
5#include <string>
6#include <unordered_map>
7#include <vector>
8
9#include "data/Egg.hpp"
10#include "data/Orientation.hpp"
11#include "data/Player.hpp"
12#include "data/Resources.hpp"
13#include "data/Tile.hpp"
15
18 std::vector<int> ejectedPlayerIds;
19 int dx;
20 int dy;
21};
22
36
47class World {
48 public:
50 World(int width, int height, const std::vector<std::string>& teamNames, unsigned int seed);
51
53 Tile& at(int x, int y);
54 const Tile& at(int x, int y) const;
55
56 std::vector<std::pair<int, int>> spawnResources();
57
58 int addPlayer(int connectionId, const std::string& teamName, int x, int y,
59 Orientation orientation);
60 void removePlayer(int id);
61 void movePlayer(int id, int x, int y);
62 void turnPlayer(int id, Orientation orientation);
63
64 bool takeResource(int playerId, ResourceType type);
65 bool setResource(int playerId, ResourceType type);
66
72 bool consumeFood(int playerId);
73
74 Player& getPlayer(int id);
75
77 void playerBroadcast(int playerId, const std::string& message);
78
79 EjectResult ejectPlayers(int ejectorId);
80
82 void spawnInitialEggs(int countPerTeam);
83
84 int addEgg(int playerId);
85 bool hatchEgg(int eggId);
86 std::optional<Egg> popEggForTeam(const std::string& teamName);
87
88 int teamEggCount(const std::string& team) const;
89
95 std::optional<std::vector<int>> startIncantation(int playerId);
96
102 bool finalizeIncantation(int x, int y, const std::vector<int>& participantIds);
103
104 std::optional<std::string> checkWin() const;
105
107 bool isGameEnded() const;
109 const std::optional<std::string>& winner() const;
110
111 int teamPlayerCount(const std::string& team) const;
112 int width() const;
113 int height() const;
114 const std::unordered_map<int, Player>& getPlayers() const;
115 const std::unordered_map<int, Egg>& getEggs() const;
116
117 void addWorldObserver(IWorldObserver* observer);
118
119 private:
120 int _spawnEgg(const std::string& teamName, int x, int y, int parentPlayerId);
121
124 std::vector<Tile> _tiles;
125 std::unordered_map<int, Player> _players;
126 std::unordered_map<int, Egg> _eggs;
127 std::vector<std::string> _teamNames;
128 std::mt19937 _rng;
130 int _nextEggId = 0;
131 bool _gameEnded = false;
132 std::optional<std::string> _winner;
133 std::vector<IWorldObserver*> _observers;
134};
Orientation
ResourceType
Enumerate the different types of resources in the game.
Definition Resources.hpp:12
Observer hooks for game-state changes (Observer pattern).
Pure game state - no networking, no scheduling.
Definition World.hpp:47
std::unordered_map< int, Egg > _eggs
Definition World.hpp:126
std::vector< IWorldObserver * > _observers
Definition World.hpp:133
bool takeResource(int playerId, ResourceType type)
Definition World.cpp:110
void movePlayer(int id, int x, int y)
Definition World.cpp:91
bool finalizeIncantation(int x, int y, const std::vector< int > &participantIds)
Finalize an incantation after the 300/f second delay. Re-checks prerequisites. On success,...
Definition World.cpp:331
const std::unordered_map< int, Player > & getPlayers() const
Definition World.cpp:402
std::optional< Egg > popEggForTeam(const std::string &teamName)
Definition World.cpp:244
void turnPlayer(int id, Orientation orientation)
Definition World.cpp:103
bool hatchEgg(int eggId)
Definition World.cpp:230
std::mt19937 _rng
Definition World.hpp:128
void spawnInitialEggs(int countPerTeam)
Spawn countPerTeam eggs for every team at random tiles (server startup).
Definition World.cpp:208
int teamPlayerCount(const std::string &team) const
Definition World.cpp:392
int _nextPlayerId
Definition World.hpp:129
Tile & at(int x, int y)
Access a tile by position. Map is toroidal, coordinates wrap.
Definition World.cpp:12
void addWorldObserver(IWorldObserver *observer)
Definition World.cpp:420
std::vector< Tile > _tiles
Definition World.hpp:124
int _spawnEgg(const std::string &teamName, int x, int y, int parentPlayerId)
Definition World.cpp:194
EjectResult ejectPlayers(int ejectorId)
Definition World.cpp:154
std::unordered_map< int, Player > _players
Definition World.hpp:125
int addPlayer(int connectionId, const std::string &teamName, int x, int y, Orientation orientation)
Definition World.cpp:58
bool consumeFood(int playerId)
Consume one unit of food from playerId (starvation tick). Fires onPlayerInventoryChanged so observers...
Definition World.cpp:135
bool _gameEnded
Definition World.hpp:131
void playerBroadcast(int playerId, const std::string &message)
Fire onBroadcast to observers (GUI animation, logging). No state change.
Definition World.cpp:149
std::optional< std::string > checkWin() const
Definition World.cpp:405
std::vector< std::pair< int, int > > spawnResources()
Definition World.cpp:28
bool isGameEnded() const
True once a team has won. Game logic stops reacting to AI commands.
Definition World.cpp:417
int _width
Definition World.hpp:122
const std::unordered_map< int, Egg > & getEggs() const
Definition World.cpp:403
void removePlayer(int id)
Definition World.cpp:78
int height() const
Definition World.cpp:401
bool setResource(int playerId, ResourceType type)
Definition World.cpp:123
int _height
Definition World.hpp:123
std::vector< std::string > _teamNames
Definition World.hpp:127
std::optional< std::vector< int > > startIncantation(int playerId)
Validate and start an incantation for playerId. Returns the list of participant IDs on success,...
Definition World.cpp:304
std::optional< std::string > _winner
Definition World.hpp:132
Player & getPlayer(int id)
Definition World.cpp:147
int addEgg(int playerId)
Definition World.cpp:216
int teamEggCount(const std::string &team) const
Definition World.cpp:222
int width() const
Definition World.cpp:400
int _nextEggId
Definition World.hpp:130
const std::optional< std::string > & winner() const
Winning team name, set when isGameEnded() becomes true.
Definition World.cpp:418
Result of an Eject command. dx/dy encode the push direction (used to notify ejected players).
Definition World.hpp:17
std::vector< int > ejectedPlayerIds
Definition World.hpp:18
Stone and player requirements for one incantation level.
Definition World.hpp:27
int playerCount
Definition World.hpp:28
Represents a player in the game Each player has an ID, position (x, y), orientation,...
Definition Player.hpp:15
Represents a tile on the game map, containing resources, player IDs, and egg IDs.
Definition Tile.hpp:10