Foros del Web » Programación para mayores de 30 ;) » Java »

Programa el Ahorcado

Estas en el tema de Programa el Ahorcado en el foro de Java en Foros del Web. Quisiera que me ayudaran con este codigo. Es totalmente funcional, pero hay unos detalles que no consigo resolver. El programa consiste en un juego del ...
  #1 (permalink)  
Antiguo 23/06/2011, 22:51
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Programa el Ahorcado

Quisiera que me ayudaran con este codigo. Es totalmente funcional, pero hay unos detalles que no consigo resolver.

El programa consiste en un juego del ahorcado. Debe tener un numero de intentos limitados, y ahi es donde no consigo lograrlo (en lo mas facil!).

Cita:
package Ahorcado;

import static java.lang.System.*;
import java.io.IOException;
import java.util.*;

public class Practica {
static int coinciden = 0;
String [] Palabras = {"Java", "PHP"};
static int numeroPalabra = (int) Math.round(Math.random());
static char [] LetrasAdivinadas;
static String charIntroducido = "";
static int intentos;
static String palabraActual;
static int posicionAcierto;
static char [] Letras;
static int terminar;

//Metodo para pedir letra
public char introducirLetra(){
Scanner entrada = new Scanner(in);
out.print("Introduzca la letra: ");
String cadena = entrada.next();
//char [] charIntr = cadena.toCharArray();
charIntroducido = charIntroducido + cadena.charAt(0) + " - ";

return cadena.charAt(0);
}

//Metodo para comparar letra introducida con una palabra del array de palabras
public char coincide(char charIntroducido) throws IOException{
palabraActual = Palabras[numeroPalabra];
Letras = palabraActual.toCharArray();
for (int i = 0; i < Letras.length; i++){
if (charIntroducido == Letras[i]){
posicionAcierto = i;
coinciden = 1;
//Letras[i] = charIntroducido;
}

}
if (coinciden != 1){
intentos++;
out.println("No coincide. \nNumero de Intentos: " + intentos );
}
return charIntroducido;
}

//Metodo para mostrar las rayas segun el tamaño de la palabra del array
public void inicializarPalabra() {
int indiceArray = Palabras[numeroPalabra].length();
LetrasAdivinadas = new char[indiceArray];
for (int i = 0; i < LetrasAdivinadas.length; i++){
LetrasAdivinadas[i] = '_';
out.print(LetrasAdivinadas[i] + " ");
} out.println("\n ");
}

//Metodo para cambiar la raya por la letra correspondiente
public void intercambiarLetra(char charIntroducido) {
int pos = 0;
do {
pos = palabraActual.indexOf(charIntroducido, pos);
if (pos != -1) {
LetrasAdivinadas[pos] = charIntroducido;
pos++;
}
}
while (pos != -1);
}

public void mostrarJuego() {
for (int i = 0; i < Letras.length; i++) {
System.out.print(LetrasAdivinadas[i] + " ");
}
System.out.println();
System.out.println("Letras que ya introduciste: " + charIntroducido);
}

public int fin() {
int res = 0;
for ( int i = 0; i < Letras.length; i++) {
if (LetrasAdivinadas[i] == '_') {
res = 1;
break;
}
else {
res = 0;
}
}
System.out.println();
//System.out.println(res);
return res;
}

public static void main(String[]args) throws IOException {

while( intentos < 5) {

char c;
Practica practica = new Practica();
practica.inicializarPalabra();
/*
practica.coincide(charIntroducido);
practica.intercambiarLetra(charIntroducido);
practica.mostrarJuego();
practica.fin();
*/
do {
c = practica.introducirLetra();
practica.coincide(c);
practica.intercambiarLetra(c);
practica.mostrarJuego();
}
while (practica.fin() == 1);
out.println("Felicidades");
numeroPalabra = (int) Math.round(Math.random());

}
}
}

El problema consiste en que no funciona el while para limitar los intentos.
Cualquier sugerencia adicional sobre el problema, por favor avisemelo. Gracias
  #2 (permalink)  
Antiguo 24/06/2011, 03:59
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Programa el Ahorcado

Difícilmete te va a funcionar, mira dónde has puesto la condición de 5 intentos y dónde el incremento de intento.

Lo que has hecho es que a partir de 5 fallos no puedas jugar con otra palabra nueva, pero puedes continuar con la misma.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 24/06/2011, 07:14
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Programa el Ahorcado

Gracias por responden a mi duda.

