Tengo unos problemas:
Clase "Tres en Raya"(reglas basicas del juego)
Código Java:
Ver original
package ochoOnce; public class TresEnRaya { //tablero del juego int tablero[][]=new int[3][3]; int j1=1; int j2=2; boolean turno1=true; boolean enJuego=true; int Ganador; //metodo inicializar tablero en 0; public void inicializarTablero(){ for(int i=0;i<tablero.length;i++){ for (int j=0;i<tablero.length;i++){ tablero[i][j]=0; } }//fin de for }//fin de "inicializarTablero //Dibujar Tablero en String para el JTextArea tImpreso=""; tImpreso+=tablero[0][0]+"\t"+tablero[0][1]+"\t"+tablero[0][2]+"\n\n\n"; tImpreso+=tablero[1][0]+"\t"+tablero[1][1]+"\t"+tablero[1][2]+"\n\n\n"; tImpreso+=tablero[2][0]+"\t"+tablero[2][1]+"\t"+tablero[2][2]+"\n\n\n"; return tImpreso; } //Metodo para Cambiar automaticamente de jugador 1 a jugador 2 public void cambiarJugador(){ if (turno1){ turno1=false; }else{ turno1=true; } } //Verificia si el tablero recibio un "tres en raya" public void juegoTerminado(){ if((tablero[0][0]==1 && tablero[0][1]==1 && tablero[0][2]==1)||(tablero[1][0]==1 && tablero[1][1]==1 && tablero[1][2]==1)||(tablero[2][0]==1 && tablero[2][1]==1 && tablero[2][2]==1)||(tablero[0][0]==1 && tablero[1][0]==1 && tablero[2][0]==1)||(tablero[0][1]==1 && tablero[1][1]==1 && tablero[2][1]==1)||(tablero[0][2]==1 && tablero[1][2]==1 && tablero[2][2]==1)||(tablero[0][0]==1 && tablero[1][1]==1 && tablero[2][2]==1)||(tablero[2][0]==1 && tablero[1][1]==1 && tablero[0][2]==1)){ enJuego=false; Ganador=1; } if((tablero[0][0]==2 && tablero[0][1]==2 && tablero[0][2]==2)||(tablero[1][0]==2 && tablero[1][1]==2 && tablero[1][2]==2)||(tablero[2][0]==2 && tablero[2][1]==2 && tablero[2][2]==2)||(tablero[0][0]==2 && tablero[1][0]==2 && tablero[2][0]==2)||(tablero[0][1]==2 && tablero[1][1]==2 && tablero[2][1]==2)||(tablero[0][2]==2 && tablero[1][2]==2 && tablero[2][2]==2)||(tablero[0][0]==2 && tablero[1][1]==2 && tablero[2][2]==2)||(tablero[2][0]==2 && tablero[1][1]==2 && tablero[0][2]==2)){ enJuego=false; Ganador=2; } }//fin de juego terminado() }
Clase "InitJuego"(determina cuantos jugadores)
Código Java:
Ver original
package ochoOnce; import javax.swing.JOptionPane; public class InitJugadores extends TresEnRaya{ //dibujar String para Juego.AreaSalida //Para jugador vs Jugador public void dosJugadores() { tabla=dibujarTablero(); int posX; int posY; boolean movPosible; do{ if(turno1){ movPosible=false; do{ do{ posX=((Integer.parseInt((String) JOptionPane.showInputDialog(null,"JUGADOR 1: que fila elige: ","",JOptionPane.INFORMATION_MESSAGE,null,new String[]{"1","2","3"},"1")))-1); }while (posX>3); do{ posY=((Integer.parseInt((String) JOptionPane.showInputDialog(null,"JUGADOR 1: que columna elige:","",JOptionPane.INFORMATION_MESSAGE,null,new String[]{"1","2","3"},"1")))-1); }while (posY>3); if (tablero[posX][posY]!=0){ }else{ tablero[posX][posY]=j1; movPosible=true; } }while(!movPosible); Juego.areaSalida.setText(dibujarTablero()); cambiarJugador(); juegoTerminado(); }else{ movPosible=false; do{ do{ posX=((Integer.parseInt((String) JOptionPane.showInputDialog(null,"JUGADOR 2: que fila elige: ","",JOptionPane.INFORMATION_MESSAGE,null,new String[]{"1","2","3"},"1")))-1); }while (posX>3); do{ posY=((Integer.parseInt((String) JOptionPane.showInputDialog(null,"JUGADOR 2: que columna elige:","",JOptionPane.INFORMATION_MESSAGE,null,new String[]{"1","2","3"},"1")))-1); }while (posY>3); if (tablero[posX][posY]!=0){ }else{ tablero[posX][posY]=j2; movPosible=true; } }while(!movPosible); Juego.areaSalida.setText(dibujarTablero()); cambiarJugador(); juegoTerminado(); } }while(enJuego==true); } //para jugador vs Maquina public void UnJugador(){ tabla=dibujarTablero(); int posX; int posY; boolean movPosible; do{ if(turno1){ movPosible=false; do{ do{ posX=((Integer.parseInt((String) JOptionPane.showInputDialog(null,"JUGADOR 1: que fila elige: ","",JOptionPane.INFORMATION_MESSAGE,null,new String[]{"1","2","3"},"1")))-1); }while (posX>3); do{ posY=((Integer.parseInt((String) JOptionPane.showInputDialog(null,"JUGADOR 1: que columna elige:","",JOptionPane.INFORMATION_MESSAGE,null,new String[]{"1","2","3"},"1")))-1); }while (posY>3); if (tablero[posX][posY]!=0){ }else{ tablero[posX][posY]=j1; movPosible=true; } }while(!movPosible); Juego.areaSalida.setText(dibujarTablero()); cambiarJugador(); juegoTerminado(); }else{ movPosible=false; do{ if (tablero[posX][posY]!=0){ break; }else{ tablero[posX][posY]=j2; movPosible=true; Juego.areaSalida.setText(dibujarTablero()); cambiarJugador(); juegoTerminado(); } }while(!movPosible); } }while(enJuego==true); } }
Clase "Juego"
Código Java:
Ver original
package ochoOnce; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JTextArea; //Parte Grafica JButton salir,dosJug,unJug,nuevoJuego; //Inicializo las dos Clases (no entiendo por que, si pongo extends deberia iniciar solo una TresEnRaya uno=new TresEnRaya(); InitJugadores dos=new InitJugadores(); //Inicializar la parte Grafica public void init(){ areaSalida.setEditable(false); areaSalida.setVisible(true); contenedor.add(areaSalida); nuevoJuego.addActionListener(this); nuevoJuego.setVisible(true); contenedor.add(nuevoJuego); dosJug.addActionListener(this); dosJug.setVisible(false); contenedor.add(dosJug); unJug.addActionListener(this); unJug.setVisible(false); contenedor.add(unJug); salir.addActionListener(this); salir.setVisible(true); contenedor.add(salir); } //Ejecutar public void paint(){showStatus("si no pongo esto, no anda");} //accion de los botones @Override if (nuevoJuego==evt.getSource()){ dos.tabla=""; uno.inicializarTablero(); areaSalida.setText(uno.dibujarTablero()); unJug.setVisible(true); dosJug.setVisible(true); nuevoJuego.setVisible(false); } if (dosJug==evt.getSource()){ uno.inicializarTablero(); areaSalida.setText(uno.dibujarTablero()); dos.dosJugadores(); nuevoJuego.setVisible(true); unJug.setVisible(false); dosJug.setVisible(false); } if (unJug==evt.getSource()){ uno.inicializarTablero(); areaSalida.setText(uno.dibujarTablero()); dos.UnJugador(); nuevoJuego.setVisible(true); unJug.setVisible(false); dosJug.setVisible(false); } } }
Bueno el juego inicializa, al hacer click en nuevo juego salen las oopciones (1 jugador) y (2 jugadores)
1* Cuando le pongo 1 jugador va perfecto de hecho finaliza bien pero al poner nuevo juego, inicializa e imprime el tablero en 0, sin embargo al jugar tira movimiento no posible en una posicion 0 cualquiera.
2* Cuando juego con la maquina, si no termino en 3 movimientos el juego, el juego se tilda, no avanza.
(EDIT: ya lo solucione el punto 2)
supongo que el codigo es inentendible, son mis primeros pasos en oop :P si ven algo conceptualmente mal hecho, me dicen :P
gracias y disculpen las molestias