04 octubre 2007

Liberando y rompiendo

Uno de los videojuegos más viejos es uno llamado Break-Out (traducción: ¿rompiendo afuera?) y es un ejercicio interesante para poderlo programar usando Visual Basic 2005. En este ejemplo, voy a hacer un programa que se vea así:


Deja te platico como está armado esta onda: en la parte superior de la ventana, tengo 20 PictureBoxes de colores (azul, verde, amarillo y rojo), hay otro PictureBox pequeño con la imagen de una pelotita (bueno, intenté que se pareciera un poco) y hasta abajo hay otro PictureBox que se va a poder mover de manera horizontal. La idea es que la pelota viaja por la ventana y al toparse con algún bloque de color, desaparece el cuadro y rebota en dirección contraria. Lo mismo sucede cuando la pelota toca alguna orilla de la ventana. El jugador controla con su mouse el PictureBox que está abajo (solo se mueve horizontalmente) para evitar que la pelota salga por la parte inferior de la ventana. O sea que el chiste es eliminar todos los bloques de colores y no dejar que la pelota salga de la ventana. Cada vez que la pelota salga por la parte inferior de la pantalla, se pierde una vida y por cada bloque que desaparece, la puntuación aumenta 10 puntos.

De una vez te digo los nombres que le puse a cada uno de estos controles para que luego veas el código y entiendas como está la movida. Estos son los nombres de los controles:
  • Pegador: PictureBox que mueve el usuario con el mouse.
  • Pelota: PictureBox con la imagen de la pelota que rebota por todos lados.
  • Rojo1, Rojo2, Rojo3, Rojo4 y Rojo5: son los PictureBoxes rojos que están hasta arriba.
  • Amarillo1, Amarillo2, ... Amarillo5: PictureBoxes amarillos.
  • Verde1, Verde2, ... Verde5: PictureBoxes verdes.
  • Azul1,... Azul5: PictureBoxes azules.
  • Label1: Etiqueta donde informo al usuario el número de vidas que le quedan.
  • Label2: Etiqueta donde informo al usuario su puntuación.
  • Timer1: Un timer que se encarga de mover a pelota.
Para empezar, dentro de la clase Form1, declaro unas variables. El código se ve así:


intVelX indica el número de pixeles que voy a aumentar para que la pelota se mueva horizontalmente y intVelY indica el número de pixeles que le voy a aumentar para que se desplace de manera vertical. Recuerda que el sistema de coordenadas comienza en la esquina superior izquierda. A veces esto se confunde a la hora del desplazamiento horizontal: la coordenada 0,0 está en esa esquina, así que para que la pelota viaje hacia arriba, le tengo que restar valor.

intScore acumula la punturación, intVidas tiene el número de pelotas que todavía le quedan al jugador y intSinBolas me va a servir para saber cuando se eliminaron todos los bloques (para decirle al usuario que ya ganó).

En este ejemplo, el juego comienza en cuanto se abre la ventana. Para esto, solo tengo que habilitar Timer1 para que empiece la función. Si quieres ponerle un botón para que arranque el juego, escribe este código en el evento Click del botón.


Ahora vamos a hablar del código que nos mueve todo el asunto (bueno, solo nos mueve la pelota). Es el evento Tick del Timer1 que se ejecutará cada X número de milisegunos (que definí en las propiedades del Timer en la vista de diseño de Form1). Primero asigno a mi propiedad SinBolas (más adelante explico como funciona la propiedad), la cual es interfaz para accesar la variable intSinBolas, en 0. Luego llamo a una función que se encarga de ver si la pelota chocó con algo para rebotarlo, acumular puntos, etc. Ese lo explico más adelantito. Al llamar a esta función, altera el valor de SinBolas. Si devuelve un valor de 1, quiere decir que ya no hay bloques en la pantalla y que ganó. Si este es el caso, para el Timer1 y le manda una mensaje para decirle que ganó.

Si no se han acabado los bloques, aumento la coordenada X de Pelota para que se mueva por la pantalla (para eso uso una propiedad PelotaX que accesa a Pelota.Left). Después de moverlo, tengo la condición que se encarga de ver si la pelota todavía está dentro de la ventana. Si ya llegó a una orilla de la ventana (o sea, la posición X de Pelota es menor a 0 o mayor al ancho, Width, de la ventana), invierte la cantidad que se le va a sumar a la pelota y esto causa que rebote ne sentido contrario al que iba.

