Skip to content

Commit

Permalink
Implementacion del movimiento del gusano en teoria...lista?
Browse files Browse the repository at this point in the history
Signed-off-by: Tomas Fabrizio Orsi <[email protected]>
  • Loading branch information
lima-limon-inc committed Oct 27, 2023
1 parent 605fd6e commit 5fa86bc
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 4 deletions.
49 changes: 48 additions & 1 deletion src/server/gusano.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,52 @@
#include "gusano.h"
#include "protocolo.h"

Gusano::Gusano() {
typedef int cambioX;
typedef int cambioY;

Gusano::Gusano(std::pair<int, int> coords) {
this->coords = coords;
this->vida = 100;
}

std::pair<int, int> Gusano::cambio(Direccion accion) {
std::pair<cambioX, cambioY> cambio(0,0);
/*Arranca abajo a la izquierda.
*X:
* >: +1
* <: -1
*Y:
* ^: +1
* v: -1
*/
switch (accion) {
case IZQUIERDA:
cambio.first = -1;
cambio.second = 0;
break;
case DERECHA:
cambio.first = 1;
cambio.second = 0;
break;
//TODO Esto no se si es 100% correcto. Por ahora funca
case SALTO:
cambio.first = 1;
cambio.second = 1;
break;
case PIRUETA:
cambio.first = -1;
cambio.second = 1;
break;
}

return cambio;


}

std::pair<int, int> Gusano::getCoords() {
return this->coords;
}
void Gusano::setCoords(std::pair<int, int> nuevasCoords) {
this->coords = nuevasCoords;
}
6 changes: 5 additions & 1 deletion src/server/gusano.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@ typedef uint hp;
class Gusano {
private:
hp vida;
std::pair<int, int> coords;

public:
Gusano();
Gusano(std::pair<int, int> coords);

std::pair<int, int> cambio(Direccion accion);

std::pair<int, int> getCoords();
void setCoords(std::pair<int, int> nuevasCoords);
};


Expand Down
27 changes: 25 additions & 2 deletions src/server/partida.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,19 @@ void Partida::anadirJugador(Jugador *jugadorNuevo) {
std::vector<Gusano*> gusanosParaElCliente;
//Todos los gusanos que creamos lo anadimos al jugador y a la partida
for (int i = 0 ;i < CANTGUSANOS; i++) {
Gusano *nuevoGusano = new Gusano();
//TODO Hacer las coordenadas distintas
std::pair<int, int> coordsIniciales(0,0);

Gusano *nuevoGusano = new Gusano(coordsIniciales);
gusanosParaElCliente.push_back(nuevoGusano);

//Anadimos los gusanos del cliente a la partida
this->gusanos.append(nuevoGusano);

//TODO Unificar la lista thread safe con el mapa
//TODO No soy fan de que tenga que guardar las coordenadas
//en dos lados distintos. Es lo que hay (?.
this->coordsGusanos.insert({coordsIniciales,nuevoGusano});
}
//Le damos los gusanos al cliente
jugadorNuevo->obtenerGusanosIniciales(gusanosParaElCliente);
Expand All @@ -39,6 +47,12 @@ void Partida::anadirJugador(Jugador *jugadorNuevo) {
}


std::pair<int, int> Partida::gravedad(std::pair<int, int> cambioDeseado,
std::pair<int, int> posInicial
){
return cambioDeseado;
}

void Partida::gameLoop() {
int posJugadorActual = 0;

Expand All @@ -58,7 +72,7 @@ void Partida::gameLoop() {
continue;

/*
*CUIDADO: EFECTOS SECUNDARIOS:
CUIDADO: EFECTOS SECUNDARIOS:
ESTA FUNCION VA A DEVOLVER UN GUSANO DISTINTO CADA VEZ QUE
LA LLAMES.
No soy nada fan de esto. Pero creo que es la forma mas
Expand All @@ -67,7 +81,14 @@ void Partida::gameLoop() {
de matarlo.
*/
Gusano *gusanoActual = jugadorActual->getGusanoActual();
std::pair<int, int> cambio;
cambio = gusanoActual->cambio(accionAEjecutar);

std::pair<int, int> coordenadasIniciales;
coordenadasIniciales = gusanoActual->getCoords();

std::pair<int, int> coordenadasFinales;
coordenadasFinales = this->gravedad(cambio, coordenadasIniciales);
//TODO: Cambiar a algo mas generico cuando tengamos las armas
// int jugadorActual.getAccion();

Expand All @@ -76,6 +97,8 @@ void Partida::gameLoop() {

//TODO: Implementar "actualizar"
//this.actualizar();
this->coordsGusanos[coordenadasFinales] = gusanoActual;
this->coordsGusanos[coordenadasIniciales] = nullptr;


posJugadorActual += 1;
Expand Down
8 changes: 8 additions & 0 deletions src/server/partida.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "jugador.h"
#include "thread.h"
#include <cstdint>
#include <map>
#include <sys/types.h>
#include <utility>
#include <vector>
Expand All @@ -25,6 +26,13 @@ class Partida : public Thread {

TSList<Gusano *> gusanos;

std::map<std::pair<int, int>, Gusano *> coordsGusanos;

//TODO: Aca estaria Box2d
std::pair<int, int> gravedad(std::pair<int, int> cambioDeseado,
std::pair<int, int> posInicial
);

public:
Partida(std::string mapa);

Expand Down

0 comments on commit 5fa86bc

Please sign in to comment.