miércoles, 23 de mayo de 2012

Libros con listados de video juegos en BASIC

Cuando yo era chamo (vaya que este blog se pone bastante nostálgico a veces), las revistas y libros sobre computación muchas veces incluian listados de programas (en BASIC) que uno podía meter en su computadora, ejecutarlos y luego modificarlos a su antojo.  Cuando estos programas eran de video-juegos, yo no los pelaba...

A continuación les dejo los enlaces de algunos de estos libros viejos que encontré digitalizados en la web.  Los programas son en lenguaje BASIC (que era el equivalente de Python en aquellos días).  Lamentablemente, la mayoría de los libros que conseguí estan en Inglés, pero incluyen una explicación detallada de los videojuegos (con código BASIC incluido).  Ustedes pueden tomar alguna idea de estos libros como punto de partida para sus proyectos de videojuegos.


Computer Battlegames

Estos son juegos de batallas.  La mayoria de los juegos en este libro son de texto y muy sencillos, pero creo que al final hay uno o dos juegos que son "de acción" y con gráficos, aunque muy limitados por las capacidades de los computadores en aquella epoca.  Quizás pudiesen tomar la trama de estos como punto de partida para hacerlos más complejos.                                                
Basic Fun with Adventure Games

Aqui se desarrolla un solo juego de aventura de texto, donde la trama es que el jugador es un agente de la CIA (si, del imperio mismo) que esta tratando de buscar evidencia para incriminar al embajador ruso.
Island of Secrets

Otro juego de aventura de texto.
Programa tus propias Aventuras en tu computadora

Este libro es excelente. Se desarrolla el listado para un juego de aventura de texto en una casa embrujada, pero también explica como funcionan las distintas partes de un juego de aventura de texto y cómo diseñarlos.
Creating Simulation Games on Your Computer

Este libro incluye varios programas de juegos de simulación.

¡Que se diviertan!

lunes, 21 de mayo de 2012

Efectos de consola, parte 3

Una escena maritima

En nuestro afan por sacarle el jugo a la cónsola (dejaremos el tema de las interfaces gráficas para luego), en esta entrada ilustraremos cómo crear animaciones simples y agregar color al texto en la cónsola.  Por ejemplo, la escena marítima que ven a continuación fue hecha exclusivamente usando la cónsola de texto:


Por cierto, el script que realiza esta animación fué realizado por Leober Urbano y Daniel Vasquez, ambos estudiantes de mi curso de Python en la UNEFA este semestre (2012-1).  Pero antes de darles el código (con el permiso de ellos), quiero presentarles las secuencias de escape ANSI.

Secuencias de escape ANSI - Un poco de historia

Mucho antes de que existieran los entornos de interfáz gráfica (con ventanitas, ratones, iconos y todas esas cosas a las cuales ustedes se han (mal)acostumbrado), de hecho, antes de que existieran las primeras computadoras personales, la típica configuración computacional era una computadora mainframe con un sistema operativo que permitía el time-sharing y con el cual los usuarios en una sala de computación interactuaban mediante unos terminales de texto, como por ejemplo el famoso VT-100 que ven a continuación (pueden buscar el artículo en la Wikipedia):

Una cónsola VT-100.
Nótese el uso de la palabra cónsola,
aqui bajo su acepción original,
 que se refería a todo el dispositivo
de entrada-salida (pantalla y teclado).

Estos terminales nos parecerian increiblemente limitados hoy en día.  La información era visualizada como caracteres ASCII  y algo llamado "secuencias de escape ANSI" que permitía visualizar estos caracteres con otros atributos (por ejemplo, resaltados, subrayados, parpadeando, etc.).  Además, las secuencias de escape ANSI permitían (y permiten todavía como vamos a ver) controlar en cuál parte de la pantalla se visualizaba la información. Las secuencias de escape ANSI pronto se conviertieron en un estándar para todas las consolas, igual que los caracteres ASCII.