Después de encargarme del desplazamiento horizontal, le sumo a la posición Y (propiedad PelotaY que es la interfaz de Pelota.Top) para que se mueva en sentido vertical. La siguiente condición veo si Pelota no ha salido por la parte inferior de la pantalla (o sea que el jugador no pudo poner a Pegador en el lugar correcto para rebotar la pelota hacia otro lado). Si salió por la parte inferior, para el timer, le quita una vida, le indica al jugador el número de vidas que le quedan, y vuelve a posicionar la pelota para volver a jugar. En caso que ya se le terminaron las vidas, le manda mensaje que se la pe¡nó de rayuela en medio; si no, le dice que falló y vuelve a arrancar el timer. Aquí está el código:


Ya estuvo lo complicado. Ahora voy a mostrar como se mueve Pegador. Voy a programar la movida del Pegador en el evento MouseMove del Form1. Una nota: si no encuentras donde se pone el código de esta onda, abre la ventana de código de la forma y selecciona en el combobox de la izquierda Form1 events y luego del de la derecha, elige MouseMove. ¡Listo! La función MouseMove recibe de manera cuasimágica un parámetro llamado e, la cual tiene datos acerca del estado del mouse. En este caso, e.X dice en qué coordenada X está el cursor del mouse en ese momento. Entonces, agarro ese valor y acomodo a Pegador de acuerdo a eso (hago que la posición del cursor en X esté a la mitad de Pegador). Aquí está el código:


Una función que había mencionado cuando expliqué el código del Timer1_Tick, es una que se encarga de ver si Pelota chocó (lo que se llama elegantemente "colisionó") con Pegador o con cualquier otro bloque de color. Para hacer esto, hice una función, llamada RevisaColisiones, que se encarga de ello. , a su vez, llama a dos versiones diferentes de otra función, RevisaColision, que revisa si la pelota está dentro de un PictureBox y desaparecerlo, si es necesario. Aquí se ve como funciona RevisaColisiones, y más adelante vamos por RevisaColision.


Si te fijas, RevisaColisiones no tiene nada de especial. Como que es el gerente que hace que RevisaColision haga todo el trabajo pesado, así que vamos directo a ver como funciona.

En primer lugar, hay dos versiones de RevisaColision. Estoy aprovechando la característica de la programación orientada a objetos (OOP) llamada polimorfismo. No ahondo en estos conceptos, pero si tienes dudas, visita los links de este párrafo para que veas que onda.

La primera versión de RevisaColision recibe dos parámetros: Imagen que es el PictureBox que quiero revisar (o sea, ver que Pelota no esté "adentro" de él) y Oculta que es booleano que tiene un valor de verdadero o falso (más adelante vemos como funciona).

En primer lugar, reviso si Imagen está visible. Si es así, tengo un if grandototote que lo único que hace es revisar las coordenadas de Pelota en relación a Imagen. Si está "adentro", entonces invierte la velocidad vertical, VelY, para que rebote, actualizo la puntuación y, si quiero que desaparezca Imagen (o sea, que Oculta tiene un valor verdadero), entonces lo oculto (para esto uso la propiedad Visible de Imagen). En dado caso que no esté visible, quiere decir que ya lo desaparecimos hace rato, así que no hago nada. Aquí está el código:

La segunda versión, la versión sobrecargada de RevisaColision, se llama igual, pero en lugar de recibir dos parámetros, recibe solo una: el PictureBox que ando revisando. Si te fijas, lo único que hace es llamar a la versión "normal" de RevisaColision, con el parámetro Oculta=True. Me conviene hacerlo así porque en el único caso en que quiero que no desaparezca el PictureBox es cuando estoy revisando a Pegador. En todos los demás casos, o sea, con los bloques rojos, amarillos, verdes y azules, quiero que desaparezcan. Aquí está el código de las dos versiones de RevisaColision:


Aunque no era del todo necesario, hice propiedades para accesar diferentes variables que uso a cada rato. Básicamente una propiedad, o Property para escucharnos bien pseudoprogramadores apantalladores, es un intermediario entre una variable y el programa. Tiene definida dos partes que se pueden programar: Get que dice qué valor regresar y Set que dice cómo se va a asignar un valor. En mi caso, no estoy haciendo nada especial más que demostrando la sintáxis de una Property. A lo mejor luego escribo ejemplos con propiedades más interesantes...

Volviendo a la realidad, hice una propiedad PelotaX y PelotaY que devuelven los valores de Pelota.Left y Pelota.Top respectivamente. Aquí está el código:


Ya que me emocioné con esto de las propiedades, también hice propiedades que controlan las variables globales que mencioné al principio de todo este rollo. Aquí están las propiedades que sirven de interfaz para la velocidad horizontal, vertical y la puntuación:


