Skip to content

Commit

Permalink
Options to main
Browse files Browse the repository at this point in the history
Sistema usuario
  • Loading branch information
delfi-fenoy authored Nov 15, 2024
2 parents 3bed195 + e83079b commit 4295691
Show file tree
Hide file tree
Showing 13 changed files with 189 additions and 123 deletions.
4 changes: 4 additions & 0 deletions src/exceptions/InvalidUsernameOrPasswordException.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@ public class InvalidUsernameOrPasswordException extends Exception {
public InvalidUsernameOrPasswordException() {
super("Nombre de usuario o contraseña inválidos.");
}

public InvalidUsernameOrPasswordException(String message) {
super(message);
}
}
7 changes: 7 additions & 0 deletions src/exceptions/SamePasswordException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package exceptions;

public class SamePasswordException extends RuntimeException {
public SamePasswordException() {
super("La contraseña nueva debe ser diferente a la actual.");
}
}
2 changes: 1 addition & 1 deletion src/gameState/GameState.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ public enum GameState {

PLAYING, MENU, OPTIONS, RANKING, QUIT, REGISTER, LOGIN;

public static GameState state = MENU; // Estado por default.
public static GameState state = LOGIN; // Estado por default.

}
42 changes: 21 additions & 21 deletions src/gameState/Login.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
import javax.swing.*;
import java.awt.*;

import static utilz.Constants.ANI_ERROR_MESSAGE;