Aunque ustedes no me crean, yo llegué a usar estas perolas cuando estudiaba computación en la Universidad Central de Venezuela (a principio de los 90's).  Las consolas en cuestión estaban conectadas a una Burroughs B6700, a la cual nosotros en la Escuela de Computación nos referiamos, no tan cariñosamente, como la "Burro".

Secuencias de escape ANSI - ¿que son?

Todo comando para lograr los "efectos especiales" como los que se ven en la animación de arriba comienza por imprimir (mediante una sentencia print en Python) un iniciador de secuencia de control, o CSI por sus siglas en inglés.  Existen CSI's de un caractér, como por ejemplo los que emitimos para dar un salto de línea, una tabulación horizontal o vertical, mandar un beep al terminal.  Estos CSI's de un caracter fueron expuestos en la primera parte de esta serie de entradas sobre efectos de la cónsola.  Ahora, los que nos interesan son los comandos que podemos emitir con el CSI de dos caracteres: ESC+[ (un caracter de escape, código ASCII 27 en decimal, más el caracter de corchete cuadrado izquierdo, código ASCII 91 en decimal).  Por ser el primer caracter el ESCape, las secuencias de control que comienzan con este CSI se conocen como secuencias de escape ANSI.  Despues del CSI, los otros caracteres que se imprimen a continuación indican más información sobre la secuencia de control.  A continuación una lista no exhaustiva:

Comandos ANSI para posicionamiento de cursor, desplazamiento o borrado


Comando
(Secuencia de caracteres)
Descripción
CSI n A Mueve el cursor n caracteres (por defecto n=1) hacia arriba.
CSI n B Mueve el cursor n caracteres (por defecto n=1) hacia abajo.
CSI n C Mueve el cursor n caracteres (por defecto n=1) adelante (hacia la derecha).
CSI n D Mueve el cursor n caracteres (por defecto n=1) atrás (hacia la izquierda).
CSI n E Mueve el cursor al principio de la línea y n líneas (por defecto n=1) hacia abajo.
CSI n F Mueve el cursor al principio de la línea y n líneas (por defecto n=1) hacia arriba.
CSI n G Mueve el cursor a la columna n.
CSI n;m H Mueve el cursor a la posición indicada por la fila n y la columna m (por defecto n y m son iguales a 1). La posición (1,1) es la esquina superior izquierda de la ventana.
CSI n J Borra parte de la pantalla. Si n=0 (valor por defecto), limpia la pantalla desde la posición del cursor hasta el final. Si n=1, limpia la pantalla desde el cursor hasta el principio de la pantalla. Si n=2, limpia toda la pantalla.
CSI n K Borra parte de la línea. Si n=0 (valor por defecto), limpia desde la posición del cursor hasta el final de la línea. Si n=1, limpia desde el cursor hasta el principio de la línea. Si n=2, limpia toda la línea. La posición del cursor no varía.
CSI n S Desplaza toda la pantalla n líneas hacia arriba (por defecto n=1) insertando las n líneas desde abajo.
CSI n T Desplaza toda la pantalla n líneas hacia abajo (por defecto n=1) insertando las n líneas desde arriba.
CSI 6 n Captura la posición actual del cursor como si el usuario la hubiese ingresado por teclado. Se devuelve la siguiente secuencia de caracteres: ESC[n;mR , donde n y m son los números de fila y columna respectivamente. Notese que en esta secuencia de escape (CSI 6 n), la n representa una n minúscula y no un número pasado como parámetro.
CSI s Guarda la posición del cursor.
CSI u Restaura la posición del cursor a la posición guardada por CSI s.
CSI ?25l Esconde el cursor.
CSI ?25h Vuelve a visualizar el cursor.

En las secuencias de escape antecedentes, las letras n y m en cursiva representan parametros numericos que se pasan al interprete ANSI.  Así por ejemplo, la secuencia ESC[2;40H ubicaría la posición del cursor en la fila 2, columna 40.

Existe una secuencia de escape especial para modificar los atributos de los caracteres enviados a la pantalla.  Es la secuencia de escape especial de rendición gráfica (SGR por sus siglas en inglés), que se corresponde a

CSI n;[k] m

En lo anterior, n y k son parámetros númericos, k es un parámetro opcional.  Nótese que la secuencia de escape termina en m minuscula.  A continuación una descripción de los atributos modificables mediante el o los parámetros n y k:

Comandos de rendición gráfica


Parámetro Descripción
0 Restaura todos los atributos de rendición grafica a los valores por defecto (reset).
1 Coloca texto en negrillas o alta intensidad.
4 Coloca texto subrayado.
5 Coloca texto en parpadeo lento.
6 Coloca texto en parpadeo rápido.
7 Invierte (intercambia) los colores de fondo y de primer plano.
21 Desactiva las letras en negrilla y visualiza el texto en intensidad normal.
24 Desactiva el subrayado.
25 Desactiva el parpadeo.
30-37 Fija el color del texto (primer plano) en baja intensidad. El segundo dígito despues del 3 indica el color. Ver tabla anexa abajo.
40-47 Fija el color de fondo en baja intensidad.El segundo dígito despues del 4 indica el color.Ver tabla anexa abajo.
90-97 Fija el color del texto (primer plano) en baja intensidad.El segundo dígito despues del 9 indica el color. Ver tabla anexa abajo.
100-107 Fija el color de fondo en baja intensidad.El segundo dígito despues del 10 indica el color. Ver tabla anexa abajo.

Tabla de colores


Intensidad 0 1 2 3 4 5 6 7
Baja Negro Rojo Verde Amarillo Azul Magenta Cyan Gris claro
Alta Gris oscuro Rojo Verde Amarillo Azul Magenta Cyan Blanco

Haciendo uso  ingenioso de estas secuencias de escape y de algunos caracteres especiales unicode, Leober y Daniel hicieron su script para realizar una pequeña animación de un barco navegando:

import time
velas1= " "*5+u"\u2571"+u"\u23AA"+" "+u"\u23AA"+u"\u2572"
velas2= " "*4+u"\u2571"+" "+u"\u23AA"+" "+u"\u23AA"+" "+u"\u2572"
velas3= " "*3+u"\u2571"+"__"+u"\u23AA"+" "+u"\u23AA"+"__"+u"\u2572"
mastiles= " "*6+u"\u23AA"+" "+u"\u23AA"
timonel= " "*2+u"\u2599"+u"\u2588"*10+u"\u259f"
print "\n"*5
print "\033[11;0H"+"\033[0;34;44m"+u"\u2588"*80+"\033[0m"
for i in range(20):
 v=i+1
 print "\033[6;%dH"%v+velas1
 print "\033[7;%dH"%v+velas2
 print "\033[8;%dH"%v+velas3
 print "\033[9;%dH"%v+mastiles
 print "\033[10;%dH"%v+timonel
 time.sleep(0.5)
while i>0:
 v=i+1
 print "\033[6;%dH"%v+velas1+"\033[0K"
 print "\033[7;%dH"%v+velas2+"\033[0K"
 print "\033[8;%dH"%v+velas3+"\033[0K"
 print "\033[9;%dH"%v+mastiles+"\033[0K"
 print "\033[10;%dH"%v+timonel+"\033[0K"
 i=i-1
 time.sleep(0.5)

Referencias

  1. Wikipedia (2012). "ANSI escape code".  Artículo de Wikipedia disponible en: http://en.wikipedia.org/wiki/ANSI_escape_code. Nota: existe una versión en castellano de este artículo pero no es tan completa como la versión citada.
  2. Wikipedia (2012). "VT100". Artículo de Wikipedia disponible en: http://es.wikipedia.org/wiki/VT-100.
  3. s/a (2001). "Escuela de Computación|UCV|historia". Página web disponible en: http://www.ciens.ucv.ve/escueladecomputacion/inicio/historia
  4. s/a (2008). "Print in terminal using colors with python?". Pregunta en foro disponible en: http://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python.

miércoles, 16 de mayo de 2012

Proyectos de Video-juegos semestre 2012-1

Hola a todos:

Tal como conversamos en clase, publico esta entrada en el blog para que me informen por vía de comentarios a esta entrada cuales son los grupos de trabajo y cual es la propuesta de video-juego de cada equipo.  Quiero que revisen con atención las entradas anteriores correspondientes al proyecto de video-juegos para el curso del semestre 2011-1, cuando dicté esta materia en la UNEFA.  Especificamente, quiero que consideren los siguientes puntos:

  1. Los mecanismos de co-evaluación diseñados por los estudiantes de aquél curso, los cuales se plasmaron en forma de una hoja de calculo con los criterios de evaluación y la ponderación de cada item.  Podemos comentar sobre la evaluación debajo de esta entrada.
  2. La dinámica de participación, las preguntas y las respuestas, los problemas con los que se topó cada equipo en el desarrollo de su video-juego y las soluciones a esos problemas.  Recuerden algo: ningún proyecto de programación de cierta envergadura sale bien la primera vez.  Siempre surgen errores, bugs, comportamientos inesperados, etc. Eso es algo normal en la dinámica del desarrollo de este tipo de proyectos, de modo tal que no se preocupen si su proyecto no está 100% acabado para la fecha de entrega.  La idea de debatir sobre estos trabajos en el blog es que todos podamos colaborar con los mismos.
  3. La mayoría de los equipos en el 2011-1 crearon blogs o páginas para servir de vitrina de sus respectivos video-juegos.  Un équipo en particular, el équipo del juego MundoLibo, habilito una cuenta en sourceforge para hospedar su trabajo.  Por si no lo saben, sourceforge es un servicio de hospedaje para desarrollo de aplicaciones en el cual los usuarios pueden comunicarse con los programadores para solventar dudas o bugs y descargar los binarios o programas de instalación de la aplicación.  Para los programadores/desarrolladores, sourceforge brinda muchas herramientas interesantes: control de versiones, herramientas para el desarrollo colaborativo, etc.  Consideren trabajar con sourceforge u otra herramienta similar (GitHub?).

sábado, 5 de mayo de 2012

Efectos de consola, parte 2

Sistemas de codificación de caracteres - Unicode


En la parte 1 de esta serie de posts vimos cómo imprimir algunos caracteres especiales que normalmente no podríamos indicar encerrandolos entre comillas. Para indicar estos caracteres, utilizabamos lo que se llaman secuencias de escape y en particular, había una para imprimir cualquier caracter ASCII- \xhh, en donde hh son los dos dígitos hexadecimales que conforman el còdigo ASCII del caracter.

El código ASCII es un estándar para la representación de símbolos y caracteres alfanuméricos. Cualquiera de los símbolos de uso común se podía representar como un byte (un octeto de bits) y consecuentemente, la tabla de caracteres ASCII comprendía hasta 256 símbolos. Entre estos, los primeros 128 símbolos eran comúnes a todos los sistemas de computadoras y comprendian el conjunto de símbolos de puntuación, el espacio, las 26 letras mayúsculas y minúsculas (excluyendo la eñe, la c con cedilla y otros caractéres regionales) y los 10 dígitos numéricos, o sea, los símbolos que comúnmente figuran en cualquier teclado.

Pronto se vió la necesidad de extender este conjunto de símbolos para poder incluir símbolos y letras de otras lenguas no europeas que usaban alfabetos distintos al romano. Ya de por sí el ASCII (por lo menos el conjunto de los primeros 128 símbolos verdaderamente estándar) era insuficiente para representar caracteres particulares de algunas lenguas europeas (como la ñ o las vocales con acentos en español, las vocales con dieresis y la ß alemana, etc.). Con esto en mente, se creo el estandar unicode a finales de la década de los 80.

Los códigos unicode son de longitud variable y las tablas de caracteres unicode se pueden consultar en http://www.unicode.org/charts/. A continuación un resúmen de los bloques de caracteres que me parecieron más interesantes:

Bloque Unicode Descripción
0000–007F Caracteres de control y Latin básico (este bloque es igual al primer bloque de los 128 caracteres ASCII)
2300–23FF Caracteres técnicos miscelaneos: símbolos de ingeniería, computación, químicos, diagramas eléctricos, etc.
2500–257F Caracteres para dibujo de cajas
2580–259F Bloques y cuadrantes.
2600-26FF Símbolos miscelaneos y de juegos: meteorología, astrología, signos viales, piezas de ajedrez, dados, símbolos religiosos y políticos, etc.
2700–27BF Dingbats - más símbolos miscelaneos.
2B00–2BFF Figuras geométricas y flechas


Existen dos sistemas de mapeo de caracteres unicode: el UTF (Unicode Transformation Format) y el UCS (Universal Character Set). Entre los sistemas UTF, los encodings (sistemas de codificación) más usados son el UTF-8, el UTF-16 y el UTF-32. Básicamente, el encoding UTF-8 es un encoding de 8 bits en los cuales cada caracter se representa como una secuencia de longitud variable de bytes (de 1 a 4 bytes). El UTF-8 permite una máxima compatibilidad con el sistema de codificación ASCII, pues los primeros 256 caracteres (codificación de 1 byte de longitud) son los caracteres ASCII. Los sistemas UTF-16 y UTF-32 son para máquinas con arquitecturas de 16 o 32 bits, lo cual no quiere decir que en estas máquinas no se pueda usar la codificación UTF-8.

Métodos de entrada de caracteres Unicode y cómo trabajar con Unicode en Python

En Linux, podemos ingresar caracteres Unicode desde la consola o editor de textos (o inclusive desde este navegador) apretando las teclas CTRL ( ⌃⃣ ) y SHIFT ( ⇧⃣ ) juntas.  Manteniendo estas teclas apretadas, tecleamos la letra "U"  seguida de los cuatro dígitos hexadecimales correspondientes al código Unicode del caracter que queremos.  Así por ejemplo:


Secuencia de Teclas Aparece el símbolo
⌃⃣ + ⇧⃣ + U⃣ + 2⃣ + 3⃣ + 1⃣ + A⃣ de un reloj: ⌚
⌃⃣ + ⇧⃣ + U⃣ + 2⃣ + 5⃣ + 0⃣ + C⃣ esquina de una caja: ┌
⌃⃣ + ⇧⃣ + U⃣ + 2⃣ + 6⃣ + 1⃣ + 5⃣ taza de té caliente: ☕
⌃⃣ + ⇧⃣ + U⃣ + 2⃣ + 6⃣ + 3⃣ + A⃣ soy feliz tomando té: ☺

Para trabajar con expresiones en Python que contengan caracteres unicode en literales de cadena, tenemos que agregar la letra u antes de las comillas del literal de la cadena.  Dentro de las comillas, colocamos la secuencia de escape \u (Ver Efectos de consola, parte 1) seguida de los cuatro digitos hexadecimales del caracter.  Al imprimir estas cadenas, se verán los caracteres unicode indicados por las secuencias de escape.  De esta forma, uno de mis estudiantes del curso de Python que dicto en la UNEFA creo un pequeño script en Python que dibuja una embarcación:

b=u"\u005C"
a=u"\u002F"
c=u"\u005F"
d=" "
e=u"\u25a0"
f=u"\u2551"
g=f+c+f
ab=g+c+g+c+g+c+f+c+c+f
cadena1=(2*d)+b+(11*c)+a+(2*d)
cadena2= d+b+(13*d)+a+d
cadena3=b+15*e+a
cadena4=2*c+a+2*c+e+c+e+c+e+c+e+c+b+3*c
cadena5=3*d+a+8*c+b+4*d
cadena6=(4*d)+f+c+g+c+g
cadena7=(5*d)+c+c+c+c+c+c+(2*c)+c+(5*d)
print cadena7
print cadena6
print cadena5
print cadena4
print cadena3
print cadena2
print cadena1


Este script dibuja un barquito en la pantalla:
     _________     
    ║_║_║_║_║
   /________\    
__/__■_■_■_■_\___
\■■■■■■■■■■■■■■■/
 \             / 
  \___________/  

domingo, 29 de abril de 2012

Efectos de consola, parte 1

Cuando aprendemos a programar en Python, nuestros programas interactúan con el usuario a través de algo llamado la "consola".  La consola es una ventana donde sólo se visualiza información de texto- nada de gráficos, menús desplegables, gadgets ni nada de esas cosas a las cuales nos han (mal?) acostumbrado aplicaciones que usan GUIs (Graphical User Interface).  Siendo Python un lenguaje de alto nivel utilizado para desarrollar aplicaciones rápidamente en sistemas operativos modernos, es evidente que existe en este lenguaje formas de incluir GUIs en nuestras aplicaciones.  Por ejemplo, podríamos usar las librerías de Tcl/Tk para crear estas interfaces gráficas.  Sin embargo, hay que aprender un poco más de Python y de programación para poderlas usar y se supone que nosotros somos principiantes...

En esta serie de posts, vamos a comentar un poco sobre como lograr ciertos "efectos" con la consola.  Vamos a empezar con los más básicos.

Cuando dentro de un literal de cadena incluimos un caracter de barra diagonal invertida ("\"), estamos indicandole al interprete de Python que queremos imprimir un caracter especial.  La barra diagonal invertida se conoce como caracter de escape y la secuencia completa de la barra diagonal más otro caracter se conoce como secuencia de escape.  Algunas secuencias de escape son:

\n  Salto de línea.  Ejemplo:

               print "Esto se coloca en una línea.\nY esto va en la siguiente línea"

        Imprime lo siguiente:

      Esto se coloca en una línea.
      Y esto va en la línea siguiente

\r   Es el retorno de carro, con lo cual se ubica el cursor al principio de la línea actual. Ejemplo:

      print "Esto se coloca en una línea.\rVolvemos al principio."

        Imprime lo siguiente:

      Volvemos al principio.línea.


\b Es el backspace, que retrocede el cursor una posición a la izquierda.  Ejemplo:

      print "José\b\b\b\bLuis aprende Python."

      Imprime lo siguiente:

      Luis aprende Python.


\"   Imprime comillas.  Recuerde que para definir cadenas en Python las encerramos entre comillas, pero si queremos imprimir una comilla, necesitamos indicarla de alguna forma que Python no "piense" que estamos delimitando el principio o el fín de una cadena.  Ejemplo:

      print "Cuando corri mi primer programa de Python, la salida leía \"Hola Mundo\""

       Imprime lo siguiente:


       Cuando corri mi primer programa de Python, la salida leía "Hola Mundo"

\a   Emite un "beep" sonoro.  Ejemplo:

            print "¡Despierta!\a"


        Imprime "¡Despierta!" y luego suena un beep.

\t   Tabulador horizonal.  Ejemplo

        print"Esto es una tabla:\nJosé\t1\nMiguel\t2\nPedro\t3\n"

        Imprime lo siguiente:

        Esto es una tabla:
        José    1
        Miguel  2
        Pedro   3


\v  Tabulador vertical.  Ejemplo

        print "Tabulador vertical\vSiguiente línea..."

        Imprime lo siguiente (observe que salta a la siguiente línea pero mantiene la posición horizontal del cursor):

        Tabulador vertical
                          Siguiente línea...



\f  Form feed.  En las impresoras, esto hacia que se alimentara la siguiente hoja de papel.  En la consola, el efecto es aparentemente igual al del tabulador vertical.  Ejemplo:

        print "pagina 1\fpagina 2\fpagina 3"


        Imprime:

        pagina 1
                pagina 2
                        pagina 3


\xhh   Imprime el carácter cuyo código ASCII es hh.  Ejemplo:

        print "Una a mayuscula: \x41"

        Imprime:

        Una a mayuscula: A


Es interesante notar que todos los caracteres especiales que se mencionan en todas estas secuencias de escape (salvo la última) representan carácteres con códigos ASCII definidos.  Así por ejemplo, la secuencia "\t" representa un solo caracter cuyo código ASCII es 9 (en decimal).  Veamos los códigos ASCII correspondientes a algunas de estas secuencias de escape:

    print "Salto de línea\t\t"+str(ord("\n"))+"\nRetorno de carro\t"+str(ord("\r"))

Con lo cual se imprime:

    Salto de línea      10
    Retorno de carro    13


La función ord() devuelve el código ASCII correspondiente al caracter suministrado en su argumento.  La función str() convierte el número entero que devuelve ord() a una cadena, para que se pueda concatenar todo como una sola cadena.  Otra función relacionada es chr(), la cual devuelve el caracter asociado al código ASCII que se suministra como su argumento.  Si queremos imprimir carácteres que no aparecen en nuestro teclado, buscamos su código ascii y lo indicamos mediante la función chr() o mediante la secuencia de escape "\xhh" donde hh es el código ASCII del carácter en cuestión, pero en hexadecimal.


domingo, 17 de julio de 2011

Video juegos en Python: Sanson y los Filisteos

Sanson y los Filisteos
Por:
Garcia, Jocabed
Moreno, Mariana
(Sección B)

Dice la historia que Sansón era un hombre con mucha fuerza,  en una oportunidad iba de camino a visitar a su amada y le salió al encuentro un león el cual mato tomándolo por la boca y abriéndola, se enfrentaba a miles de filisteos y nadie podía con el, en otra oportunidad estaba en el desierto  y los filisteos le tendieron una emboscada, Sansón para defenderse tomo la quijada de un asno muerto que estaba allí y con ella venció a sus enemigos aquel día. Su gran fuerza permanecía mientras no cortara su cabello.
 
Inspirados en esa historia  surge  el juego “Sansón y los filisteos” donde Sansón no puede dejarse tocar por las tijeras ni los filisteos porque sino  va perdiendo vidas, aparecen leones los cuales debe tomar para tener fuerza, la quijada del asno esta representada por los disparos, al impactar con las tijeras o los filisteos estas se desaparecen, pero cuidado, a medida que transcurre el juego van apareciendo mas y mas filisteos.
 Página oficial del juego:  http://sanson-filisteos.blogspot.com/ 


sábado, 16 de julio de 2011

Video juegos en Python: Un Paréntesis (Parte III)

Hola a todos:

Mis felicitaciones a todos los equipos - sus juegos están muy buenos.  Una vez más, no dejen que esto muera aquí- esto es solo el comienzo.  Traten de continuar depurando sus juegos y comentando colaborativamente como vienen haciendo ahora.  Yo por mi parte siento que el aprendizaje durante esta última semana ha sido enorme y deberían de tomar en cuenta esto a la hora de evaluar.   Por cierto, les pongo a continuación las estadísticas de mi blog, donde aparecen el número de visitas a cada post, o juego:


Esto sería una especie de ranking de popularidad o nivel de expectativa que ha generado cada juego.  Claro, no es del todo exacto porque hay que recordar que algunos de estos juegos tienen su blog aparte, el cual a su vez también ha recibido visitas.  Además, por ejemplo el juego de Astuto Ben aún no figura en este ranking porque recién acabo de colgar el post.  Sin embargo, me parece bastante indicativo que Tayupolandia- perdón, Algorítmia - haya generado tanta expectativa, a pesar de no estar terminado.  Creo el pueblo clama por una explicación completa del proyecto de la trama del juego, y con esto se hace patente que la trama es un elemento muy importante del juego.  Muchachos de Algorítmia, nos deben una explicación ....

Otro punto interesante es la baja cantidad de visitas de MundoLibo.  Claro, este juego tiene su propio blog, pero a mi me parece que la propuesta de estos muchachos ha sido subestimada.  La trama como tentativa para inducir a niños al uso del Libre Office es una propuesta muy original (esa es mi opinión).  Los chamos del Helicóptero han hecho un juego sencillo pero bastante adictivo y completo en sí.  Más importante aún, han logrado corregir los errores iniciales y obtener una versión definitiva de su juego.  Paseando por Venezuela es otra propuesta que ha generado mucha expectativa, pero no he podido subir los archivos que me enviaron porque como dije en otro post, mi conexión está pésima.  Insisto en que desaprovechamos el juego del ahorcado como ocasión para aprender de Tkinter.  En realidad, insisto en que no hemos tenido tiempo para revisar los méritos de cada propuesta, razón por la cual, repito, deberíamos de continuar activos en este foro.  Que no se sientan mal aquellos cuyas propuestas no mencioné aquí- pues como ya dije todas son excelentes.

Con respecto a las evaluaciones, algunos me han comenzado a enviar sus formatos de evaluación (recuerden que en formato ods).  Con la sección B acordamos en que Barbara Leota recibiría todos los formatos de evaluación y los juntaría para entregarme una sola nota (el 60% de la nota de la materia) para cada estudiante.  Esto afín de agilizar el proceso de entrega de notas a la coordinación.  Con la sección A sugiero que nombren a una persona para acopiar todos los formatos de evaluación.  Si pueden al final de la jornada imprimir estos formatos con el 60% definitivo de cada alumno y hacerlo firmar sería mejor aún.  En todo caso yo debo imprimir las actas de la materia y hacerlas firmar por ustedes antes del miercoles.

Video Juegos en Python: Astuto Ben

Astuto Ben
Por:

Blanco Laudis
Carrasquel Rosmauris
Guayapero Reynaldo
Leota Bárbara
Mendoza Diana
Pulido Naicelis
(Sección B)
Finalmente, lo que todos esperaban: Astuto Ben (No contaban con mi astucia!).  Pido disculpas a todos por crear este post a última hora - mi conexión a Internet está pésima.  Voy a dejarles solo la imagen de la pantalla del menú principal, de abreboca:
 
 
Su blog es  http://astuto-ben-python.blogspot.com/ y los archivos de descarga están en sourceforge: https://sourceforge.net/projects/videojuegoastut/files/.  Ahora la avalancha de preguntas y comentarios....

viernes, 15 de julio de 2011

Video juegos en Python: Algorítmia

Algorítmia
Por:
Bonillo, Axel
Santaella, Vincent
Tayupo, José
Tovar, Gustavo
Urbina, Katherine
(Sección B)

Ya "TayupoLandia" tiene un nombre- se llama Algorítmia.  Creo que es bastante interesante y merece la pena que le echen un vistazo:

Tayupo me estuvo contando algo sobre la trama del juego y me decía que esta aún incompleto.  Tendrá que ser él y su grupo quienes comenten sobre ello en este post.

El enlace para su descarga es este de aquí.

La página oficial del juego es  http://algoritmia-python.blogspot.com/.

jueves, 14 de julio de 2011

Video Juegos en Python: Un paréntesis (Parte II)

Otro paréntesis, si me lo permiten (y sino también):

El arte y ciencia de producir videojuegos es muy novedoso y creo que necesitamos ir sistematizando los conceptos y técnicas.  Sistematizar es algo que les viene fácil a ustedes como estudiantes de sistemas.  Comenzaré por sugerirles una lectura es castellano sobre las bases conceptuales de los videojuegos (el enlace aquí, por cierto es una traducción por Ciro Duran).  No lo he leido completo, pero ojeandolo encontré esto que dice el autor con respecto a la "ciencia y arte de diseñar videojuegos":

En unos pocos años hemos alcanzado finalmente lo que yo veo como una masa crítica de escritura de conceptos, análisis formales y entendimiento práctico y teórico para ser capaces de llenar el curriculum de una universidad... o por lo menos, en este caso, un curso de diez semanas.

Ok, eso no es enteramente justo. Existe actualmente una gran cantidad de material relacionado con el diseño de juegos y muchos libros (con muchos más siendo publicados a un ritmo alarmante). Pero la gran mayoría o bien es inútil, o es una lectura tan densa que nadie en el campo se molesta en leerlo. Las lecturas que tendremos en este curso son aquellas que, cualquiera que sea la razón, se han impregnado en la industria; muchos diseñadores profesionales ya están familiarizados con ellas.
 Voy a poner mi imaginación a volar un poco y me disculpan estos ensueños: ¿Se imagínan ustedes una carrera universitaria llamada "Ingeniería de Video Juegos"? ¿Como sería el campo laboral? ¿El Pensum de la carrera? Supongo yo que deberiamos estudiar cosas como estas:

  • Bases conceptuales de los video juegos
  • Diseño Gráfico
  • Animación
  • Sonido
  • Juegos de Aventura, RPG y Ficción Interactiva
  • Juegos de Estrategia
  • Juegos de Simulación: SimCity, Los Sims
  • Juegos Educativos.
  • Aspectos psicológicos: ¿qué tipo de videojuegos activan o desarrollan ciertas habilidades psico-motoras? ¿Qué hace un video juego adictivo? ¿Qué hace un videojuego divertido? ¿Como se hace un video juego educativo, según el tema a enseñar y la edad?
  • Publicidad y videojuegos: Mercadeo viral a través de videojuegos.
  • Comercialización de videojuegos y la industria de los videojuegos.
  • Videojuegos para dispositivos móviles: ¿como explotar la interconectividad?

¿Qué opinan ustedes? ¿Estudiarían una carrera así? ¿Les parece relevante o algo que pueda tener un campo laboral interesante?  Bueno, soñar no cuesta nada- volvamos a un plano más inmediato...

En este momento, una sistematización interesante por realizar sería la del uso de la librería PyGame.  Les pido a todos los que usaron esta librería que echen el cuento sobre cuales referencias o tutoriales les fueron útiles para aprender sobre PyGame.  Una vez que se dispusieron a usarlo, ¿se dieron cuenta si existe algún workflow (flujo de trabajo) para usar Pygame? Me refiero a lo siguiente: me imagino que primero tienen que declarar y activar una ventana (¿qué es una ventana y como se hace eso?), luego dibujan cosas sobre la ventana mediante blits (¿que es un blit?) y hacen un update (¿que es un update?)  Si quieren ponerse sofisticados con la animación y lograr algo de calidad, utilizarían un sprite, pero, ¿qué es un sprite?  ¿Se dan cuenta de hacia adonde quiero llegar? Pygame ofrece un conjunto de herramientas estándar para crear video juegos, pero para poder usarlas hay que manejar algo de terminología, y saber de antemano para qué tipo de tareas se utilizan las distintas herramientas.  Quisiera que de todo esto hicieramos una especie de manual de PyGame para dummies.

Al grupo de "El ahorcado", que utilizó el Tkinter, le hago la misma invitación.  ¿Existe algún texto sencillo que nos pueda instruir sobre su uso y el manejo de la terminología básica?  Como se acordarán, el documento que usamos en clase no era particularmente sencillo.

Traten de participar bastante en este post, pues la temática es universal para todos los video juegos.  De lo contrario, creo que tendré que hacer yo mismo un videojuego para lanzar estudiantes por la ventana desde el tercer piso de la UNEFA y así liberar mi frustración de no ver a los estudiantes participar.  Ahora, hablando en serio, en verdad quisiera que no dejáramos este tema hasta este semestre.  Sería excelente si terminaran de desarrollar sus videojuegos.  Y sería mejor aún si algunos de ustedes continuasen explotando esto para su provecho profesional.  Creo sinceramente que hay material para que lo puedan lograr.