Éstas son las últimas propiedades que hice. Éstas se encargan de el número de vidas y ver si quedan bloques en la ventana:


¡Listo! Con esto creo que tendrás un jueguito para que te entretengas unos 5 minutos en jugar antes de aburrirte, jeje. Pero demuestra el uso de propiedades, del polimorfismo y una que otra idea rara. Si tienes dudas, déjame un comentario y intentaré contactarme contigo en cuanto pueda. ¡Hasta la próxima!

03 octubre 2007

Hansel y Gretel Reloaded

Hace ya tiempo habíamos planteado el problema de que Karel salvara a Hansel y Gretel (si no te acuerdas como era la onda o simplemente quieres recordarlo, sigue esta liga) El otro día en clase, hicimos el diagrama de flujo y toda la onda y se nos ocurrió otra solución que está mejor que la que había presentado (no hace una condición inútil) y por eso lo comparto con ustedes.


Recuerda que si quieres más retos, puedes visitar la página http://cbtis122.net/omi. Está lleno de problemas esperando a que tu los resuelvas. ¡Hasta la próxima!

26 septiembre 2007

Karel anda buscando a Hansel y Gretel

Como podrás recordar la vieja historia clásica de Hansel y Gretel (y si no lo conoces lo puedes leer aquí), estos niños dejaron un rastro de piedras para saber cómo regresar de la casa de la bruja malvada.

Hansel y Gretel ahora se han perdido en el mundo virtual y, como han tardado mucho, el pobre leñador virtual le pidió a Karel, el héroe de la historia, que encuentre a los niños. Para esto, tendrá que seguir un rastro de Zumbadores que han dejado los chiquillos.

Tu misión es hacer un programa que le permita a Karel seguir un rastro marcado por zumbadores. Este es una imagen de un mundo donde debe funcionar tu algoritmo, pero recuerda que debe de ser capaz de funcionar para cualquier mundo.


Este es una solución que se me ocurrió a mi (ya no lo acabé, pero ya veo varias cosas que pueden mejorar) que a lo mejor te sirve. Podríamos usar funciones (cosa que espero escribir más adelante), recursión, etc. Le agregué comentarios al código para que sea más fácil de entender lo que estoy haciendo. Los comentarios se encierran entre paréntesis con asteriscos, ejemplo: (* este es un comentario *).



¡Que se diviertan!

25 septiembre 2007

¿Cómo le hago para conectar mi videochunche a mi compu?

Una pregunta que nos sucede a todos (bueno a todos los que nos interesa la computadora y tenemos obsesió0n por conectar todo lo que se pueda a ella) los que compramos una videocámara digital es ¿cómo le hago para conectarlo a mi compu?

Aunque es una pregunta sencilla, la respuesta depende de muchas cosas. En primer lugar, ¿qué tipo de videochunche tengo? En este caso, estoy suponiendo que tienes una videocámara digital que usa MiniDV o algo por el estilo. Aunque hay diferentes maneras de conectar otros aparatos de video (como tu videocasetera VHS, la señal de la tele, etc.) en este mensaje sólo me voy a concentrar en este tipo. Si quieres copiar desde la VHS, una videocámara más viejita (tipo Hi8, también conocido como Digital8, u otras) o la TV, necesitas una tarjeta que te permita conectar la señal directamente a la compu. Las llaman Tarjetas de TV o algo por el estilo y aquí puedes encontrar una página que te muestra cómo instalarlo y toda la onda.

Las videocámaras digitales generalmente se comunican con la compu por medio de un puerto Firewire (conocido también como IEEE-1394). Si ya tienes una cámara de este tipo, necesitas otro par de cosas. Tu computadora necesita, si no lo tiene ya, una tarjeta que te permita conectarle un cable Firewire. Abajo pongo un par de imágenes para que te des una idea de cómo son:
Esta tarjeta tiene dos puertos FireWire (se pueden conectar 2 cables al mismo tiempo) y un USB


Esta ofrece dos FireWire y dos USB


Esta es una para "lactoc" (lactoc = laptop de un mexicano, jeje)


Lo siguiente que necesitas es un cable. Este es fácil de conseguir y en la mayor parte de las veces viene "gratis" si compras una tarjeta FireWire (quesque gratis porque con lo que te cuesta la tarjeta ya te lo cobraron). El cable que necesitas tiene dos puntas que son diferentes, como puedes observar en esta imagen:


Una vez con la tarjeta instalada y el cable, se conectan a la cámara y a la compu como lo muestra la siguiente imagen:


