Java - Error en traspaso de objetos en un juego

 
Vista:

Error en traspaso de objetos en un juego

Publicado por baggio (4 intervenciones) el 10/11/2006 23:44:49
Hola ¿como están?
Es mi primer mensaje en este foro, lamentablemente comenzare con una consulta que me tiene trabado en un pequeño juego que estoy haciendo en JAVA con Jcreator. Comencé hace 2 semanas con JAVA y le presento mi problema a continuación:
Lo que pasa es que estoy haciendo el juego del ahorcado, aquel en donde se genera una palabra al azar y luego el usuario tiene que teclear una letra tratando de adivinar la palabra completa.
Estoy haciéndolo con interfaz gráfica y es acá mi problema. Resulta que el programa posee 4 clases, una clase ventanasimple, que es donde creo el view del programa, es decir los botones, textos de entrada,etc. Otra clase es la diccionario, la cual contiene las palabras que se generaran al azar con un método llamado obtenerpalabra. Una clase llamada juego, que tiene como parámetros, palabra que es la que recibe el resultado de la palabra retornada del diccionario en un stringBuffer, ademas de la variable incógnita que es la que se muestra en pantalla con esas típicas rayitas con espacio entre medio y por ultimo la variable erradas, que contiene la cantidad de jugadas que restan antes de perder.La otra clase es la clase oyenteaccion, que es donde relaciono los botones(botonOK ,botonNuevoJuego y textodeentrada) con eventos, es justamente acá donde tengo el problema. El problema radica en que al asignarle una acción cuando se presiona el botonNuevo juego, tengo que crear un objeto juego mijuego=new juego();
también un objeto Diccionario Diccionario miDiccionario=new Diccionario();
para obtener la palabra al azar y almacenarla en juego.palabra mijuego.palabra=miDiccionario.obtenerPalabra(); Bueno esto mismo lo tengo que hacer al presionar el botonOK, que es cuando ingresa una letra,ya que si no genero un nuevo objeto de tipo diccionario y objeto, no me toma la variables del diccionario que estan dentro del if de cuando se presiona el botonOK por lo que genera una nueva palabra y todo se me sale de las manos. Por eso quería pedir si alguien me puede dar una mano, ya que en eso estoy trabado y siempre es bueno tener una mirada externa que lo oriente.

Pondré el código, aunque les adelanto que soy novato, muy novato , así que de modularidad ,elegancia ni hablar, ya que el programa esta en pañales y aun estoy en etapas de pruebas y con errores como el que les mencione.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error en traspaso de objetos en un juego

Publicado por roberto (4 intervenciones) el 10/11/2006 23:47:29
este es el codigo

[code]import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.*;
import java.util.*;//para usar clase vector
import java.awt.BorderLayout;

