Este programa lo hice para mi sobrino pequeño que hace unos dias atras llego muy sorpendido de su escuela y me conto que su amigo era "brujo" [risas], me conto que habian entrado a internet y que un amigo suyo hablaba con un programa y este le respondia correctamente todo lo que le preguntaba, le hacia preguntas como "quien esta a mi lado", "como se llama mi amigo", "como estoy vestido" y cosas por el estilo, claro todo esto no podia ser mas que un truco, asi que le pregunte cual era el nombre del juego y era "Pedro responde" LOL.
import java.util.StringTokenizer;
import javax.swing.JTextField;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class tarotvirtual {
//Array que contiene la peticion que ve el usuario
//el tamaño maximo de una respuesta es "textofake.length-2"
// la respuesra oculta, de be ir entre dos "." osea ".RESPUESTA."
private String textofake[] = {"M","o","u","s","e"," ",
"p","o","r"," ","f","a","v","o","r"," ","r","e","s","p","o","n","d","e"," ",
"e","s","t","a"," ","p","r","e","g","u","n","t","a"};
//para almacenar el texto oculto
private String texto = "";
//permite saber si se esta utilizando el truco
private boolean truco = false;
//su nombre lo dice todo
private String RespuestasAlternas[] = {
"Tu ansiedad por probarme te hace escribir cualquier cosa, así nunca te responderé.",
"La pregunta que has realizado no es válida.",
"Por el momento no responderé.",
"Sigue intentando.",
"El tiempo todo lo responde."};
public tarotvirtual(){
}
public void keypress(java.awt.event.KeyEvent evt, JTextField jt){
//si se presiona tecla de borrado Backspace
if(evt.getKeyCode()==8){
System.out.println("borrando");
//borra un caracter a la vez
if(texto.length()>0){
texto = texto.substring(0, texto.length()-1);
}
}
else{
//si el primer caracter es "." se activa el truco
if((jt.getText().substring(0, 1).equals(".")) || (truco)){
truco=true;
//concatena el ultimo CHAR presionado
texto = texto + evt.getKeyChar();
System.out.println("texto oculto: " + texto);
//reemplaza el texto introducido por otro
jt.setText(reemplazar(texto));
}
else{
System.out.println("no se activo el truco");
}
}
}
/* reemplaza el texto introducido por teclado por otro*/
private String reemplazar(String t){
String tmp="";
//el usuario puede seguir escribiendo, pero este texto ya no se mostrara
if(t.length()>textofake.length){
tmp = "Mouse por favor responde esta pregunta";
}
else{//reemplaza caracter por caracter
for (int x=0;x<=t.length()-1;x++){
tmp = tmp + textofake[x];
}
}
return tmp;
}
/* Cuando se solicita la respuesta, se devuelve el texto que se en
encuentra entre ".TEXTO." dos puntos mediante StringTokenizer */
public void responde(JTextField jt,String peticion, String pregunta){
if((peticion.equals("Mouse por favor responde")) ||(truco)){
if(pregunta.equals("")){
jt.setText("Te equivocaste, debes escribir una pregunta");
}
else{
if(truco){
StringTokenizer tokens=new StringTokenizer(texto, ".");
jt.setText("" + tokens.nextToken());
}
else{
int num = (int)(Math.random()*(5));
jt.setText(RespuestasAlternas[num]);
}
}
}
else{
jt.setText("La peticion no es validad");
}
}
///limpia objetos
public void nuevapregunta(JTextField jt1,JTextField jt2,JTextField jt3){
jt1.setText("");//peticion
jt2.setText("");//pregunta
jt3.setText("");//respuesta
texto = "";
truco = false;
}
}
keypress(java.awt.event.KeyEvent evt, JTextField jt): Este metodo tiene como parametros de entrada un evt "Evento de teclado" y un objeto JTextField que corresponde al control de "peticion", cuando el usuario comienza el "jt" con un PUNTO, se activa el truco y a medida que se va escribiendo, el programa va ocultando el texto y reemplazandola por la peticion almacenada en textofake[], gracias al metodo privado reemplazar(String t). Si no se comienza con un PUNTO, entonces no se activa el truco.
responde(JTextField jt,String peticion, String pregunta): Este metodo tiene como entrada un JTextField que corresponde al control "respuesta", un String con la peticion "fake" y por ultimo un String con la pregunta, estos dos ultimos valores, solo sirven para determinar si existe algun error (mala escritura, no se escribio nada en la pregunta) o si el truco esta activado. De estar todo correcto, se utiliza StringTokenizer para extraer la respuesta oculta del estring "texto".
La implementacion en la Interfaz no puede ser mas facil:
Claro esta que esta aplicacion no contiene IA sino unas cuantas respuestas aleatorias, pero puede ser implementada mediante un "analizador sintactico" y demas cosa.
8 comentarios:
HOLA MOUSE UN SALUDO Y UN MUCHAS GRACIAS ENORMES TU BLOG ES UNO DE LOS MEJORES PUES EN EL ME E APOYADO PARA MIS PROYECTOS. E ENCONTRADO MUCHA INFORMACION SOBRE JAVA QUE ES EL LENGUAJE QUE UTILIZO. EL PROFESOR ME DEJO COMO TAREA EL MANEJO DE IMAGENES DESDE JAVA OSEA DEBO CARGAR UNA IMAGEN GUARDADA EN CUALQUIER LUGAR DEL COMPUTADOR Y MODIFICARLA DESDE JAVA YA SEA CAMBIARLE EL COLOR, RECORTARLA Y HACER GIF DESDE JAVA E BUSCADO MUCHO EN LA WED PERO NO ENCUENTRO Y LO QUE HAYO SON COSAS QUE POCO ENTIENDO YA QUE APENAS ESTOY EMPAPANDOME EN ESTE CAMPO QUISIERA SAVER SI PODRIAS COLOCAR UN TEMA CON ALGO ASI O AYUDARME MI CORREO ES ALEXIS.THE.WOLF@HOTMAIL.COM
¡Buenas Mouse!
Muy buenas tus aplicaciones, felicidades ;)
Tengo una pregunta para ti, espero que me puedas constestar.
¿Cómo hiciste para reproducir un sonido cuando se presiona el botón 'Responde' de la aplicación jcTarotVirtual(Pinky & Cerebro).
Agradecería mucho tu colaboración.
¡Sigue así!
¡Gracias y Saludos!
la reproduccion de sonido en java no es cosa del otro mundo, puedes utilizar varias formas para reproducir mp3,wav.etc
creo que tengo un ejemplo de reproduccion en este blog o en mi web no me acuerdo
Buenas noches mouse!
muchas gracias, me ha servido de mucho
esta explicación. saludos desde méxico!
¡Ayuda Mouse! Me estoy iniciando en esto de la programación y te estoy teniendo de ejemplo a seguir, pero no entendi muy bien como cambiarle el nombre a los objetos. Lo intente de mil formas y ninguna me funciono, URGENTE necesito tu ayuda... Podrías hacer un video en tu canal de YouTube para poder saber como crearlo?
Que tal mouse, estoy tratando de crear el programa en netbeans pero no estoy muy familiarizado con java y apenas voy empezando con la programación, cree los objetos como indicas y los nombré como los dices pero al copiar el código para la implementación de la interfaz me marca un error diciéndome que la variable "yorespondo" no se encuentra, podrías ayudarme un poco si es que me falta agregar algo?
Hola mouse, puedes subir de nuevo el codigo fuente, el enlace esta caido, gracias de antemano =D
Oye bro no hay forma de hacerlo en Dev c++
Publicar un comentario