Entonces prendes la cámara de video y Windows XP lo reconoce en automático (si no lo reconoce, seguramente tu cámara viene con un CD de drivers para instalarlos) y aparece una ventanita en la pantalla preguntándote con qué programa quieres capturar el video. Allí puedes elegir Windows MovieMaker, Adobe Premiere o lo que tengas instalado. El procedimiento para cada uno es un poco diferente y te tocará estudiar un poco. En un futuro no muy lejano, pienso subir material para capturar y hacer la postproducción de un video usando Movie Maker, tal vez en un futuro en Premiere y luego quien sabe.

¡Que te diviertas!

24 septiembre 2007

¿Necesitas un control común?

Muchas veces en la vida del programador de Visual Basic 6, hay la necesidad de pedir datos al usuario. Por ejemplo, cajas que te permitan abrir un archivo, imprimir algo, elegir tipo de letra o cambiar un color. Podrías hacer tus propias ventanitas (como hemos hecho muchos), sin embargo algunas personas consideradas de Microsoft agregaron una onda que se llama CommonDialog que te permite hacer este tipo de monerías.
Ahorita voy a hacer un simple ejemplo que, antes de abrir una ventana, abre una caja de diálogo que te pida un color. Después de esto, asigna ese color a la ventana principal.
Antes que nada, creo un nuevo proyecto. El Common Dialog no es un control "estándar" de Visual Basic 6, así que hay que agregar el componente. Para esto me voy al menú Project y elijo la opción de Components, como ves en la siguiente figura:


Al elegir esta opción, aparece la siguiente ventana:


Esta ventana te permite agregar nuevos componentes a tu proyecto (o sea, otros controles). "Tacha" la cajita que está a un lado del componente Microsoft Common Dialog Control 6.0 y aprienta el botón Aceptar. En este momento se agrega un nuevo control en la barra de herramientas que se ve así:


Entonces, selecciona este control y dibújalo en la ventana Form1 (o como le hayas puesto). Aparece en la ventana, sin embargo a la hora de ejecutar el programa, permanece invisible. Mi ventana se ve así:


Ahora voy a programar el Form1_Load para que aparezca la caja que va a pedir el color. El código se ve así:


¡Listo! Para ver sintaxis y ejemplos de como usar este control para abrir archivos, imprimir, cambiar tipo de letra, etc. te recomiendo estas dos páginas: Wikilearning y del MSDN Library. ¡Hasta la próxima!

Concurso de programación en la Univa

Estimados alumnos de prepa, nos han extendido la invitación de participar en un concurso de programación. Parece estar interesante.

Si estás interesado, puedes ver la convocatoria aquí y avísenme para estar al tanto.

¡Saludos!

23 septiembre 2007

Cablecitos y cablesotes... ¿cómo le hago?

Después de haber pensado largo y tendido acerca de la manera en que voy a conectar mi red, hay que pensar en los cables. Como dije en el mensaje anterior, lo primero es planear. Pero acabando eso, hay que comenzar a hacer cables.

Para no redundar en explicaciones repetidas que ya existen en el internet, encontré este sitio que se me hace una referencia excelente. Tiene dibujitos paso a paso para que veas cómo se hace. Fíjate y lo verás.

¡Seguimos en contacto!

¿Crees que estás listo para instalar una red?

¿Qué es lo primero que se te ocurre cuando piensas en instalar una red? ¿Hacer cables? ¿Conectar tarjetas de red en las computadoras? ¿Precios de Hubs (o concentradores), access points, cable UTP, conectores RJ-45 y otros cybertiliches que sirven para conectar una red?

Antes de empezar con todo esto, quiero darte una palabra de sabiduría. En la Biblia, en el libro de los Proverbios, hay todo tipo de palabras sabias para jóvenes como nosotros (conste que todavía me considero joven apenas a mis 34 primaveras). Al autor de este libro (que dicen que fue el rey Salomón) se le ocurrió dar un buen consejo para todos aquellos que piensan instalar una red: Cuando no hay consulta, los planes fracasan; el éxito depende de los muchos consejeros (Prov. 15,22). ¿Qué quiere decir esto? Que es importante planear, pensar e incluso preguntar a otros si es necesario, antes de implementar una red.

Aunque hay muchos que les encantaría quedarse con tu dinero y decirte cómo instalarlo, mejor te ahorras una lana y lo planeas tu solo (o si quieres darme una lana a mi por haberte dado este consejo, con humildad aceptaré tu dinero, jeje). No tiene gran ciencia, pero es importante que no te apresures en la planeación (porque los errores cue$tan), escribas el plan de la red (algo muy breve) y le pidas a alguien que lea el plan de red que hiciste, especialmente alguien que sepa de redes (estos son los consejeros que menciona Proverbios).

