-
Notifications
You must be signed in to change notification settings - Fork 0
/
gameMaster.h
65 lines (55 loc) · 2.11 KB
/
gameMaster.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef GAMEMASTER_H
#define GAMEMASTER_H
#include <tuple>
#include <cstdio>
#include <vector>
#include <mutex>
#include <semaphore.h>
#include "definiciones.h"
#include "config.h"
#include <atomic>
using namespace std;
class gameMaster {
private:
// Atributos Privados
int nro_ronda = 0;
int x, y, jugadores_por_equipos;
vector<vector<color>> tablero;
vector<coordenadas> pos_jugadores_azules, pos_jugadores_rojos;
coordenadas pos_bandera_roja, pos_bandera_azul;
color turno;
estrategia stratActual;
// Agregamos mas atributos
int quantum; // si es -1, la estrategia no cuenta con quantum. Podria ser un puntero al quantum del equipo
int quantumsOriginales[2];
estrategia strats[2];
int movio_alguien_rojo = 0, movio_alguien_azul = 0;
// Métodos privados
color obtener_coordenadas(coordenadas coord);
void mover_jugador_tablero(coordenadas pos_anterior, coordenadas pos_nueva, color colorEquipo);
public:
// Atributos públicos
gameMaster(Config config);
void termino_ronda(color equipo); // Marca que un jugador terminó la ronda
int mover_jugador(direccion dir, int nro_jugador);
color ganador = INDEFINIDO;
// Agregamos mas atributos
atomic_int dormidos[2] = {0,0}; // Cuantos estan dormidos por equipo
atomic_bool desperteUltimoRonda[2] = {false,false};
// Métodos públicos
bool termino_juego();
int getTamx();
int getTamy();
static int distancia(coordenadas pair1, coordenadas pair2);
sem_t turno_rojo, turno_azul, termina_ronda_rojo, termina_ronda_azul; // FIXME: Al principio necesito entrar como azul, luego puedo hacerlo por el método termino_ronda...
color en_posicion(coordenadas coord);
bool es_posicion_valida(coordenadas pos);
bool es_color_libre(color color_tablero);
coordenadas proxima_posicion(coordenadas anterior, direccion movimiento); // Calcula la proxima posición a moverse
// Agregamos mas metodos
void setearEstrategia(estrategia strategy, color equipo);
void setearQuantum(int q, color equipo);
color getTurno();
int getQuantumActual();
};
#endif // GAMEMASTER_H