Hola, soy nuevo en el mundo de la programación y novato en java, estoy haciendo un proyecto pequeño y llevo estancado en un punto dos días.
Mi aplicación es de dos jugadores y tiene tres niveles, y quiero que mientras se pulse el botón de pasar turno menos o igual de 5 veces se ejecute la interfaz del jugador 2, pero si el boton ha sido pulsado mas de 5 veces que ejecute la interfaz de el nivel 2. No se cómo hacerlo.
Mi idea fue:
public class NivelUno extends JFrame implements ActionListener{
private JButton boton1;
int a = 0;
int b = 0;
int c = 0;
public NivelUno(){
boton1 = new JButton("PASAR TURNO");
}
int a = 0;
int b = 0;
int c = 0;
public void actionPerformed(ActionEvent e){
if(e.getSource() == boton1){
a++;
c = a + b;
b = c;
if(b <= 5){
NivelUno2 niveluno2 = new NivelUno2();
niveluno2.setBounds(0,0,300,650);
niveluno2.setVisible(true);
niveluno2.setResizable(false);
niveluno2.setLocationRelativeTo(null);
this.setVisible(false);
}
if(b > 5){
NivelDos niveldos1 = new NivelDos();
niveldos1.setBounds(0,0,300,650);
niveldos1.setVisible(true);
niveldos1.setResizable(false);
niveldos1.setLocationRelativeTo(null);
this.setVisible(false);
}
}
}
public static void main(String args[]){
NivelUno niveluno1 = new NivelUno();
niveluno1.setBounds(0,0,300,650);
niveluno1.setVisible(true);
niveluno1.setResizable(false);
niveluno1.setLocationRelativeTo(null);
}
}
El problema es que creo que cuando pasa a la interfaz del jugador 2 los valores re reinician a 0 y siempre es el mismo valor, he probado todas las combinaciones posibles y no puedo seguir adelante, agradecería mucho que me ayudarais!!!
No soy ningun experto tampoco. De hecho, aun estoy aprendiendo como programar en Java y ya estoy yo tambien preguntando por el foro algunas cosillas.
Por lo que veo en tu ejemplo, solo defines la clase "NivelUno". Pero despues haces uso de la clase "NivelUno", "NivelUno2" y "NivelDos1".
Entiendo que por usar un ejemplo y no tu codigo final se te haya pasado por alto.
Despues me pregunto: ¿Cuando se llama a "actionPerformed()"?
Si se llama cada vez que pulsas el boton lo que ocurre es que vuelves a iniciar una nueva clase "NivelUno" con los valores y el contador de pulsaciones a 0.
Mi sugerencia es que hagas que el constructor de "NivelUno" acepte un entero como argumento y lo apliques al contador. Al iniciar en "main()" lo haces con 0. Al pulsar sobre el boton, sumale 1 al contador y haz la nueva pantalla (o clase) pasando el contador.
Prueba algo así:
public class NivelUno {
private JButton boton1;
int a=0, b=0,c=0;
public NivelUno(int contador) {
this.b = contador;
}
public NivelUno() {
}
public actionPerformed(ActionEvent event) {
a++;
c = a+b;
b = c;
if (b <= 5) {
NivelUno nivelUno2 = new NivelUno(b); // Aqui paso el contador en su estado actual a la proxima pantalla.
niveluno2.setBounds(0,0,300,650);
niveluno2.setVisible(true);
niveluno2.setResizable(false);
niveluno2.setLocationRelativeTo(null);
this.setVisible(false);
}
else if (b > 5) {
NivelDos nivelDos = new NivelDos();
nivelDos.setBounds(0,0,300,650);
nivelDos.setVisible(true);
nivelDos.setResizable(false);
nivelDos.setLocationRelativeTo(null);
this.setVisible(false);
}
}
}
public class NivelDos {
}
public static void main() {
NivelUno nivelUno1 = new NivelUno(0);
niveluno1.setBounds(0,0,300,650);
niveluno1.setVisible(true);
niveluno1.setResizable(false);
niveluno1.setLocationRelativeTo(null);
}
Nota tambien que al haber sobrecargado el constructor de la clase "NivelUno" puedes sustituir la linea "NivelUno nivelUno1 = new NivelUno(0);" de "main()" por esta otra "NivelUno nivelUno1 = new NivelUno();".
Otra cosa: No entiendo porque haces las operaciones con "a", "b" y "c". Supongo que algo tendrán que ver con tu proyecto, por eso lo dejo como estaba, pero tal vez quieras poner un constructor extra como el siguiente a la clase para mantener los valores al cambiar de pantalla (o clase).
public NivelUno(int rA, int rB, int rC) {
this.a = rA;
this.b = rB;
this.c = rC;
}
Y solo tendrías que cambiar "NivelUno nivelUno2 = new NivelUno(b);" por "NivelUno nivelUno2 = new NivelUno(a, b, c);".
Espero que te sirva. Suerte.