Una vez que tienes en cuenta esto, tienes que conseguir la información acerca de los nodos que estarán conectados a la red. En una red pequeña, por lo general, todos los nodos son computadoras, así que tienes que anotar en algún lado, el procesador que tiene (y su velocidad, de preferencia), el tamaño del disco duro (y su espacio libre), la cantidad de memoria (RAM), el sistema operativo (y versión), tipo de impresora conectada a la compu (si es que hay), el software que usan las máquinas y cualquier otro dispositivo conectado a la compu.

¿Para qué recolectar toda esta información? Puede ser un pasatiempo interesante para algunos (de los cuales yo NO me incluyo en ese grupo), pero la utilidad es para saber qué tipo de software va a necesitar, en caso que tenga impresora u otros aparatejos, saber cuales se van a compartir, qué máquina conviene que sea el servidor (si es que van a dejar una como servidor), etc.

Hoy en día, lo más seguro es que vas a usar cable UTP (conocido como RJ-45 por algunos) Categoría 5 para conectar muchos aparatos. Recuerda que aunque tu red sea inalámbrica, en algún lado se necesitan cables. Como ya contemplaste en tu plan, fíjate por dónde quieres que pase el cable. Si va a cruzar sobre el suelo, consíguete unas ondas que cubren el cable para que la gente no se tropiece ni lo desconecte (como estos), si va a ir sobre una pared, usa canaleta (que es como una cajita larga donde el cable va adentro, fíjate en ésta página donde venden) o, si eres de mejor toque artístico y poca lana, usa grapas (aunque se ve bastante mal). Si vas a hacer un hoyo por una pared, hazlo un poco más grande del diámetro de el (los) cable(s) que vas a pasar por el agujero. O sea, puras cosas de sentido común.

Hasta este momento, no se me ocurren otras cosas por hacer. En el siguiente mensaje, voy a hablar acerca de la manera en que se hacen los cables. ¡Hasta la próxima!

19 septiembre 2007

Creando menús con Visual Basic 6.0

Una de las características de los programas actuales es el uso de menús. Desde tiempos remotos, cuando todavía las computadoras no tenían gráficos y la única manera de interactuar con ellas era con un menú. Al principio, eran bastante simples. Imagínate que solo podías usar letras verdes, naranjas o blancas sobre un fondo negro... en fin, eran otros tiempos...

Pero ahora, con nuestro mundo visual con iconitos, botoncitos, mouse y toda la onda, todavía son muy útiles los menús. Solo que ahora han evolucionado mucho y son más agradables. En este mensaje quiero platicarles un poco sobre mi experiencia con menús en Visual Basic 6.0. Para ello, voy a hacer una aplicación muy sencilla, que solo muestre como funciona esto de los menús.

Voy a comenzar con un proyecto nuevo. Solo para evitar el aburrimiento, establezco la propiedad Caption a "Ejemplos de menús". Luego, para crear un menú, presiono el botón del editor de menús. Abajo viene una imagen de la barra de menús de Visual Basic 6.0.


Al presionar el botón del editor de menú, sale la siguiente ventana:


Desgraciadamente, en el Visual Basic 6 se edita el menú aparte de la ventana princioal, o sea que a diferencia de otros controles que dibujas directamente sobre la ventana (o forma), aquí lo creas en otro lado y esperas que se vea chiroliro. Para dibujar un menú directamente sobre la ventana, tendrán que usar el Visual Basic .Net o el 2005.

Pese a lo no-tan-visual de la cosa esta, funciona bastante bien y de manera muy sencilla. Ahora, por mantener la cosa sencillita, voy a hacer un pequeño menú y lo voy a ir ilustrando parte por parte.

Para empezar, el primer elemento en la barra de menú de esta aplicación va a tener un elemento llamado "Mensajes". Para hacer esto, lleno la ventana como indica la figura:


Una nota cultural: pongo el símbolo & adelante de la letra M de Mensajes para que aparezca subrayado y responda cuando el usuario presione ALT+M. Si cierro esta ventana, mi forma Form1 se ve así:


Pero que pasa si quiero poner un menú adentro de mi menú "Mensajes". Vuelvo a abrir el editor de menús, aprieto el botón Next para agregar otro elemento abajo del que ya existe. Lo dejo con estos datos:


Para indentar la opción Hola, presiono el botoncito que indenta (flecha a la derecha). Después que tengo todo hecho y cierro el editor de menú, se ve mi forma así.