public class VentanaSimple11 extends JFrame
{
BorderLayout setLayout;
JLabel etiqueta,etiqueta2,etiqueta3,label,intentosRestantes;//etiqueta3 son las conjeturas
JButton botonNuevoJuego, botonQuit, botonOK;
JPanel panel,panel2,panel3;
JTextField EntradaCaracter = new JTextField(3);

//constructor de la clase VentanaSimple4
public VentanaSimple11()
{
//BorderLayout para delimitar el area de texto para las conjeturas
setLayout= (new BorderLayout(20,20));
botonOK = new JButton("OK");
botonNuevoJuego = new JButton("Nuevo Juego");
botonQuit = new JButton("Quit");
intentosRestantes = new JLabel("Intentos Restantes:");
panel = new JPanel();//en panel1 tendre las opciones para ingresar letras,salir,etc
panel.add(EntradaCaracter); // Agregamos el campo input
panel.add(botonOK);
panel.add(botonNuevoJuego);
panel.add(botonQuit);
panel.add(intentosRestantes);
getContentPane().add(panel, "South");
panel2 = new JPanel();//en panel 2 tendre las conjeturas
etiqueta2 = new JLabel("Conjetura:");
etiqueta3 = new JLabel(" ");
panel2.add(etiqueta2);
panel2.add(etiqueta3);
getContentPane().add(panel2, "East");
//panel 3 con la palabra a adivinar
//JFrame frame= new Jframe();
panel3 = new JPanel();//en panel 2 tendre las conjeturas
//panel3.getContentPane().setLayout(new BorderLayout());
JLabel label1=new JLabel("****En esta area WEST va el dibujo del Ahogado****");
panel3.add(label1, BorderLayout.WEST);
label = new JLabel(" ----->Pulsa en Nuevo Juego Para Jugar<-----");
panel3.add(label, BorderLayout.CENTER);
//statusBar = new JLabel();
getContentPane().add( label1, BorderLayout.WEST );
getContentPane().add( label, BorderLayout.CENTER );
//getContentPane().add(label, "Center");
OyenteAccion oyenteBoton = new OyenteAccion();
botonNuevoJuego.addActionListener(oyenteBoton);
botonQuit.addActionListener(oyenteBoton);
botonOK.addActionListener(oyenteBoton);
//para insertar incono en la esquina superior izquierda
Toolkit tk = Toolkit.getDefaultToolkit();
Image imagen = tk.getImage("ahogado2.jpg");
setIconImage(imagen);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error en traspaso de objetos en un juego

Publicado por roberto (4 intervenciones) el 10/11/2006 23:58:13
//continua el codigo ya que solo permite 10000 caracteres cada respuesta
//clase oyente en donde se le gatillan los eventos de acuerdo a los botones o textfield
class OyenteAccion implements ActionListener
{
public void actionPerformed (ActionEvent evento)
{
JButton boton = (JButton) evento.getSource();

//juego mijuego=new juego();
if (boton==botonQuit)
System.exit(0);
//si presiona el boton OK

else if (boton==botonNuevoJuego)//se tiene que resetear todo,incluso el dibujo
{
//mijuego.palabra="HOLA";
EntradaCaracter.setText("");//se resetea la entrada de letras
etiqueta3.setText("");//se resetea el area de las conjeturas
//escogemos una nueva palabra,creamos un objeto de la clase diccionario
juego mijuego=new juego();
Diccionario miDiccionario=new Diccionario();
mijuego.palabra=miDiccionario.obtenerPalabra();
int largo=mijuego.palabra.length();


//JOptionPane.showMessageDialog(null,"Ud.presiono:"+ mijuego.palabra);
//mijuego.incognita.setLength( largo*2 );
//mijuego.incognita=mijuego.palabra;
//mijuego.incognita.toString();
String rayita="_";
String linea="";
String espacio=" ";
JOptionPane.showMessageDialog(null,"Ud.presiono:"+ mijuego.palabra);
/*for (int i=0;i<=mijuego.palabra.length()-1;i++)
{
mijuego.incognita.setCharAt( i, '_' );

JOptionPane.showMessageDialog(null,"mijuegonicognita:"+ mijuego.palabra.charAt(i));
//linea=linea+rayita;
//espacio=espacio+rayita+" ";
}
//mijuego.incognita.toString();//paso a string el string buffer
label.setText("*");//escribo _ _ _ _ segun la palabra
//String miPalabra=miDiccionario.obtenerPalabra();*/
int i;
label.setText("");
//for para imprimir las rayitas de acuerdo al largo de la palabra escogida
JOptionPane.showMessageDialog(null,"Ud.presiono:"+ mijuego.palabra.charAt(0));
JOptionPane.showMessageDialog(null,"largo:"+ mijuego.palabra.length());
for (i=0;i<=mijuego.palabra.length()-1;i++)
{
//mijuego.incognita.setCharAt( i, '*' );
linea=linea+rayita;
espacio=espacio+rayita+" ";

//JOptionPane.showMessageDialog(null,"Ud.presiono:"+ linea.length());
JOptionPane.showMessageDialog(null,"Ud.presiono:"+ mijuego.palabra.charAt(i));
}

mijuego.incognita.append(espacio);
espacio=mijuego.incognita.toString();
label.setText(espacio);
//label.setText(""+linea.length());
//label.setText(miPalabra);
}
else if (boton==botonOK)
{
juego mijuego=new juego();
Diccionario miDiccionario=new Diccionario();
mijuego.palabra=miDiccionario.obtenerPalabra();
JOptionPane.showMessageDialog(null,"Debe Ingresar Una Letra"+mijuego.palabra.toString());
String miStr = EntradaCaracter.getText();//miStr toma el valor ingresado por el JtextField
//captura la excepcion cuando no ingresa nada
if ((miStr.length())==0) //si no ingreso caracter
{
JOptionPane.showMessageDialog(null,"Debe Ingresar Una Letra");
//JOptionPane.showMessageDialog(null,"Debe Ingresar Una Letra"+mijuego.palabra.toString());
EntradaCaracter.setText("");
}
//captura la excepcion cuando ingresa mas de un caracter
if ((miStr.length())>1) //si ingreso mas de un caracter
{
JOptionPane.showMessageDialog(null,"Debe Ingresar UNA Sóla Letra");
EntradaCaracter.setText("");
}
//captura la excepcion cuando es un caracter invalido
if ((miStr.length()==1) &&(((miStr.equalsIgnoreCase("a")==false) )&&((miStr.equalsIgnoreCase("b")==false) )&&((miStr.equalsIgnoreCase("c")==false) )&&((miStr.equalsIgnoreCase("d")==false) )&&((miStr.equalsIgnoreCase("e")==false) )&&((miStr.equalsIgnoreCase("f")==false) )&&((miStr.equalsIgnoreCase("g")==false) )&&((miStr.equalsIgnoreCase("h")==false) )&&((miStr.equalsIgnoreCase("i")==false) )&&((miStr.equalsIgnoreCase("j")==false) )&&((miStr.equalsIgnoreCase("k")==false) )&&((miStr.equalsIgnoreCase("l")==false) )
&&((miStr.equalsIgnoreCase("m")==false) )&&((miStr.equalsIgnoreCase("n")==false) )&&((miStr.equalsIgnoreCase("ñ")==false )&&((miStr.equalsIgnoreCase("o")==false) )&&((miStr.equalsIgnoreCase("p")==false) )&&((miStr.equalsIgnoreCase("q")==false) )&&((miStr.equalsIgnoreCase("r")==false) )&&((miStr.equalsIgnoreCase("s")==false) )&&((miStr.equalsIgnoreCase("t")==false) )&&((miStr.equalsIgnoreCase("u")==false) )&&((miStr.equalsIgnoreCase("v")==false) )&&((miStr.equalsIgnoreCase("w")==false) )&&((miStr.equalsIgnoreCase("x")==false) )&&((miStr.equalsIgnoreCase("y")==false) )&&((miStr.equalsIgnoreCase("z")==false) ) ))) //si ingreso mas de un caracter
{ //falta validar de si es o no una letra valida de a a z
JOptionPane.showMessageDialog(null,"Debe Ingresar Una letra de la A a la Z");
EntradaCaracter.setText("");
}
//estructura de control en donde si cumple con la condicion que sea una letra valida
if ((miStr.length()==1) &&((miStr.equalsIgnoreCase("a") )||(miStr.equalsIgnoreCase("b") )||(miStr.equalsIgnoreCase("c") )||(miStr.equalsIgnoreCase("d") )||(miStr.equalsIgnoreCase("e") )||(miStr.equalsIgnoreCase("f") )||(miStr.equalsIgnoreCase("g") )||(miStr.equalsIgnoreCase("h") )||(miStr.equalsIgnoreCase("i") )||(miStr.equalsIgnoreCase("j") )||(miStr.equalsIgnoreCase("k") )||(miStr.equalsIgnoreCase("l") )
||(miStr.equalsIgnoreCase("m") )||(miStr.equalsIgnoreCase("n") )||(miStr.equalsIgnoreCase("ñ") )||(miStr.equalsIgnoreCase("o") )||(miStr.equalsIgnoreCase("p") )||(miStr.equalsIgnoreCase("q") )||(miStr.equalsIgnoreCase("r") )||(miStr.equalsIgnoreCase("s") )||(miStr.equalsIgnoreCase("t") )||(miStr.equalsIgnoreCase("u") )||(miStr.equalsIgnoreCase("v") )||(miStr.equalsIgnoreCase("w") )||(miStr.equalsIgnoreCase("x") )||(miStr.equalsIgnoreCase("y") )||(miStr.equalsIgnoreCase("z") ) )) //si ingreso mas de un caracter
{ //falta validar de si es o no una letra valida de a a z
String miStr2 = EntradaCaracter.getText();
miStr = miStr.toUpperCase();//convierto a mayusculas las letras ingresadas
miStr2 = miStr2.toUpperCase();//convierto a mayusculas las letras ingresadas
miStr = etiqueta3.getText()+miStr2;//etiqueta3 son las conjeturas
etiqueta3.setText(" " + miStr);//escribe las letras ingresadas en conjeturas
EntradaCaracter.setText("");//entrada de texto vuelve a resetearse
//veamos ahora si el caracter ingresado esta o no en la palabra
//si esta entonces descubre una rayita o mas, sino
//intentosRestantes =intentosRestantes+1
char[] rayita = new char[20];
char[] linea = new char[20];
//rayita='_';
//lineas=' ';
String espacio=" ";
char reemplazo=' ';
char[] cadena = new char[20];
StringBuffer sb = new StringBuffer(25);
//mijuego.palabra="HOLA";
JOptionPane.showMessageDialog(null,"ESTAS 2 LETRAS SON=LES:"+ mijuego.palabra.charAt(0)+" "+miStr.charAt(0));
if ((mijuego.palabra.indexOf(miStr))!=-1)//si hay al menos una coincidencia
{
for (int i=0;i<=mijuego.palabra.length()-1;i++)
{
linea[i]='_';
if (mijuego.palabra.charAt(i)==miStr.charAt(i))
{//cambio la _ por la letra que corresponde
JOptionPane.showMessageDialog(null,"ESTAS 2 LETRAS SON=LES:"+ mijuego.palabra.charAt(i)+" "+miStr.charAt(i));
reemplazo=mijuego.palabra.charAt(i);
//linea[i]=reemplazo;
mijuego.incognita.setCharAt(2*i,reemplazo);
}
//espacio=espacio+rayita+" ";
label.setText(mijuego.incognita.toString());
//JOptionPane.showMessageDialog(null,"Ud.presiono:"+ linea.length());
JOptionPane.showMessageDialog(null,"ACERTO LA LETRA:"+ mijuego.palabra.charAt(i));
}
}
if ((mijuego.palabra.indexOf(miStr))==-1)//si no existe coincidencia
{
int restantes=mijuego.palabra.length();//tiene tantos intentos como el largo de la palabra
intentosRestantes.setText("Intentos Restantes:"+restantes);
}
}
}//end botonOK
}//end actionPerformed
}//end class OyenteAccion

//metodo para centrar la ventana
public void centrarVentana()
{
Dimension tam1 = Toolkit.getDefaultToolkit().getScreenSize();
Dimension tam2 = this.getSize();
setLocation((tam1.width-tam2.width)/2,(tam1.height-tam2.height)/2);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error en traspaso de objetos en un juego

Publicado por roberto (4 intervenciones) el 11/11/2006 00:45:30
/************************************************************************
* Clase llamada Diccionario, que servirá para ir dando * el abanico de palabras que utilizara en sus conjeturas. Ojalá en algún
* contexto, términos de la POO. Sin puntuación ni espacio.
*
***********************************************************************/

public class Diccionario
{
Vector diccList;
/************************************************************************
* Constructor: inicializar la lista de palabras.
***********************************************************************/

public Diccionario()
{
diccList = new Vector();
diccList.addElement("COMPUTAR");
diccList.addElement("COMPILAR");
diccList.addElement("INTERACTIVO");
diccList.addElement("JAVA");
diccList.addElement("DISTANCIA");
diccList.addElement("ENCAPSULACION");
diccList.addElement("POLIMORFISMO");
diccList.addElement("DINAMICO");
diccList.addElement("HERENCIA");
diccList.addElement("GRAPHICS");
diccList.addElement("SWING");
diccList.addElement("CLASES");
diccList.addElement("OBJETOS");
diccList.addElement("ABSTRACCION");
diccList.addElement("JERARQUIA");
diccList.addElement("INTERFACE");
diccList.addElement("EVENTOS");
diccList.addElement("INSTANCIA");
diccList.addElement("METODOS");
diccList.addElement("ATRIBUTOS");
} // end constructor

/************************************************************************
* Escojer una palabra al azar desde el listado
***********************************************************************/
public String obtenerPalabra()
{
// Genera un número entre 0 y el tamaño del vector diccList
int tamandiccList=diccList.size();
String palabra="";
int r = (int)(Math.random()*tamandiccList);
palabra=(String)diccList.elementAt(r);//seleccionamos mediante la función miembro elementAt. la palabra en el lugar escogido al azar
JOptionPane.showMessageDialog(null,"Ud.presiono:"+ palabra);
return palabra;
} // end obtenerPalabra*/
} // end class Diccionario

//clase juego
public class juego {
//String palabra;
String palabra;
StringBuffer incognita = new StringBuffer(25);
int erradas;
}
/************************************************************************
* Principal
***********************************************************************/

public static void main (String[] args)
{
VentanaSimple11 ventana = new VentanaSimple11();
ventana.setTitle("El Juego De La Adivinanza");
ventana.setSize(640,480);
ventana.setResizable(false);
ventana.centrarVentana();
ventana.setVisible(true);
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar