Juego del ahorcado en Java con más de 1 palabra

  • Autor del tema No Registrado
  • Fecha de inicio
N

No Registrado

Guest
Felices fiestas.

He realizado el siguiente programa pero no hay manera de que acepte dos o más palabras con espacios, ¿alguien sabe cómo hacerlo?

Es un juego del ahorcado de películas y por ejemplo "Mulholland Drive" detecta error si la pongo con espacio...

MUCHAS GRACIAS

Aquí tenéis el código 100% funcional pero sólo admite para adivinar 1 palabra sin espacios.

package eac3;

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class EAC3 {

public static void main(String[] args)throws IOException {
Scanner lector=new Scanner(System.in);
String [] paraules={"seven","mulhollanddrive"};

String paraula=" ";

//Variables globals
int i=0;
int opcio;
int oportunitats=5;
int index=0;

//Lletra introduïda
char lletra=' ';

//Variables booleanes
boolean var=false;
boolean comparar = false;
boolean repetit=false;
boolean primer=false;
boolean sortir=false;

//Estructura do-while. Mentres hi hagi 5 oportunitats
do{
oportunitats=5;
var=false;
repetit=false;
primer=false;
index=0;

System.out.println("JOC DE AHORCADO, ");
System.out.println("Heu de endivinar la paraula");
System.out.println("Hi ha 4 oportunitas per endivinar la paraula");
System.out.println("Al 5 error quedeu penjats");
System.out.println("Alerta si repetiu lletra també es considerarà un error");
System.out.println("Si esteu preperat apreteu Enter");


int aleatorio=(int)((Math.random()*10)*10)/10;
paraula=paraules[aleatorio];


char[]paraula2 = paraula.toCharArray();
char[]guions=new char[paraula2.length];
char[]comprova=new char[15];

for(int j=0; j<guions.length; j++){

guions[j]='-';
}

do{
lector.nextLine();
var=false;
repetit=false;

//Quan el jugador premia l'enter per primer cop es mostra el següent en pantalla.
if(primer==false){
System.out.println(guions);
System.out.println(" __________");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" |__________");
System.out.println("Quina lletra hi pot pot ser?");
System.out.println("");
}
primer=true;
lletra =(char)System.in.read();

for(int o=0; o<comprova.length; o++){

if(comprova[o]==lletra){
System.out.println("La lletra "+lletra+ " ja s'ha dit -- També resta");
repetit=true;

}
}
comprova[index]=lletra;
index++;

for(i=0; i<paraula2.length; i++){

//Si la lletra introduïda es troba a la paraula, aleshores var és true.
if(paraula2==lletra){

guions=lletra;

var=true;
}
}

comparar = Arrays.equals(guions,paraula2);

if(comparar==true){
System.out.println("Si la paraula és "+paraula+"!!!");
System.out.println("*****************************");
System.out.println("*****************************");
System.out.println("** FELICITAT HAS TROBAT ***");
System.out.println("** LA PARAULA!!!! ***");
System.out.println("*****************************");
System.out.println("*****************************");

System.out.println("Fi del joc");

break;
}

if((var==false)||(repetit==true)){

oportunitats--;
}
System.out.println(guions);
System.out.println("_______________________________");


if(oportunitats==5){

System.out.println(" __________");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" |__________");


} else if (oportunitats == 4){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" |__________");


} else if(oportunitats==3){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | | ");
System.out.println(" | | ");
System.out.println(" | ");
System.out.println(" |__________");

} else if (oportunitats == 2){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | -|- ");
System.out.println(" | | ");
System.out.println(" | ");
System.out.println(" |__________");

} else if (oportunitats == 1){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | --|-- ");
System.out.println(" | | ");
System.out.println(" | / ");
System.out.println(" |__________");


}

}while (oportunitats > 0);

//Si s'ha avaluat com a falsa, aleshores:
if(comparar==false){
System.out.println("** HAS FALLAT **");
System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | --|-- ");
System.out.println(" | | ");
System.out.println(" | _/ _ ");
System.out.println(" |__________");
System.out.println(" Fi del joc");
}

System.out.println(" ");
System.out.println("Tornar a jugar introduiex 1 i apreta enter");
System.out.println(" ");
System.out.println("Per sorti del joc apreta 2 i enter");

opcio=lector.nextInt();

if(opcio==2){

sortir=true;
}


} while (sortir == false);

System.out.println("final del joc Adeu");

}}
 

Cuak Cuak

Pato foril
Desde
27 Mar 2010
Mensajes
23.477
Reputación
63.196
Anda que ponerse en Navidad a hacer los deberes de la FP de informática...
 

whoseyes

Madmaxista
Desde
3 Jun 2011
Mensajes
2.653
Reputación
3.305
Lugar
BCN
Tienes muchas faltas de ortografia en catalan.

Es lo unico que puedo comentar, de lo otro ni idea.
 

Cui Bono

So far, so good
Desde
19 Jul 2007
Mensajes
30.099
Reputación
51.793
La classe Scanner necesita un nextLine() adicional cuando pulsas espacio. Esto es porque el espacio es delimitador de entrada. Debes implementar la captura deese espacio o usar otra clase como entrada, quizás así:

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Introduzca película:");
str=in.readLine();

Con esto leería la frase completa sin cortarte por el espacio.
 
Desde
30 Mar 2009
Mensajes
2.136
Reputación
2.124
Lugar
Woodsboro
La classe Scanner necesita un nextLine() adicional cuando pulsas espacio. Esto es porque el espacio es delimitador de entrada. Debes implementar la captura deese espacio o usar otra clase como entrada, quizás así:

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Introduzca película:");
str=in.readLine();

Con esto leería la frase completa sin cortarte por el espacio.
Muchas gracias, voy a probar con esto, pero no hay manera que en:

String [] paraules={"Seven","Mulhollanddrive"};

¿Se pueda poner espacio?

Gracias
Felices fiestas.
 

moris

Madmaxista
Desde
17 Ago 2008
Mensajes
2.783
Reputación
3.169
Anda que ponerse en Navidad a hacer los deberes de la FP de informática...
yo tengo 4 entregas en 8 días (hasta el viernes) y termino el cuatrimestre, me han reventado las navidades :(

Ya solo me quedan dos pero tengo unas ojeras que parezco un zombi
 

Guanotopía

Será en Octubre
Desde
9 Nov 2011
Mensajes
22.767
Reputación
85.099
La classe Scanner necesita un nextLine() adicional cuando pulsas espacio. Esto es porque el espacio es delimitador de entrada. Debes implementar la captura deese espacio o usar otra clase como entrada, quizás así:

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Introduzca película:");
str=in.readLine();

Con esto leería la frase completa sin cortarte por el espacio.
No, el delimitador es el return, nextLine te permite leer una línea entera tenga o no espacios.

El problema es entre otros, crear un número aleatorio entre 0 y 9 y aplicárselo a un array que tiene tamaño 2.
 
Desde
30 Mar 2009
Mensajes
2.136
Reputación
2.124
Lugar
Woodsboro
No, el delimitador es el return, nextLine te permite leer una línea entera tenga o no espacios.

El problema es entre otros, crear un número aleatorio entre 0 y 9 y aplicárselo a un array que tiene tamaño 2.
Olvídate del array de tamaño 2 porque tenía 10 títulos (de 1 sola palabra) y he estado intentando modificar y a ver qué hago.

Lo ideal es encontrar una solución con los mínimos cambios en el código, sin tener que crear clases.
 

Aprendizdetodo

Madmaxista
Desde
24 Oct 2012
Mensajes
14
Reputación
8
Mmm clases no sé pero unos cuantos métodos yo si que haria sobretodo para dibujar por pantalla el ahorcado y así limpiar algo el código separando lógica de presentación. Ahora no estoy en casa pero despues me lo miro y te intento decir algo mas. Como comentario freak te digo que mientras no cierres el parentesi del System.out.print no hace falta que lo habrás en cada línea y así evitas consumo de CPU.

Un saludo,
Aprendiz
 

LuliVitRoger

Madmaxista
Desde
24 Abr 2009
Mensajes
98
Reputación
109
Felices fiestas.

He realizado el siguiente programa pero no hay manera de que acepte dos o más palabras con espacios, ¿alguien sabe cómo hacerlo?

Es un juego del ahorcado de películas y por ejemplo "Mulholland Drive" detecta error si la pongo con espacio...

MUCHAS GRACIAS

Aquí tenéis el código 100% funcional pero sólo admite para adivinar 1 palabra sin espacios.
Para qué usas un lenguaje orientado a objetos para hacer un mazacote de 1 sólo método? Separa el input, el output, pon las películas en un properties... Este código produce cagaleras de verlo.
 
Desde
30 Mar 2009
Mensajes
2.136
Reputación
2.124
Lugar
Woodsboro
No estoy tan avanzado y tengo que memorizarme cientos de ejercicios así para el examen de enero...

YA LO TENGO 100% FUNCIONAL y todo comentado!

package eac3;

/*
* Jaume Mayol
* Programació (Bloc 1)
* Activitats de Nadal
*/

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class EAC3 {

public static void main(String[] args)throws IOException {
Scanner lector=new Scanner(System.in);
String [] paraules={"Seven","Mulholland drive", "Twin Peaks","La matanza de Texas","La noche de"
+ "Halloween", "Buried", "Walking Dead", "Psicosis", "Jennifer's Body", "Destino final"};

String paraula=" ";

//Variables globals
int i=0;
int opcio;
int oportunitats=5;
int index=0;

//Lletra introduïda
char lletra=' ';

//Variables booleanes
boolean var=false;
boolean comparar = false;
boolean repetit=false;
boolean primer=false;
boolean sortir=false;

//Estructura do-while. Mentres hi hagi 5 oportunitats
do{
oportunitats=5;
var=false;
repetit=false;
primer=false;
index=0;

//Per estalviar recursos del CPU tot el missatge inicial en un sol println
System.out.println("HANGMAN CINEMA\nHeu de endivinar la película"
+ "\nHi ha 4 oportunitas per endivinar el títol. Al 5 error quedeu penjats"
+ "\nAlerta si repetiu lletra també es considerarà un error"
+ "\n\nRecordeu que els espais compten, per tant és recomenable"
+ "que premeu la barra d'espai\ndel vostre teclat per comprovar si hi"
+ "ha espais a la paraula, especialment si té molts de guions.\nTambé"
+ " compten els apòstrofs (') i les majúscules com a Jennifer's Body"
+ "\n\nSi esteu preparats, preméu Enter");

//Funció aleatòria del Java perquè elegeixi un títol per atzar dels 10 que hi ha.
int aleatorio=(int)((Math.random()*10)*10)/10;
paraula=paraules[aleatorio];

//Convertir una cadena en un array de caràcters (veure més info aquí:
//http://lineadecodigo.com/tag/tochararray/
char[]paraula2 = paraula.toCharArray();
char[]guions=new char[paraula2.length];
char[]comprova=new char[15];

//Introdueix els guions a cada lletra de columna. Una altra manera de fer-ho
//es com ho he fet al programa d'endevina el meu nom.
for(int j=0; j<guions.length; j++){

guions[j]='-';
}//tanca bucle guió

do{
lector.nextLine();
var=false;
repetit=false;

//Quan el jugador premia l'enter per primer cop es mostra el següent en pantalla.
if(primer==false){
System.out.println(guions);
System.out.println(" __________");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" |__________");
System.out.println("Quina lletra hi pot pot ser?");
System.out.println("");
}//tanca if quan és el primer intent

//Llegeix lletra inserida per l'usuari amb el teclat
primer=true;
lletra =(char)System.in.read();

//Comprova si s'ha dit la lletra
for(int o=0; o<comprova.length; o++){

if(comprova[o]==lletra){
System.out.println("La lletra "+lletra+ " ja s'ha dit -- També resta");
repetit=true;

}//tanca bucle if
}//tanca bucle for
//es comprova la lletra, si és la mateixa, se suma intent
comprova[index]=lletra;
index++;

for(i=0; i<paraula2.length; i++){

//Si la lletra introduïda es troba a la paraula, aleshores var és true.
if(paraula2==lletra){

guions=lletra;

var=true;
}
}

//Compara espai de guió per cada lletra i la paraula en cadena de text.
comparar = Arrays.equals(guions,paraula2);

if(comparar==true){
System.out.println("Si la paraula és "+paraula+"!!!");
System.out.println("*****************************");
System.out.println("*****************************");
System.out.println("*** FELICITATS! ETS MÉS ***");
System.out.println("*** FRIKI QUE JO!!!! ***");
System.out.println("*****************************");
System.out.println("*****************************");

System.out.println("Fi del joc");

break;
}

if((var==false)||(repetit==true)){

oportunitats--;
}
System.out.println(guions);
System.out.println("_______________________________");


if(oportunitats==5){

System.out.println(" __________");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" |__________");


} else if (oportunitats == 4){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" | ");
System.out.println(" |__________");


} else if(oportunitats==3){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | | ");
System.out.println(" | | ");
System.out.println(" | ");
System.out.println(" |__________");

} else if (oportunitats == 2){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | -|- ");
System.out.println(" | | ");
System.out.println(" | ");
System.out.println(" |__________");

} else if (oportunitats == 1){


System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | --|-- ");
System.out.println(" | | ");
System.out.println(" | / ");
System.out.println(" |__________");


}

}while (oportunitats > 0);

//Si s'ha avaluat com a falsa, aleshores:
if(comparar==false){
System.out.println("** HAS FALLAT **");
System.out.println(" __________");
System.out.println(" | | ");
System.out.println(" | O ");
System.out.println(" | --|-- ");
System.out.println(" | | ");
System.out.println(" | _/ _ ");
System.out.println(" |__________");
System.out.println(" Fi del joc");
}

System.out.println(" ");
System.out.println("Tornar a jugar. Premeu 1 i Enter");
System.out.println(" ");
System.out.println("Per sortir del joc premeu 2 i Enter");

opcio=lector.nextInt();

if(opcio==2){

sortir=true;
}


}//tanca el do de la línea 39
while (sortir == false);

System.out.println("Fi del joc. Bones festes");

}//tanca main
}//tanca el programa