Aun no logro resolver el problema, a pesar de que hice lo que me dijiste. Puse los intentos dentro del mismo ciclo, pero sigue sin funcionar y no los limita.

Esta fue la modificacion que hice:

Cita:
while( intentos < 5) {

char c;
Practica practica = new Practica();
practica.inicializarPalabra();

do {
intentos++;
c = practica.introducirLetra();
practica.coincide(c);
practica.intercambiarLetra(c);
practica.mostrarJuego();
}
while (practica.fin() == 1);
out.println("Felicidades");
numeroPalabra = (int) Math.round(Math.random());

}
  #4 (permalink)  
Antiguo 24/06/2011, 07:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Programa el Ahorcado

Lo que has cambiado, ha emperorado lo que haces.

Has puesto que cada intento, sea correcto o no, cuente, y si no has cambiado nada más, cuando fallas cuenta como dos intentos. Y sigue sin comprobar la condición hasta que aciertas la palabra.

Da la impresión de que no conoces tu propio código, suponiendo que realmente sea tuyo, deberías partir de cero, te veo muy perdido.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 24/06/2011, 08:11
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Programa el Ahorcado

Saludos

El resultado sigue siendo el mismo. El incremento de los intentos del metodo Coinciden, lo quite. Como dices, cuenta los intentos correcto e incorrectos, aunque los correctos no los muestra como error, pero no deberia contarlos.

Sobre el codigo, es mi primer contacto con la programacion y con java, y como vamos muy rapido en la clase, copie algunas ideas de otro codigo que encontre. Pero es mi codigo y entiendo lo que hace salvo por los intentos. Segun entiendo, al ser intentos una variable de clase y static, deberia ser reconocida en todo el codigo del programa, y al llegar a mas de 5, deberia salir del ciclo, pero no entiendo porque no lo hace.

Como debo hacer que se repitan nuevas palabras mientras el usuario vaya hacertando, puse el programa a correrse en el ciclo while, y como debo pararlo, cuando se sobrepasen los intentos, pense que usando el numero de intentos era una buena opcion.

Por favor, si usted va a dar una opinion que vaya a empeorar el problema, no la dé. Sea parte de la solucion no del problema.
  #6 (permalink)  
Antiguo 24/06/2011, 09:29
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Programa el Ahorcado

Cita:
Por favor, si usted va a dar una opinion que vaya a empeorar el problema, no la dé. Sea parte de la solucion no del problema.
Hombre, yo te he dicho lo que estabas haciendo mal y por qué, si tú no sabes corregir a partir de eso tu código, vale, pero no digas que empeoro nada, está feo.

Cita:
Pero es mi codigo y entiendo lo que hace salvo por los intentos. Segun entiendo, al ser intentos una variable de clase y static, deberia ser reconocida en todo el codigo del programa, y al llegar a mas de 5, deberia salir del ciclo, pero no entiendo porque no lo hace.
Crees que lo entiendes, pero no es así, el hecho de que hayas convertido el conteo de los incorrectos en conteo de cualquier letra, es una prueba. Has movido una instrucción sin saber por qué ni a dónde.

Si tú pones que se pida una nueva palabra dentro de un bucle while con la condición de que el número de fallos sea <5, en el momento que falles 5 (en total ya que tampoco reinicias esa variable para cada palabra) no podrás jugar una nueva palabra. Tienes que tener claro lo que quieres, parece que confundes fallar 5 letras de una palabra con fallar 5 palabras, y para fallar una palabra necesitas que haya un número de fallos de letras.

¿Qué quieres evitar? Que pida más letras al fallar 5
¿Dónde pides las letras? En el bucle do
¿Cuándo deja de pedir letras? Cuando has acertado la palabra
¿Es eso lo que buscas? No, porque tú quieres que también salga cuando haya fallado 5 veces.

Por lo tanto, quieres que salga de un bucle bajo dos condiciones distintas, sin embargo, sólo le pides que compruebe una.

Creo que con eso ya está más que explicado lo que tienes mal y cómo solucionarlo, lo que no voy a hacer es escribir el código por ti, porque ni tú aprendes, ni a mí me pagan por ello.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 24/06/2011, 10:08
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Programa el Ahorcado

Gracias a tu ayuda y experiencia, ya he podido resolver el problema.
Y me llevé lo mas importante: aprender.
  #8 (permalink)  
Antiguo 24/02/2012, 19:50
 
Fecha de Ingreso: febrero-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Programa el Ahorcado

Hola sterlingdiazd
Serias tan amable de pasarme el código ya corregido?

Etiquetas: ahorcado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 19:55.