Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia

28/3/10

Tarot virtual - Mouse responde

JAN29


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.

Este jueguito on-line, simula ser un "Tarot Virtual" con cierta IA y claro, como no podia ser de otra forma, tiene un truco con el cual puede "adivinar" cual quier cosa que le preguntemos.

El Truco:
El truco funciona de la siguiente manera:
Ingresar a la pagina de "Pedro responde" y te mostrar un pequeño cuadro marron como la imagen de abajo
Para activar el truco, debes comenzar escribiendo un "." (punto), pero en vez de mostrarte un punto, te mostrar la "P", despues escribes la respuesta y para terminar otro "." (punto), el resto del texto que escribas ya no importa, pero claro para que el truco tenga el mismo impacto, debes completar el resto de la peticion.

Despues escribes una pregunta, la pregunta no interesa, de todas formas te devolvera la respuesta que escribiste antes, y presiona OK para ver el resultado

Esto es lo que haremos hoy
El proyecto en Java
1. Crea un nuevo proyecto en Netbeans con los siguientes objetos y sus respectivos nombres
Ahora creamos otra clase "tarotvirtual.java", esta clase sera nuestra alma en pena que contiene el truco asi como unas cuantas respuestas alternativas.

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;
    }
}


Explicacion:
Esta clase "tarotvirtual.java" esta compuesto por los metodos:
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.


Y para que compares tus resultados aqui tienes el codigo fuente
Click para descargar

8 comentarios:

Anónimo dijo...

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

pupetto dijo...

¡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!

mouse dijo...

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

Anónimo dijo...

Buenas noches mouse!
muchas gracias, me ha servido de mucho
esta explicación. saludos desde méxico!

KRAPPOSYOUTUBER dijo...

¡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?

Anónimo dijo...

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?

diegomor dijo...

Hola mouse, puedes subir de nuevo el codigo fuente, el enlace esta caido, gracias de antemano =D

Unknown dijo...

Oye bro no hay forma de hacerlo en Dev c++

Post recomendado