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.