Al darle click sobre la palabra "Hola", me aparece la ventana de código listo para programar lo que sucederá cuando nuestro usuario valiente se atreva a seleccionar ese botón:


Voy a teclear código super sencillo que solo haga que aparezca una cajita que diga Hola, se ve así:


¡Listo! Ahora voy a poner más opciones a nuestro menú para poder programarlo chido. El editor de menús se ve así.


Ahora programo todas mis opciones y quedaría algo así:


¡Listo! Tenemos un programa sencillo que funciona con un menú padre. ¡Nos vemos!

17 septiembre 2007

Tipo de letra con Visual Basic 2005

Como habrán notado, hay muchas diferencias en la programación con Visual Basic 6 y el 2005. Uno de estos detalles es la manera de cambiar el tipo de letra de algún control.

Mientras que en Visual Basic 6, escribiría esto:

Label1.FontBold = True

(suponiendo que tienes un control en la forma, llamado Label1), en el 2005 escribirías esto:

Label1.Font = New System.Drawing.Font(Label1.Font, FontStyle.Bold Or FontStyle.Italic)

Si quieres mayores informes sobre este rollo, visita esta liga: http://msdn2.microsoft.com/en-us/library/3essdeyy(VS.80).aspx.

13 septiembre 2007

Otros ejemplos del uso de Karel

Este es otro ejemplo resuelto, muy sencillito, para seguir agarrando la onda acerca de cómo se mueve Karel.
En esta ocasión nuestro héroe (Karel, el robot chiroliro) se encuentra encerrado en un salón, la cual solamente tiene una salida. Después de un buen rato, Karel se aburrió y quiso salir. La misión, si la aceptas, es de crear un algoritmo que resuelva este problema. Si no aceptas el reto, puedes bajar un mundo y el algoritmo aquí.

Para otro ejemplo resuelto más, les planteé el siguiente problema a un grupo de alumnos:

Hace mucho tiempo en un lejano mundo virtual, vivía Karel, un amigable robot aventurero. Pese a que era muy amigable, tenía enemigos. En una ocasión, Sock, el mago villano más tremebundo y maloliente de la virtualidad, encerró a Karel en un laberinto. Los laberintos están conformadas por paredes a los lados que solo conducen en un solo sentido y tienen solamente una entrada y una salida. A la salida, hay un zumbador que le recuerda a Karel que su misión ha terminado. El reto es, si lo aceptas (y no te queda de otra, sino repruebas el parcial), es hacer un programa que salve a Karel de las garras de este tipejo, que le permita escapar del laberinto.

Les sugerí 3 mundos para que lo probaran (aunque se supone que un algoritmo debe poder funcionar en cualquier lado) y estas son algunas ideas que me entregaron en el 3er semestre de los técnicos en informática administrativa del bachillerato. Aunque funcionan, todos son sujetos a mejoras. ¿Puedes optimizarlos?

Este lo entregaron Alfredo y Augusto Octavio:

Esta es la solución de Andrea y Julio. Funciona para casi todos los laberintos, pero creo que en laberintos muy complicados tal vez no funcione. ¿Qué crees tu?
Mariana 1 y Claudia aprovecharon el hecho de que hay un zumbador al final del laberinto para escribir esto:

Si estás interesado en resolver más problemas, encontrar nuevos retos, descubrir nuevos horizontes, y otras cosas por el estilo, te recomiendo que visites esta liga: http://cbtis122.net/omi/karel/problemas.php. Son puros problemas en espera de tu solución.

¡Que te diviertas!

06 septiembre 2007

Karel, el robot misterioso...

Al leer este título tal vez te estés preguntando ¿qué #$!¡@ es Karel? ¿Por qué es interesante conocerlo? Espera un segundo, y lo verás (espero :S).

Karel el robot es un lenguaje de programación que no tiene ningún fin práctico, es decir, no voy a usar Karel para hacer un sistema de bases de datos para una empresa, ni nada de ese estilo. Sin embargo es un simulador de un robot que usa instrucciones muy sencillas y bien estructuradas que lo hacen muy útil para agarrar la onda acerca de la programadera. Yo lo he visto útil para desarrollar la lógica necesaria para resolver problemas con la computadora.