public class Login extends UserAccount {
// ====================> ATRIBUTOS <====================
// Botones
Expand Down Expand Up @@ -50,7 +48,7 @@ public void initUI(){
userIDLabel = new JLabel("");
userPasswordLabel = new JLabel("");

backButton.setText("Register");
backButton.setText("Register"); // Cambiar etiqueta de boton de "Back" a "Register"

// Botones
quitButton.setBackground(new Color(116, 9, 56));
Expand Down Expand Up @@ -87,34 +85,35 @@ public void addComponents(){

@Override
public void addEventListeners(){
loginButton.addActionListener(e -> {
System.out.println(game.getJsonUserManager().fileToUsers());
login();
});
quitButton.addActionListener(e -> GameState.state = GameState.QUIT);
loginButton.addActionListener(e -> login());
quitButton.addActionListener(e -> GameState.state = GameState.QUIT); // Salir del juego
backButton.addActionListener(e ->{ // Register button
game.getGamePanel().removeAll();
flagAddComponents = false;
clearFields();
GameState.state = GameState.REGISTER;
game.getGamePanel().removeAll(); // Remover los componentes de la pantalla
flagAddComponents = false; // Para que cuando vuelva a LOGIN pueda entrar a addComponents
clearFields(); // Limpiar los fields
GameState.state = GameState.REGISTER; // Ir a Register
});
}

/** login() ==> Loguear usuario. Se realiza la comprobación del nombre de usuario y su contraseña.
* Si el nombre de usuario y la contraseña coinciden con los datos almacenados,
* el usuario se autentica correctamente y se le da acceso al menú del juego. */
public void login(){
String name = userIDField.getText();
String password = new String(userPasswordField.getPassword());
String name = userIDField.getText(); // Leer nombre de usuario
String password = new String(userPasswordField.getPassword()); // Leer contraseña

try {
if(name.isBlank() || password.isBlank() || name.length() >20 || password.length() >20) { // Si esta vacio o es >20
throw new InvalidUsernameOrPasswordException();
} else if(!game.getJsonUserManager().verifyUserInfo(new User(name, password))){

} else if(!game.getJsonUserManager().verifyUserInfo(new User(name, password))){ // Si el nombre y/o contraseña no son correctos
throw new NonexistentUserException();
}

game.getGamePanel().removeAll();
flagAddComponents = false;
game.setUserInGame(new User(name, password));
GameState.state = GameState.MENU;
game.getGamePanel().removeAll(); // Borrar componentes de pantalla
flagAddComponents = false; // Para que cuando vuelva a REGISTER pueda entrar a addComponents
game.setUserInGame(game.getJsonUserManager().getUser(name)); // Asigna al jugador activo en el juego según su nombre
GameState.state = GameState.MENU; // Ir a menú

} catch (InvalidUsernameOrPasswordException e){ // Excepcion si name o password estan vacios o >20
e.getMessage();
Expand Down Expand Up @@ -142,8 +141,8 @@ public void clearFields(){
public void update() {
super.update();

if(showMessage != 0){
messageCounter(this);
if(showMessage != 0){ // Si showMessage es distinto de 0, entonces se debe mostrar un mensaje
messageCounter(this); // Llamar contador de mensaje
}
}

Expand All @@ -152,6 +151,7 @@ public void draw(Graphics g) {
// Fondo y Titulo
LoadSave.drawTitleBackgroud(g,LOGIN_BACKGROUD);

// Mensajes de error
if(showMessage != 0){
g.setColor(Color.DARK_GRAY);
g.fillRect(40, 250, 410, 25); // Rectangulo Negro
Expand Down
98 changes: 70 additions & 28 deletions src/gameState/Option.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package gameState;

import exceptions.InvalidUsernameOrPasswordException;
import exceptions.NonexistentUserException;
import exceptions.SamePasswordException;
import exceptions.UsernameUnavailableException;
import main.Game;
import users.User;
import utilz.LoadSave;

import javax.swing.*;
Expand Down Expand Up @@ -33,9 +33,6 @@ public Option(Game game) {
}

// ====================> SET/GET <====================
public void setShowMessage(int showMessage) {
this.showMessage = showMessage;
}

// ====================> METODOS <====================
@Override
Expand All @@ -44,7 +41,7 @@ public void initUI(){
// Instanciar
confirmUsernameButton = new JButton("Confirm");
confirmPasswordButton = new JButton("Confirm");
userIDField = new JTextField();
userIDField = new JTextField("");
userPasswordField = new JPasswordField();
userIDLabel = new JLabel("");
userPasswordLabel = new JLabel("");
Expand Down Expand Up @@ -87,39 +84,41 @@ public void addComponents(){

@Override
public void addEventListeners(){
confirmUsernameButton.addActionListener(e -> login());
confirmPasswordButton.addActionListener(e -> login());
confirmUsernameButton.addActionListener(e -> changeUsername()); // Cambiar nombre de usuario
confirmPasswordButton.addActionListener(e -> changePassword()); // Cambiar contraseña

backButton.addActionListener(e ->{ // Register button
game.getGamePanel().removeAll();
flagAddComponents = false;
clearFields();
GameState.state = GameState.MENU;
game.getGamePanel().removeAll(); // Remover los componentes de la pantalla
flagAddComponents = false; // Para que cuando vuelva a OPTIONS pueda entrar a addComponents
clearFields(); // Limpiar los fields
GameState.state = GameState.MENU; // Ir a menú
});
}

public void login(){
String name = userIDField.getText();
String password = new String(userPasswordField.getPassword());

/** changeUsername() ==> Método para cambiar nombre de usuario. Se comprueba que sea válido e inexistente
* y se lo guarda en el archivo en caso de cumplir con las validaciones.*/
public void changeUsername(){
String newName = userIDField.getText(); // Leer nombre de usuario nuevo

try {
if(name.isBlank() || password.isBlank() || name.length() >20 || password.length() >20) { // Si esta vacio o es >20
throw new InvalidUsernameOrPasswordException();
} else if(!game.getJsonUserManager().verifyUserInfo(new User(name, password))){
throw new NonexistentUserException();
if(newName.isBlank() || newName.length() >20){ // En caso de estar vacío o ser >20
throw new InvalidUsernameOrPasswordException("Nombre de usuario inválido.");

} else if (!game.getJsonUserManager().isUsernameAvailable(newName)) { // En caso que el nombre no esté disponible
throw new UsernameUnavailableException();
}

game.getGamePanel().removeAll();
flagAddComponents = false;
game.setUserInGame(new User(name, password));
GameState.state = GameState.MENU;
String oldName = game.getUserInGame().getName(); // Guardar nombre anterior
game.getUserInGame().setName(newName); // Modificar nombre en UserInGame
game.getJsonUserManager().overwriteUserName(game.getUserInGame(), oldName); // Guardar cambios en archivo
showMessage = 3; // Indice de mensaje de confirmación

} catch (InvalidUsernameOrPasswordException e){ // Excepcion si name o password estan vacios o >20
} catch (InvalidUsernameOrPasswordException e){ // Excepción en caso de nombre invalido
e.getMessage();
e.printStackTrace();
showMessage = 1;

} catch (NonexistentUserException e){ // Excepcion si el nombre de usuario y/o contraseña son incorrectos
} catch (UsernameUnavailableException e){ // Excepcion en caso de nombre existente en archivo
e.getMessage();
e.printStackTrace();
showMessage = 2;
Expand All @@ -129,6 +128,38 @@ public void login(){
}
}

/** changePassword() ==> Método para cambiar contraseña. Se comprueba que sea válida y diferente a la actual
* y se la guarda en el archivo en caso de cumplir con las validaciones. */
public void changePassword(){
String newPassword = new String(userPasswordField.getPassword()); // Leer contraseña nueva

try {
if(newPassword.isBlank() || newPassword.length() >20){ // En caso de estar vacía o >20
throw new InvalidUsernameOrPasswordException("Contraseña inválida.");

} else if (game.getUserInGame().getPassword().equals(newPassword)) { // En caso que sea la misma que la actual
throw new SamePasswordException();
}

game.getUserInGame().setPassword(newPassword); // Modificar password de user
game.getJsonUserManager().overwriteUser(game.getUserInGame()); // Guardar cambios en archivo
showMessage = 6; // Indice de mensaje de confirmacion

} catch (InvalidUsernameOrPasswordException e){ // Excepcion de contraseña invalida
e.getMessage();
e.printStackTrace();
showMessage = 4;

} catch (SamePasswordException e){ // Excepcion de misma contraseña que la actual
e.getMessage();
e.printStackTrace();
showMessage = 5;

} finally {
clearFields();
}
}

@Override
public void clearFields(){
userIDField.setText("");
Expand Down Expand Up @@ -156,9 +187,20 @@ public void draw(Graphics g) {
g.setFont(new Font("Console", Font.BOLD, 12));
g.setColor(Color.RED);

// Mensajes de error o confirmación
switch (showMessage) {
case 1 -> g.drawString("Nombre de usuario y/o contraseña inválidos.", 120, 567);
case 2 -> g.drawString("Nombre de usuario y/o contraseña incorrectos.", 120, 567);
case 1 -> g.drawString("Nombre de usuario inválido.", 120, 567);
case 2 -> g.drawString("Nombre de usuario existente.", 120, 567);
case 3 -> {
g.setColor(Color.GREEN);
g.drawString("Nombre de usuario modificado con éxito.", 120, 567);
}
case 4 -> g.drawString("Contraseña inválida.", 120, 567);
case 5 -> g.drawString("La contraseña nueva debe ser diferente a la actual.", 120, 567);
case 6 -> {
g.setColor(Color.GREEN);
g.drawString("Contraseña modificada con éxito.", 120, 567);
}
}
}

Expand Down
10 changes: 5 additions & 5 deletions src/gameState/Playing.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,13 @@ public void nextLevel(){

/** endLevel() ==> Termina la partida y regresa todo a 0.*/
public void endLevel(){
if(gameOver) {
if (game.getUserInGame().getBestScore() < score) {
game.getUserInGame().setBestScore(score);
game.getJsonUserManager().overwriteUser(game.getUserInGame());
if(gameOver) { // Cuando el usuario pierda la partida
if (game.getUserInGame().getBestScore() < score) { // Si el puntaje actual supera su puntaje mas alto
game.getUserInGame().setBestScore(score); // Settea su nuevo bestScore
game.getJsonUserManager().overwriteUser(game.getUserInGame()); // Guarda los cambios en el archivo
}
}

// Reseta valores del juego
score = 0;
player.lives = 3;
currentLevel = "easy";
Expand Down
34 changes: 15 additions & 19 deletions src/gameState/Register.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;

import static utilz.Constants.ANI_ERROR_MESSAGE;
import static utilz.LoadSave.*;

public class Register extends UserAccount {
Expand Down Expand Up @@ -43,8 +41,6 @@ public void setShowMessage(int showMessage){
}

// ====================> METODOS <====================

/** initUI ==> Instanciar los componentes. */
@Override
public void initUI(){
super.initUI();
Expand Down Expand Up @@ -81,10 +77,8 @@ public void initUI(){
userIDField.setBounds(140, 350, 200, 25);
userPasswordField.setBounds(140, 450, 200, 25);
confirmPasswordField.setBounds(140, 550, 200, 25);

}

/** addComponents() ==> Agregar los componentes al GamePanel. */
@Override
public void addComponents(){
super.addComponents();
Expand All @@ -103,20 +97,21 @@ public void addComponents(){
@Override
public void addEventListeners(){
registerButton.addActionListener(e -> registerUser());
quitButton.addActionListener(e -> GameState.state = GameState.QUIT);
quitButton.addActionListener(e -> GameState.state = GameState.QUIT); // Salir del juego
backButton.addActionListener(e -> {
game.getGamePanel().removeAll();
flagAddComponents = false; // Para que cuando vuelva a REGISTER entre a addComponents
clearFields();
GameState.state = GameState.LOGIN;
game.getGamePanel().removeAll(); // Remover los componentes de la pantalla
flagAddComponents = false; // Para que cuando vuelva a REGISTER pueda entrar a addComponents
clearFields(); // Limpiar los fields
GameState.state = GameState.LOGIN; // Volver al Login
});
}

/** registerUser() ==> Registrar usuario. */
/** registerUser() ==> Registrar usuario. Se ingresa nombre de usuario y contraseña, se hace su comprobación y,
* en caso de ser válidos, se los guarda en el archivo. */
public void registerUser(){
String name = userIDField.getText(); // Leer nombre
String password = new String(userPasswordField.getPassword()); // Leer contraseña
String confirmPassword = new String(confirmPasswordField.getPassword());
String confirmPassword = new String(confirmPasswordField.getPassword()); // Confirmar contraseña

try {
if(name.isBlank() || password.isBlank() || confirmPassword.isBlank()
Expand All @@ -126,7 +121,7 @@ public void registerUser(){
} else if (!game.getJsonUserManager().isUsernameAvailable(name)) { // Si el nombre de usuario ya existe
throw new UsernameUnavailableException();

} else if (!confirmPassword.equals(password)) { // Si las contrseñas (password y confirmPassword) no coinciden
} else if (!confirmPassword.equals(password)) { // Si las contraseñas (password y confirmPassword) no coinciden
throw new PasswordMismatchException();
}

Expand All @@ -136,7 +131,7 @@ public void registerUser(){
flagAddComponents = false; // Para que cuando vuelva a REGISTER pueda entrar a addComponents
GameState.state = GameState.LOGIN; // Cambiar de state

} catch (InvalidUsernameOrPasswordException e){ // Excepcion si name o password esta vacio y mas de 20 caracteres
} catch (InvalidUsernameOrPasswordException e){ // Excepcion si name o password esta vacio o con mas de 20 caracteres
e.getMessage();
e.printStackTrace();
showMessage = 1;
Expand All @@ -146,13 +141,13 @@ public void registerUser(){
e.printStackTrace();
showMessage = 2;

} catch (PasswordMismatchException e){
} catch (PasswordMismatchException e){ // Excepcion si las contraseñas no coiniciden
e.getMessage();
e.printStackTrace();
showMessage = 3;

} finally {
clearFields();
clearFields(); // Borrar lo escrito en los fields
}
}

Expand All @@ -169,8 +164,8 @@ public void clearFields(){
public void update() {
super.update();

if(showMessage != 0){
messageCounter(this);
if(showMessage != 0){ // Si showMessage es distinto de 0, entonces se debe mostrar un mensaje
messageCounter(this); // Llamar contador de mensaje
}
}

Expand All @@ -187,6 +182,7 @@ public void draw(Graphics g) {
g.drawString("Password", 180, 440);
g.drawString("Confirm Password", 130, 540);

// Mensajes a mostrar
if(showMessage != 0){
g.setColor(Color.DARK_GRAY);
g.fillRect(40, 250, 410, 25); // Rectangulo Negro
Expand Down
Loading

0 comments on commit 4295691

Please sign in to comment.