Bueno estaba haciendo el tres en Raya (Ejercicio Deitel)
Tengo unos problemas:
Clase "Tres en Raya"(reglas basicas del juego)
Código Java:
Ver originalpackage 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
public String dibujarTablero
(){ 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 originalpackage 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{
}while (posX>3);
do{
}while (posY>3);
if (tablero[posX][posY]!=0){
JOptionPane.
showMessageDialog(null,
"JUGADOR 1: ingreso una posicion no valida, intente de nuevo"); }else{
tablero[posX][posY]=j1;
movPosible=true;
}
}while(!movPosible);
Juego.areaSalida.setText(dibujarTablero());
cambiarJugador();
juegoTerminado();
}else{
movPosible=false;
do{
do{
}while (posX>3);
do{
}while (posY>3);
if (tablero[posX][posY]!=0){
JOptionPane.
showMessageDialog(null,
"JUGADOR 2: ingreso una posicion no valida, intente de nuevo"); }else{
tablero[posX][posY]=j2;
movPosible=true;
}
}while(!movPosible);
Juego.areaSalida.setText(dibujarTablero());
cambiarJugador();
juegoTerminado();
}
}while(enJuego==true);
JOptionPane.
showMessageDialog(null,
"Felicidades! JUGADOR "+Ganador
); }
//para jugador vs Maquina
public void UnJugador(){
tabla=dibujarTablero();
int posX;
int posY;
boolean movPosible;
do{
if(turno1){
movPosible=false;
do{
do{
}while (posX>3);
do{
}while (posY>3);
if (tablero[posX][posY]!=0){
JOptionPane.
showMessageDialog(null,
"JUGADOR 1: ingreso una posicion no valida, intente de nuevo"); }else{
tablero[posX][posY]=j1;
movPosible=true;
}
}while(!movPosible);
Juego.areaSalida.setText(dibujarTablero());
cambiarJugador();
juegoTerminado();
}else{
movPosible=false;
do{
posX
=(int)(Math.
random()*2); posY
=(int)(Math.
random()*2); if (tablero[posX][posY]!=0){
break;
}else{
tablero[posX][posY]=j2;
movPosible=true;
Juego.areaSalida.setText(dibujarTablero());
cambiarJugador();
juegoTerminado();
}
}while(!movPosible);
}
}while(enJuego==true);
JOptionPane.
showMessageDialog(null,
"Felicidades! JUGADOR "+Ganador
); }
}
Clase "Juego"
Código Java:
Ver originalpackage 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
=new JButton("Nuevo Juego"); nuevoJuego.addActionListener(this);
nuevoJuego.setVisible(true);
contenedor.add(nuevoJuego);
dosJug
=new JButton("Dos Jugadores"); 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 (salir
==evt.
getSource()){System.
exit(0);}
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