Karel es un robot que vive en su propio mundo (bueno, también conozco a muchas personas que también viven en su propio mundo, pero no voy a platicar de eso hoy...). En este mundo virtual solamente existen los siguientes elementos:
  • Calles (horizontales) y avenidas (verticales) que cruzan en esquinas.
  • Paredes impenetrables que se pueden colocar entre dos esquinas.
  • Zumbadores. No sé realmente lo que son, pero son objetos que se colocan en las esquinas para que Karel los recoge y los guarde en su mochila. Siendo creativos, puedes usarlos para hacer sumas, restas, etc.
  • Karel, el héroe de la historia. Este supuesto robot (que realmente es una flecha pichurrienta, jeje) carga una mochila del tamaño del mundo entero donde puede almacenar todos los zumbadores que quiera. Siempre se encuentra orientada hacia una de cuatro direcciones (norte, sur, este u oeste, como lo dice una de las canciones favoritas de mi hija que está aquí). Consta de 3 sensores que le permita ver si hay pared o zumbador a su izquierda, derecha o al frente.

La única manera de comunicarse con Karel es por medio de un programa escrito en algo muy similar al español estructurado, por lo que es muy sencillo.

El programa lo puedes descargar aquí. Va a bajar una carpeta comprimida (formato ZIP) con todos los archivos que necesitas. No existe programa de instalación, así que ni te apures. Descomprime la carpeta en tu disco duro y haz un acceso directo del archivo Karel.exe a tu escritorio o menú inicio o donde quieras.

Karel tiene 3 "ambientes" principales:
  • El mundo virtual: es donde puedes posicionar a Karel, colocar zumbadores, poner o quitar paredes, etc. Puedes guardar estos "mundos" en formato MDO para usarlos luego.
  • El ambiente de programación: aquí es donde escribes tu programa usando las instrucciones entendidas por nuestro amigo el robot. Aquí también es donde puedes guardar tu programa (en formato de texto normalazo) y compilarlo. Eso es importante: si no compilas tu programa, no puedes ejecutarlo. Compilar quiere decir que traduce tu código fuente (o sea tu programa escrito en Karel) a un código que entiende la computadora. Al hacer esto también verifica que no tengas errores de sintáxis (o sea, que no te falte un punto y coma, que no hayas escrito avansa en lugar de avanza, etc.) pero no hace nada acerca de errores lógicos (los errores lógicos son los que se dan cuando haces un programa bien escrito que no resuelve el problema que debería resolver).
  • El lugar de ejecución: no, no es aquí donde ejecutan a Karel (estamos en contra de la violencia, jeje), sino que es el lugar donde se ejecuta tu programa en Karel. Está padre porque de un lado ves el código que escribiste y a la derecha está el mundo con Karel. Mientras se ejecuta el programa, se ve una barra que se posa sobre las instrucciones y al mismo tiempo el robot hace lo que allí dice.
Estas son imágenes de estos tres ambientes chiroliros de Karel:

El mundo de Karel como inicia el programa (o sea, sin nada)

El ambiente de programación sin nada


El ambiente de ejecución sin nada

No es mi intención escribir una referencia completa de las instrucciones de Karel porque viene en la ayuda del programa, pero iré poniendo algunos ejemplos para que vayamos agarrando la onda.

El primer programa que voy a mostrar es muy sencillo. Al inicio del programa oriento a Karel hacia el este y quiero que avance hasta toparse con una pared. A su paso quiero que recoja todos los zumbadores que haya en su camino. Con esto quiero mostrar como se usa el ciclo MIENTRAS (o While). Una vez que tope con pared, voy a girarlo hacia la izquierda y que avance 5 esquinas (para mostrar como funcionan los ciclos Repetir o Para [repeat]) recojiendo todos los zumbadores que me encuentre. Una vez que termine, giro a la derecha, avanzo una esquina y dejo todos los zumbadores que llevo cargando.

Este es un mundo que hice como ejemplo. Algo que es muy importante: nunca debes diseñar tu solución en Karel que sea dependiente del mundo que tienes creado. El programa es independiente del mundo y si pongo un mundo diferente al que creaste, debe seguir funcionando. Pero como es el primer programa, supongamos que así está la onda:


Este es el programita que hice. Fíjate que en los ciclos que llevan más de una instrucción, por ejemplo en primero que avanza mientras frente-libre hacer, les ponemos un inicio y fin para delimitar las instrucciones que, en este caso, es otro ciclo mientras anidado (o sea un ciclo en otro ciclo), el mientras junto-a-zumbador hacer, y el avanza.


Aquí pongo un video para que veas como se ejecuta el programa.

Seguimos en contacto. Luego les iré dejando más material, ejercicios, problemas y otros asuntos enigmáticos y paradisiacos. ¡Hasta la próxima!



02 septiembre 2007

Interfaz de Dreamweaver 8

