Archived
Nuevos métodos en dbConnector y cambios varios.
Ahora es posible guardar salas en la Base de datos y obtener algunas cosas. Hay muchos dilemas sobre la carga de salas desde DB. Se han hecho pequeños cambios y añadido métodos por aquí y por allá.
This commit is contained in:
@@ -45,7 +45,7 @@ public class GameManager
|
|||||||
/**
|
/**
|
||||||
* Realiza el guardado del save y de las salas.
|
* Realiza el guardado del save y de las salas.
|
||||||
*/
|
*/
|
||||||
public void SaveGame()
|
public void SaveGameToJSON()
|
||||||
{
|
{
|
||||||
SaveLoader.SaveToJSON(saveData, Gdx.files.local(localSavePath + "save.json"));
|
SaveLoader.SaveToJSON(saveData, Gdx.files.local(localSavePath + "save.json"));
|
||||||
rmLoader.SaveAllRoomsToJSON();
|
rmLoader.SaveAllRoomsToJSON();
|
||||||
@@ -56,7 +56,7 @@ public class GameManager
|
|||||||
* No activa ninguna de ellas.
|
* No activa ninguna de ellas.
|
||||||
* Todo: Probablemente queramos también autentificar al usuario.
|
* Todo: Probablemente queramos también autentificar al usuario.
|
||||||
*/
|
*/
|
||||||
public void LoadGame()
|
public void LoadGameFromJSON()
|
||||||
{
|
{
|
||||||
SaveLoader.LoadFromJSON(Gdx.files.local(localSavePath + "save.json"));
|
SaveLoader.LoadFromJSON(Gdx.files.local(localSavePath + "save.json"));
|
||||||
|
|
||||||
@@ -84,15 +84,28 @@ public class GameManager
|
|||||||
prefab.copyTo(roomSave);
|
prefab.copyTo(roomSave);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Realiza la compra de una nueva sala. Para ello:
|
||||||
|
* - Carga la sala por defecto desde el prefab.
|
||||||
|
* - Se comprueba que se tiene dinero.
|
||||||
|
* - Guarda la sala en la ubicación de salas del jugador.
|
||||||
|
* - Resta el dinero que cuesta esta sala.
|
||||||
|
* - Actualiza el Save para indicar que se tiene esa sala.
|
||||||
|
* @param roomID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public boolean ComprarRoom(String roomID)
|
public boolean ComprarRoom(String roomID)
|
||||||
{
|
{
|
||||||
//Cargamos la sala por defecto desde el prefab de la misma.
|
//Cargamos la sala por defecto desde el prefab de la misma.
|
||||||
rmLoader.LoadRoomFromJSON(Gdx.files.internal(internalRoomDataPath + roomID + ".json"));
|
rmLoader.LoadRoomFromJSON(Gdx.files.internal(internalRoomDataPath + roomID + ".json"));
|
||||||
Room rm = rmLoader.GetRoomByID(roomID);
|
Room rm = rmLoader.GetRoomByID(roomID);
|
||||||
|
|
||||||
|
//Es necesario cargar la sala primero para saber su precio.
|
||||||
if(saveData.dinero < rm.roomPrice)
|
if(saveData.dinero < rm.roomPrice)
|
||||||
{
|
{
|
||||||
Gdx.app.log("GameManager", "No tienes dinero para comprar la sala");
|
Gdx.app.log("GameManager", "No tienes dinero para comprar la sala");
|
||||||
|
//Si no se ha comprado, deberíamos descargar la sala.
|
||||||
|
rmLoader.UnloadRoom(roomID);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,10 +114,19 @@ public class GameManager
|
|||||||
//Cobramos por ella.
|
//Cobramos por ella.
|
||||||
saveData.dinero -= rm.roomPrice;
|
saveData.dinero -= rm.roomPrice;
|
||||||
|
|
||||||
//Fixme: Debería devolver true/false en función de cómo haya ido.
|
//Actualizamos el Save para indicar que se tiene esa sala.
|
||||||
|
saveData.ownedRooms.put(roomID, true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Realiza las operaciones necesarias para comprar una máquina para la sala activa.
|
||||||
|
* @param mc Prt a la máquina que queremos añadir.
|
||||||
|
* @param posX Posición x para la nueva máquina.
|
||||||
|
* @param posY Posición y para la nueva máquina.
|
||||||
|
* @return True si la compra se ha completado, false si no.
|
||||||
|
*/
|
||||||
public boolean ComprarMachine(Machine mc, int posX, int posY)
|
public boolean ComprarMachine(Machine mc, int posX, int posY)
|
||||||
{
|
{
|
||||||
//Comprobamos si tenemos dinero suficiente.
|
//Comprobamos si tenemos dinero suficiente.
|
||||||
@@ -127,6 +149,20 @@ public class GameManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Completa un ciclo del juego y el jugador obtiene el dinero de sus máquinas.
|
||||||
|
*/
|
||||||
|
public void CompletarCiclo()
|
||||||
|
{
|
||||||
|
//Calculamos el dinero obtenido.
|
||||||
|
int dineroObtenido = 0;
|
||||||
|
|
||||||
|
//TODO: ¿Cómo iteramos por las salas?
|
||||||
|
// ¿Iteramos por las cargadas o las que se indican en el Save?
|
||||||
|
|
||||||
|
//Se itera por las salas y se suma su dinero por ciclo al dinero total.
|
||||||
|
saveData.dinero += dineroObtenido;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -77,15 +77,7 @@ public class RoomLoader
|
|||||||
*/
|
*/
|
||||||
public void SaveRoomToJSON(String roomID, FileHandle file)
|
public void SaveRoomToJSON(String roomID, FileHandle file)
|
||||||
{
|
{
|
||||||
Room rSave = loadedRooms.get(roomID);
|
String data = GetRoomJSON(roomID);
|
||||||
if(rSave == null)
|
|
||||||
{
|
|
||||||
Gdx.app.error("RoomLoader", "No es posible guardar la Room: " + roomID +
|
|
||||||
"; ¿Está cargada?");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String data = loaderJson.toJson(rSave);
|
|
||||||
//FileHandle file = Gdx.files.local(path);
|
//FileHandle file = Gdx.files.local(path);
|
||||||
file.writeString(loaderJson.prettyPrint(data), false);
|
file.writeString(loaderJson.prettyPrint(data), false);
|
||||||
|
|
||||||
@@ -104,6 +96,25 @@ public class RoomLoader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Devuelve los datos de la sala en formato JSON.
|
||||||
|
* @param roomName Nombre de la sala a obtener.
|
||||||
|
* @return Datos de la sala indicada en formato JSON.
|
||||||
|
*/
|
||||||
|
public String GetRoomJSON(String roomName)
|
||||||
|
{
|
||||||
|
Room rSave = loadedRooms.get(roomName);
|
||||||
|
if(rSave == null)
|
||||||
|
{
|
||||||
|
Gdx.app.error("RoomLoader", "No es posible guardar la Room: " + roomName +
|
||||||
|
"; ¿Está cargada?");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String data = loaderJson.toJson(rSave);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descarga una Room dado su ID.
|
* Descarga una Room dado su ID.
|
||||||
* @param roomID ID de la Room a descargar.
|
* @param roomID ID de la Room a descargar.
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ public class Save
|
|||||||
{
|
{
|
||||||
|
|
||||||
int dinero;
|
int dinero;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Indica si el jugador tiene comprada esa sala y, por tanto, ha de aparecer/cargarse.
|
Indica si el jugador tiene comprada esa sala y, por tanto, ha de aparecer/cargarse.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -4,11 +4,8 @@ import com.badlogic.gdx.Gdx;
|
|||||||
import com.badlogic.gdx.files.FileHandle;
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
import com.badlogic.gdx.utils.Json;
|
import com.badlogic.gdx.utils.Json;
|
||||||
import com.badlogic.gdx.utils.JsonWriter;
|
import com.badlogic.gdx.utils.JsonWriter;
|
||||||
import com.mysql.jdbc.Driver;
|
|
||||||
import java.sql.DriverManager;
|
import java.sql.*;
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.Statement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clase estática que realiza todas las interacciones con la BD.
|
* Clase estática que realiza todas las interacciones con la BD.
|
||||||
@@ -21,6 +18,8 @@ public class dbConnector
|
|||||||
private static Connection connect = null;
|
private static Connection connect = null;
|
||||||
private static dbData datosConexion = null;
|
private static dbData datosConexion = null;
|
||||||
|
|
||||||
|
private static int IDPartida = -1;
|
||||||
|
|
||||||
private static final String localDefaultSavePath = "gameData/";
|
private static final String localDefaultSavePath = "gameData/";
|
||||||
private static final String defaultFileName = "dbData.json";
|
private static final String defaultFileName = "dbData.json";
|
||||||
|
|
||||||
@@ -116,13 +115,202 @@ public class dbConnector
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Devuelve el ID de partida del jugador. Utiliza el usuario con el que está autentificado.
|
||||||
//TODO: ¿Qué necesito? Creo que el ID de partida...
|
* Sólo se realiza la consulta una vez, luego el valor se guarda.
|
||||||
// ¿Dónde lo guardo?
|
* @return ID de partida del jugador.
|
||||||
public static void SaveRoomToDB()
|
*/
|
||||||
|
public static int GetIDPartidaFromDB()
|
||||||
{
|
{
|
||||||
|
//Como siempre es la misma consulta, podemos reutilizar los datos y ahorrarnos la consulta.
|
||||||
|
if(IDPartida >= 0)
|
||||||
|
{
|
||||||
|
return IDPartida;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Si no tenemos los datos, hacemos la consulta.
|
||||||
|
Statement stt = CrearStatement();
|
||||||
|
|
||||||
|
//Obtenemos el ID de partida.
|
||||||
|
String username = LoginSystem.GetUserName();
|
||||||
|
|
||||||
|
IDPartida = GetIDPartidaFromDB(username);
|
||||||
|
|
||||||
|
return IDPartida;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Permite obtener el ID de la partida dado un usuario.
|
||||||
|
* Este método siempre realiza la consulta para obtener este ID.
|
||||||
|
* @param username Nombre del usuario del que obtener la partida.
|
||||||
|
* @return ID de la partida del usuario indicado.
|
||||||
|
*/
|
||||||
|
public static int GetIDPartidaFromDB(String username)
|
||||||
|
{
|
||||||
|
//En este caso, siempre hemos de hacer la consulta.
|
||||||
|
//Creamos el Statement.
|
||||||
|
Statement stt = CrearStatement();
|
||||||
|
|
||||||
|
//Obtenemos el ID de partida.
|
||||||
|
int id = -1;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ResultSet set = stt.executeQuery("select id from partidas where nickname_usuario = '" + username + "';");
|
||||||
|
id = set.getInt(0);
|
||||||
|
} catch (SQLException e)
|
||||||
|
{
|
||||||
|
Gdx.app.error("dbConnector", "No se ha podido obtener el ID de partida.");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Cerramos el Statement.
|
||||||
|
CerrarStatement(stt);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sube a la DB el Save y los datos del usuario.
|
||||||
|
* Esto incluye las salas asociadas al mismo.
|
||||||
|
*/
|
||||||
|
public static void UploadSave()
|
||||||
|
{
|
||||||
|
//TODO: Guardar los datos.
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sube la sala indicada a la BD.
|
||||||
|
* @param roomName Nombre de la sala a guardar.
|
||||||
|
*/
|
||||||
|
public static void SaveRoomToDB(String roomName)
|
||||||
|
{
|
||||||
|
//Obtenemos los datos necesarios.
|
||||||
|
int idPartida = GetIDPartidaFromDB();
|
||||||
|
String roomJSON = RoomLoader.getInstance().GetRoomJSON(roomName);
|
||||||
|
|
||||||
|
//Comprobamos que se han obtenido los datos de la sala.
|
||||||
|
if(roomJSON.equals(""))
|
||||||
|
{
|
||||||
|
Gdx.app.error("dbConnector", "No se puede guardar la sala " + roomName +
|
||||||
|
". No se han podido obtener sus datos.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Creamos el Statement.
|
||||||
|
Statement stt = CrearStatement();
|
||||||
|
|
||||||
|
//Subimos la sala a la DB.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
stt.executeUpdate("update salas set sala_data = '" + roomJSON + "' " +
|
||||||
|
"where nombre = '" + roomName + "' and " +
|
||||||
|
"id_partida = " + idPartida + ";");
|
||||||
|
} catch (SQLException e)
|
||||||
|
{
|
||||||
|
Gdx.app.error("dbConnector", "No se ha podido actualizar la sala " + roomName);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Al terminar, cerramos el Statement.
|
||||||
|
CerrarStatement(stt);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtiene los datos de una partida del usuario indicado.
|
||||||
|
* @param username Nombre del usuario.
|
||||||
|
* @return Datos de la partida del usuario.
|
||||||
|
*/
|
||||||
|
public static Save GetSaveDataFromDB(String username)
|
||||||
|
{
|
||||||
|
int idPartidaUser = GetIDPartidaFromDB(username);
|
||||||
|
|
||||||
|
//Creamos el statement.
|
||||||
|
Statement stt = CrearStatement();
|
||||||
|
|
||||||
|
Save s = new Save();
|
||||||
|
//Obtenemos el dinero.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ResultSet rs = stt.executeQuery("select dinero from partidas where " +
|
||||||
|
"id = " + idPartidaUser + " and " +
|
||||||
|
"nickname_usuario = '" + username + "';");
|
||||||
|
s.dinero = rs.getInt(0);
|
||||||
|
} catch (SQLException e)
|
||||||
|
{
|
||||||
|
Gdx.app.error("dbConnector", "No se ha podido cargar la partida del usuario " + username);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Obtenemos las salas.
|
||||||
|
|
||||||
|
//TODO: Completar la carga del Save.
|
||||||
|
// Supongo que también cargará las salas de ese save.
|
||||||
|
|
||||||
|
|
||||||
|
CerrarStatement(stt);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String GetRoomDataFromDB(String roomName)
|
||||||
|
{
|
||||||
|
//Obtenemos los datos necesarios.
|
||||||
|
int idPartida = GetIDPartidaFromDB();
|
||||||
|
|
||||||
|
//Creamos el Statement.
|
||||||
|
Statement stt = CrearStatement();
|
||||||
|
|
||||||
|
//Obtenemos el JSON de la sala desde la DB.
|
||||||
|
String datosJSON = "";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ResultSet rs = stt.executeQuery("select sala_data from salas where" +
|
||||||
|
"nombre = '" + roomName + "', " +
|
||||||
|
"id_partida = " + idPartida + ";");
|
||||||
|
datosJSON = rs.getString(0);
|
||||||
|
} catch (SQLException e)
|
||||||
|
{
|
||||||
|
Gdx.app.error("dbConnector", "No se han podido obtener los datos de la " + roomName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return datosJSON;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crea un nuevo Statement a partir de la conexión y lo devuelve.
|
||||||
|
* @return Statement creado.
|
||||||
|
*/
|
||||||
|
private static Statement CrearStatement()
|
||||||
|
{
|
||||||
|
Statement stt = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
stt = connect.createStatement();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
System.err.println("No ha sido posible comunicarse con la BD.");
|
||||||
|
}
|
||||||
|
return stt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CUIDADO!! Al cerrar Statement, se rompen los datos de ResultSet.
|
||||||
|
* @param sttCerrar Statement que se quiere cerrar.
|
||||||
|
*/
|
||||||
|
private static void CerrarStatement(Statement sttCerrar)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sttCerrar.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
System.err.println("No se ha podido cerrar el Statement.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user