Usar cualquier software es fácil si conoces donde picarle pa' que jale. Por esta razón, hice este pequeño (muy pequeño) video que muestra los diferentes elementos que componen la interfaz de Dreamweaver 8.

Si no pueden ver el video, hagan click aquí. Luego iré haciendo más material. ¡Hasta la próxima!


31 agosto 2007

Una aplicación sencillita usando Visual Basic 6

Solo para arrancar, aquí hay un ejemplo de como crear un programita muy sencilla usando Visual Basic 6.

Se trata de un programa que calcula el cuadrado y el cubo de un numero. Creo que está muy fácil, pero si tienes dudas, déjame un mensaje.

Aquí está el video (por si no aparece abajo) y aquí puedes bajar los archivos del proyecto. ¡Hasta la próxima!


26 agosto 2007

¿Qué es un GUI? ¿No es una grosería?

Aunque suene medio feo, GUI es un acrónimo jalado para decir interfaz gráfico (Graphical User Interface, por aquellos que les guste el lenguaje de Shakespeare) y ningún programa hoy en día puede ser concebido sin una interfaz gráfica y sin un mouse que mover por el escritorio. Antes, en mis tiempos mozos, todos los programas eran de puro texto y uno tecleaba comandos crípticos y extraños a una computadora con un monitor que solo mostraba letras verdes... pero ¡ya no más! Ahora somo de la nueva era de dibujitos en la pantalla.

Ciertamente las interfaces gráficas nos hacen la vida mucho más sencilla (bueno, casi a todos. Los ciegos son los que más batallan, pero se están desarrollando cosas chidas para ellos, como dice aquí) y es por eso que desde que se comenzaron a usar, muchas más personas han entrado a la carrera cybertecnológica y han estado divirtiéndose con su compu, cosa que difícilmente podrían hacer si estuvieran preocupados por memorizar cien mil y pico de instrucciones textuales. Este tipo de interfaces son más intuitivos y sencillos de usar. Podemos resumir diciendo que las interfaces gráficas es la parte visual del programa con la que interactúa el usuario y contiene formas y controles.

Una interfaz gráfica se compone de controles. Pero, ¿qué es un control? Los controles nos rodean por doquier, por ejemplo, hay controles de la TV, la videocasetera, el DVD, la onda del satélite (si tienes tele con SKY o DirectTV), el estéreo de la casa y el del carro, la de la videocámara... Pese a que todos estos controles nos simplifican la vida (o nos vuelve más huevones, según tu punto de vista), no son usados en interfaces gráficas. Para nosotros (por lo menos en lo que se refiere a la programación visual) un control es un objeto visual en la pantalla que le ayuda al programa comunicarse con el usuario ya sea aceptando datos de entrada o desplegando información. Como podrás imaginar, sin controles, los programas no serían muy útiles.

Multitarea y multiprocessing
Cuando hay un programa, como podría ser un servidor de base de datos, se ejecuta en el fondo, o background, es multitarea (multitasking). Esto deja que otros programas se ejecuten en primer plano (foreground). Un programa background carece de interface de usuario, mientras que un programa de primer plano si lo tiene.

Para entender bien como está la movida, es importante entender lo que son los programas front-end y back-end (los voy a dejar en inglés para mayor claridad... a los programadores les encanta hablar en su pseudoinglés mal pronunciado, así que mejor vayan agarrando la onda desde ahorita). Los clientes (entendiéndose el software de un programa de la compu) generalmente corren en el foreground, y por eso se llaman programas front-end. O sea que dan la cara por un desconocido, un software que se ejecuta en el background y por ello se le denomina back-end. En pocas palabras, el front-end es un programa como la secre de un cuate muy ocupado. Los clientes nunca conocen al tipo, pero interactúan con la secre. O sea que accesan al trabajo del cuate (el back-end) pero solo ven la sonrisa y piernas de la secre (el front-end).

Muchas veces se confunde la multitarea (multitasking) con el multiprocesamiento (multiprocessing). Multitarea se refiere a que una computadora hace más de una cosa a la vez, sin embargo el multiprocesamiento es usar más de un CPU para realizar un trabajo (por ejemplo, hoy es bastante común encontrar tarjetas madres para computadoras que aceptan 2 o más CPUs).

Ahora lo que se tiene que hacer, es jugar con las formas (ventanas) y los controles. Y de eso nos ocuparemos en todos mis mensajes acerca de la programación en Visual Basic 6, .net y 2005, aunque también aplica para un montón de otros lenguajes y ambientes de desarrollo (como RealBasic, Delphi, Visual C++, y muchísimos más). Y eso, como diría la viejita, es otra historia.

¡Hasta la próxima!

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...