Top Banner

of 74

Pygame Con sabor Venezolano

Jan 07, 2016

Download

Documents

Ensor Sanchez

Para nosotros este trabajo signi?ca la continuación de grandes
proyectos de vida y de las innumerables experiencias, que nos han
hecho crecer aceleradamente y por otro lado, es el comienzo de una
nueva etapa como profesional. Durante su realización hemos apren-
dido a valorar mucho más a nuestros seres queridos, amigos y todas
aquellas personas que han sido un gran apoyo para llegar al ?nal de
esta etapa y a quienes indiscutiblemente dedicamos este símbolo de
esfuerzo tan importante para nosotros.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Escrito por:

    Colaiacovo Maria F

    Lanza Yojana

    Romero Hector

    Quintero Sor

    Sanchez Ensor

    Vargas Yunior

    1

  • Titulo Original: Pygame Sabor Venezolano, Para Hacer Juego En Pygame

    Por:

    Colaiacovo Maria F.

    Lanza Yojana.

    Romero Hector.

    Quintero Sor.

    Sanchez Ensor.

    Vargas Yunior.

    Para nosotros este trabajo signica la continuacin de grandes

    proyectos de vida y de las innumerables experiencias, que nos han

    hecho crecer aceleradamente y por otro lado, es el comienzo de una

    nueva etapa como profesional. Durante su realizacin hemos apren-

    dido a valorar mucho ms a nuestros seres queridos, amigos y todas

    aquellas personas que han sido un gran apoyo para llegar al nal de

    esta etapa y a quienes indiscutiblemente dedicamos este smbolo de

    esfuerzo tan importante para nosotros.

    Primeramente agradecemos inmensamente a Nuestro Padre Ce-

    lestial, con el que siempre hemos contado incondicionalmente en cada

    etapa de nuestra vida, quien nos gua, abriendo y cerrando los caminos

    que debemos tomar para as cometer menos errores; gracias Padre

    Celestial por darnos la fuerza, inteligencia, el coraje y la ayuda para

    culminar este proyecto con xito, siempre muy agradecidos contigo

    por ser el mejor padre que podemos tener. Seguido muy agradecidos

    con nuestros Padres terrenales, ya que siempre estn a nuestro lado

    apoyndonos en cada meta que nos trazamos para as cumplirla con

    2

  • xito y sea un logro familiar, gracias padres por estar en los buenos y

    malos momentos, y por siempre poder contar con ustedes los amamos,

    gracias por ser los mejores padres que pudimos y tenemos en la tierra

    son excelentes.

    Agradecemos a nuestros familiares y amigos por siempre de-

    mostrarnos su cario y aportar su grano de arena para el xito de

    cada uno de nosotros, siempre estarn en nuestros corazones como

    personas especiales. Gracias a cada uno de nuestros profesores que

    han puesto su esfuerzo, conocimiento, dedicacin para formarnos ex-

    celentes profesionales, gracias por sus grandes aportes a lago de este

    tiempo tan importante para nosotros el cual es de aprendizaje y

    conocimientos tanto a nivel profesional y personal.

    3

  • INDICE GENERAL

    Contents

    4

  • Este manual de Pygame Sabor Venezolano, es un de los primero

    en elaborarse en la ciudad de el Tigre, estado Anzotegui, por un

    grupo de estudiante de ingenieria de sistemas, la cual brindara una

    serie de de programas que permitira que experimentes el poder de

    simular acciones de la vida real y llevarlo de una manera, extraa, de

    aventura, divertida, fantastica, donde puedas crear tu propias ideas,

    jugar, modicar y contriburir con todo lo que tu quieras para crear

    tu propia aventura.

    Este libro es ideal para las personas que estan aprendiendo a

    programar ya que se le daran las herramientas necesarias para disear

    su propio juego dandole un toque venezolano.

    Para inicializar a la programacion es necesario:

    1. Instalar Dependiendo del sistema operativo (Windows ,

    GNU/linux) realizar su previa instalacion.

    Como Instalar en mi sistema operativo ?

    Pero no desesperes!

    5

  • Puedes instalar Python a golpe de ratn, independientemente del sistema

    operativo que uses.

    Para eso es necesario de descargar la ultima version de Python para Windows

    y descargar el instalador .exe.

    Haga doble clic en el instalador, Python-2.xxx.yyy.exe. El nombre depen-

    der de la versin de Python disponible cuando lea esto.

    Siga los pasos que indique el instalador.

    Si le falta espacio en el disco, puede eliminar el chero HTMLHelp, los

    scripts de utilidades (Tools/), y la batera de pruebas (Lib/test/). Si no

    dispone de derechos administrativos en su mquina, puede escoger Ad-

    vanced Options, y elegir entonces Non-Admin Install. Esto slo afecta al

    lugar donde se crean las entradas en el Registro y los atajos en el men

    Inicio.

    Una vez terminada la instalacin nos dirigimos hacia Inicio -> Todos los

    programas -> Python 3.0 y ejecutamos IDLE (Python GUI).

    La instalacin es facilsima, ya que la losofa de Python es esa.

    Como Instalar en mi sistema operativo ?

    Si ests usando una cuenta en un servidor alojado, quiz tu ISP

    ya haya instalado Python 3. Si ests ejecutando Linux en casa, puede

    que ya tengas Python 3 tambin. La mayora de las distribuciones

    GNU/Linux populares incluyen Python 2 en la instalacin por de-

    fecto. Un nmero pequeo pero creciente de distribuciones incluye

    tambin Python 3.

    En Linux, busca en el men Aplicaciones una orden llamada Terminal.

    Escribe en tu ordenador python3 (en minsculas, sin espacios) y ver qu

    sucede.

    6

  • Capitulo I

    La enseanza de Python como lenguaje de programacin para

    nios, nias y jvenes en este libro permite que interacten, exper-

    imenten como desarrollar bsicamente juegos, evitando entorpecer

    por tecnicismo propio del lenguaje la creacin de estos. En simpli-

    cidad Python es un lenguaje de programacin que cuenta con una

    plataforma y es orientado a objeto, preparado para utilizar cualquier

    tipo programa. Es un lenguaje interpretado, lo que signica que no

    se necesita compilar el cdigo para poder ser utilizado.

    La sintaxis de de forma sencilla

    Se puede observar a travs de un ejemplo sencillo la sintaxis,

    ya que no se necesita utilizar la cabecera de una biblioteca estndar,

    para que este pueda mostrar el tradicional Hola, Mundo .

    Python va directo como se muestra en el ejemplo:

    print Hola, Mundo.

    Python es un lenguaje interpretado

    Este lenguaje anima a los nios, nias y jvenes a experimentar

    debido a su fcil sintaxis, este lenguaje interpretado permiten ciclos

    de desarrollo cortos (edicin y ejecucin), dispone de un entrono de

    ejecucin que permite la detencin de errores, sealados con mensajes

    muy informativos. Este tambin ofrece un entorno interactivo con el

    que se pueden efectuar pequeas pruebas o disear fcilmente las

    soluciones a los problemas.

    7

  • Durante toda la vida, nuestros familiares siempre nos dicen,

    ordena esto y ordena aquellos. Si queremos aprender a programar en

    Python tambin tendremos que hacerlo lo s, se escucha ms difcil

    ordenar tu cuarto que aprender un nuevo lenguaje de programacin

    pero poco a poco nos iremos acostumbrarnos y les contaremos a todos

    lo limpio y ordenado que esta nuestro cuarto o al menos que sabemos

    programar muy bien en Python. Lo primero que debemos hacer para

    ordenar nuestro cuarto por ejemplo, es limpiar todo lo sucio que

    veamos y guardar las cosas que no necesitamos en algn lugar o lo

    que siempre necesitamos tenerlo rpidamente al alcance, supongo que

    te gusta encontrar rpido tus cosas, bueno vamos a buscar una caja

    y le pondremos una etiqueta llamada colonia Ok?, si ya lo hiciste

    puedes entonces ir rpidamente a tu interprete de Python y crear

    ese mismo lugar para almacenar algo, que es comnmente llamado en

    todos los lenguajes de programacin una Variable. Pero espera, al

    tener la caja y la etiqueta necesito que busques tus colonia favoritas

    y la coloques en ella, para que en el momento que la necesites puedas

    saber cuntas estn ah simplemente buscando en la caja llamada

    colonia. En Python las variables son ms parecidas a las etiquetas

    que pegas en la caja que las cosas que en realidad tienes dentro.

    Ve a tu interprete de Python y podrs crear tu etiqueta llamada

    colonia y a as saber siempre cuntas colonias tendrs. Para crearla

    solo debes escribir el nombre colonia y luego utilizar un smbolo de

    igual (=) para decirle cuantas colonias tenemos dentro de la caja,

    de esta manera estamos escribiendo una etiqueta bien linda llamada

    colonia con un nmero( La cantidad de colonias que tendremos en la

    caja). Supongamos que encontraste todas tus colonias favoritas (diez

    colonias) pues vamos a escribir en Python esta etiqueta, conocida

    tambin como variable.

    Por ejemplo:

    # >>> colonia = 10

    8

  • Ahora, si nos equivocamos al momento de escribir la etiqueta,

    ya que no haban diez colonias en realidad, pues simplemente pode-

    mos borrarla y colocar un nuevo nmero. Lo que en Python seria,

    asignarle nuevamente otro valor a la misma variable. # >>> colonia

    = 8 Si miramos la etiqueta de nuestra nueva caja, podemos ver un

    luminoso ocho en este momento, que nos recuerda la cantidad de colo-

    nias dentro de la caja pero en Python debemos simplemente colocar

    el nombre de la caja en este caso colonia y nos dir la cantidad de

    colonias que almacenamos en la variable, as como hemos mostrado

    en las imgenes anteriores. Estamos siendo un poco ms ordenados

    ahora, incluso en este lenguaje de programacin podemos hacer recor-

    dar el nombre de la caja por otro mucho ms fcil de recordar. De

    esta manera podemos hacer que una variable pueda ser apuntada por

    otra ms: # >>> caja 1 = colonia # >>> caja1 # >>> 8 En el

    ejemplo pasado, colocamos en nuestros apuntes que la caja1 es la caja

    que tiene una etiqueta llamada colonia y ah se encuentran nuestras

    ocho colonias. Pues estamos asignando, a una variable ya creada otra

    variable con otro nombre para simplemente demostrar que pueden ser

    apuntadas a otras mas y si colocamos la nueva variable, en este caso

    nos mostrara la cantidad de colonias que asignamos anteriormente a la

    variable. Inteligente no? Pues si, este lenguaje de programacin nos

    obliga y ayuda a ser ordenados con nuestro cuarto o lo que se conoce

    como ser un excelente programador. Si eres fantico de la progra-

    macin y necesitas por todos los medios imprimir algo en pantalla,

    cualquier cosa que necesites expresar, lo podrs hacer colocando print

    luego un (=) igual para despus colocar lo que se te antoje luego de

    ese igual, de esta manera podrs mostrar lo que necesites comunicar.

    Por ejemplo, si queremos gritarle a Python Esto es un ejemplo y

    que me lo muestre en la pantalla, simplemente hacemos lo siguiente:

    # >>> print = (Esto es un ejemplo) # >>> Esto es un ejemplo

    Si te encantaron los nombres que te colocaron tus padres o pien-

    sas que no debieron haberlo hecho, pues en Python puedes cambiar

    las variables en un dos por tres y colocar ms adelante mejores nom-

    bres que te hagan recordar lo que necesitabas buscar, ya que si eres

    ordenado colocando tambin nombres te facilitara la vida a la hora

    de encontrar tus cosas. Imagnate ya en tu propia casa y deseas re-

    gresar a la casa donde creciste para buscar dentro de tus cosas algn

    viejo recuerdo que te haga recordar esos maravilloso momentos de la

    niez, estoy seguro que si le colocaste un nombre ms familiar que

    caja1 podrs fcilmente recordar una variable o tal vez fue tan malo

    9

  • el nombre que colocaste que ya ni tienes idea por tantos aos que

    han pasado lo que estaba en esa casa por ms ordenado que en tu

    niez fuiste. Te dar unos concejos para que asignes an mejor en

    Python las variables y puedas fcilmente recordar que haba dentro

    en cada uno de las cajas o en este caso en la variable caja1. Simple-

    mente si conocemos la cantidad de colonias que existen en la caja1 y

    sabemos que lo que estamos guardando son unas colonias, pues colo-

    camos: # >>> numero_de_colonias = caja1 De esta manera, si ya

    tenamos asignada las ocho colonias en caja1 ahora se pasara a llamar

    numero_de_colonias.

    El cdigo ASCII es un estndar para la representacin de sm-

    bolos y caracteres alfanumricos. Cualquiera de los smbolos de uso

    comn se poda representar como un byte (un octeto de bits). la cual

    sirven para representar imagenes, caracter numericos, entre otros.

    Tabla de Cdigo ASCII

    10

  • Ejemplo: utilizando las libreras de Tcl/Tk para crear estas interfaces grcas.

    Sin embargo, hay que aprender un poco ms de Python y de programacin

    para poderlas usar.

    Como lograr ciertos "Efectos" con la consola?Vamos a empezar con

    lo ms bsicos

    Algunas secuencias de escape son:

    11

  • 12

  • Sistemas de codicacin de caracteres - Unicode

    A continuacin un resmen de los bloques de caracteres que me pa-

    recieron ms interesantes:

    Mtodos de entrada de caracteres Unicode y cmo 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 te-

    clas apretadas, tecleamos la letra "U" seguida de los cuatro dgitos

    hexadecimales correspondientes al cdigo Unicode del caracter que

    queremos.

    13

  • Para trabajar con expresiones en Python que contengan carac-

    teres 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 seguida de los cuatro digitos

    hexadecimales del caracter. Al imprimir estas cadenas, se vern los

    caracteres unicode indicados por las secuencias de escape. Ejemplo 1

    de un script de un barquito:

    Este script dibuja un barquito en la pantalla:

    Cmo crear animaciones simples y agregar color al texto en la cnsola.

    Ejemplo2. de un script sobre una embarcacio en movimiento

    14

  • Secuencias de escape ANSI - que son?

    Todo comando para lograr los "efectos especiales" como los que

    se ven en la animacin de arriba comienza por imprimir (mediante

    15

  • una sentencia print en Python) un iniciador de secuencia de control,

    o CSI por sus siglas en ingls. Existen CSI's de un caractr, como por

    ejemplo los que emitimos para dar un salto de lnea, una tabulacin

    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 cnsola. Ahora, los que nos interesan son los

    comandos que podemos emitir con el CSI de dos caracteres: ESC+[

    (un caracter de escape, cdigo ASCII 27 en decimal, ms el caracter

    de corchete cuadrado izquierdo, cdigo 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 continuacin indican

    ms informacin sobre la secuencia de control. A continuacin una

    lista no exhaustiva:

    Comandos ANSI para posicionamiento de cursor, desplazamiento o

    borrado:

    16

  • Se puede observar cmo crear animaciones, controlar los colores

    y otros atributos de visualizacin en modo texto usando secuencias

    de escape ANSI. En esta entrada se ver cmo utilizar una librera

    llamada libcaca que se ha portado a Python en forma sencilla. La

    librera se debe instalar desde synaptic el cual es un programa in-

    formtico que tiene una interfaz grca GTK+ de APT, para el sis-

    tema de gestin de paquetes de Debian GNU/Linux y los bindings

    de Python los deben descargar por aqu.

    Se mostrara un pequeo script de un poco ms de 100 lineas

    implementando el famoso juego de la culebra (recuerdan, el que vena

    en los Nokia?), pero en modo texto. Ustedes pueden implementar su

    propia librera de visualizacin en modo texto usando secuencias de

    escape ANSI, pero las ventajas que ofrece libcaca es que permiten

    crear ventanas aparte, controlar eventos con dispositivos de entrada

    (ratn, teclado, etc.)

    El cdigo para este juego se puede observar a continuacin, es importante

    resaltar que Cuando vayan a correrlo,

    asegrense de tener "caca.py" en el mismo directorio.

    Script del cdigo de la culebrita

    17

  • 18

  • 19

  • Capitulo II

    Diseemos Ventanas Primeros Comienzos

    Te encantan los videojuegos?

    Pues, estoy seguro que si una de las graticaciones ms grandes

    a la hora de realizar esta documentacin, es la de preparar a muchos

    desarrolladores de video juegos y lograr algo importante, poder crear

    o modicar como se nos antoje los juegos que queramos siempre y

    cuando sean libres claro. Como bien, ya debes haber conocido lo

    bsico de este poderoso lenguaje de programacin y todas sus venta-

    jas. Ahora vamos a trabajar con una librera llamada Pygame, donde

    utilizaremos un conjunto de mdulos previamente creados para facil-

    itarnos la vida y poder crear de una manera ms rpida y profesional

    innidades de juegos donde la limitante solo la pondremos nosotros.

    Pues a partir de ahora te explicaremos con ejemplos sencillos como

    crear un videojuego y demostrarte lo maravillo que pueden ser los

    lenguajes de programacin libres. Dado la simplicidad, puedes agre-

    gar incluso funciones de fsica, como una gravedad para darle ms

    realismo a los juegos, colocarle sonidos, grcos de una manera sen-

    cilla pero con un gran poder. Como hemos venido documentndote

    en lo que es creacin de videojuegos sin usar esta librera, debes

    conocer que todo lo que hemos realizado es en modo texto, lo que

    era en muchos aos atrs, la ltima moda de los videojuegos, incluso

    hemos desarrollado una pequea inteligencia articial en el juego de

    tres en raya. Pero ahora vamos a ir a un entorno ms graco en dos

    dimensiones para ser ms exactos. En esta guida alentamos el uso

    de software libre a la hora de realizar videojuegos y este lenguaje de

    programacin libre, pero no signica que no puedas crearlos usando

    otros sistemas operativos. Ya que una de las bondades de libertad

    es que puedas usarlo y ejecutarlos en otros sistemas. A partir de

    20

  • este momento, te estar llamando pequeo diseador ya que sers

    capaz de usar toda esta documentacin para disear una nueva gran

    aventura que no solo te va a divertir a ti, sino a todos los que deseen

    probar tu nuevo proyecto.

    Ok, soy un pequeo diseador Pero cmo diseo?

    Debes de pensar en grande, la prxima gran aventura que dis-

    ees debe tener un comienzo, una trama, un nal, puntuaciones,

    ganadores, perdedores, sonidos, dibujos llamativos y muchas con-

    guraciones en donde tus amigos se puedan divertir. Para realizar

    un videojuego necesitamos conocer que necesitamos para poder re-

    alizarlo, pues lo primero y estoy seguro que se te vino a la mente

    es como usar la librera de Pygame Pues es muy sencillo, primero la

    instalacin: Ya conocemos como instalar Python en tu Gnu/Linux

    favorito, de la misma manera vas a instalar Pygame, desde tu centro

    de software o cualquier sistema de gestin de paquetes (synaptic) solo

    debes colocar el nombre de Pygame e instalar, automticamente te

    buscara la ltima actualizacin de esta importante librera en Python,

    por supuesto debes tener instalado Python, resulta que estamos us-

    ando un arsenal de herramientas necesarios para crear videojuegos

    provenientes de Python.

    Figura: instalacin de Pygame en gnu/linux

    Pero si an deseas sacricar todas tus libertades sin ninguna

    razn aparente e instalarlo desde otro sistema operativo, por ejem-

    plo usando uno privativo puedes hacerlo tambin, pero esta docu-

    mentacin no sacricara lo tico por ninguna razn aparente. Con-

    tinuando, luego de un regao de libertades. Ahora que tenemos in-

    stalada nuestra librera, debemos conocer como importarla a nuestro

    cdigo de Python, como en ejemplos anteriores en la creacin de

    videojuegos, no tuvimos la necesidad de usar impactantes sonidos o

    grcos para crear sencillos pero divertidos juegos de texto y aun

    as debimos importar libreras matemticas como la de buscar un

    nmero aleatorio en algn lugar, de esta manera lograr esos trucos

    que hacan mantener el juego en algo ms realista. De la misma man-

    era sucede con Pygame, debemos importar esta librera en nuestro

    cdigo para poder todos estos mdulos. Cmo lo hacemos?, Ab-

    rimos nuestro editor favorito de programacin en Python y simple-

    mente como mostramos en el siguiente ejemplo importamos la librera

    Pygame y sys, donde la ltima representa los controles del sistema,

    escribiendo la palabra import seguido de los nombres pygame y sys:

    # import pygame, sys Recordemos que import hace que importe toda

    una librera de funciones para poder acceder y usar esas funciones.

    21

  • Ahora si queremos de un solo golpe acceder a todas las constantes o

    variables como QUIT (funcin, que controla todos los eventos para

    poder salirse de una ventana en un juego) debemos decir que desde

    las locales de Pygame imprtame todo, el smbolo * signicara la

    palabra todo en este caso. Y entonces escribimos en el editor:

    # from pygame.locals import *

    Estamos bien, ahora que tenemos todo montado en su lugar

    debemos decir que queremos ya disear, porque esa es la idea no?

    Ser diseador de videojuegos, entonces vamos a seguir imaginarnos

    que Python es nuestra el acompaante y ella har lo que uno siempre

    le diga, entonces le decimos Inicializar PyGame o escrito en cdigo

    seria:

    # pygame.init()

    22

  • Figura: Una linda ventana de la vida real

    Por n, llego el momento de hacer nuestro primer diseo con

    Pygame. Si miras alrededor de tu casa probablemente tengas una o

    un par de ventanas que sirven como salida a ese mundo natural e

    inspirador que quizs te sirva para pensar una buena trama en los

    videojuegos, pero si quieres seguir programando te aconsejo que no

    salgas por ella y sigamos diseando. Pues te mostrare, como hacer

    una en tu sistema operativo, siempre cuando estamos jugando inicia-

    mos un lugar donde est todo lo referente al juego y si te das cuenta

    puedes cambiar de un lugar a otro fcilmente, por ejemplo ests ju-

    gando a Frets of Fire (Tambin realizando con Pygame) y cambias a

    tu navegador favorito ya ests en otro lugar completamente distinto,

    es eso en trminos de informtica llamado ventanas. Ahora, no vamos

    a ejecutar el cdigo dentro del texto como lo hacamos en el diseo

    de anteriores videojuegos, si no que vamos a disear una nueva ven-

    tana y ah vamos a poner lo que se nos antoje. Vamos a suponer, que

    somos unos fuertes herreros y queremos crear la ventana ms fuerte

    para nuestro reino, lo primero que debemos pensar es el tamao que

    tendr esta, que tan ancha y alta ser para que sea impresionante o

    compacta a lo que necesitemos. En Pygame, vamos a denirla sim-

    plemente dicindole a nuestra el amiga serpiente cuanto queremos

    23

  • que mida el ancho y la altura de la ventana. Vamos a colocarle 200

    pixeles para empezar a dibujar una pequea pero bonita ventana que

    aunque an no tiene colores, se ver bien.

    # ANCHOVENTANA = 200

    # ALTOVENTANA = 200

    Listo, ahora pasaremos a indicar en donde est esta ventana

    y toda su supercie, para ellos usaremos otra herramienta poderosa

    llamada Display, es un mdulo dentro de Pygame donde posee una

    funcin llamada set_mode, donde por una serie de rdenes o par-

    metros se le indica donde estar la supercie que estamos diseando.

    Primero vamos a crear una variable llamada supercie donde primero

    que nada le indicamos la dupla del ancho y largo de la ventana que

    resultara como dije anteriormente en pixeles y Por qu en pixeles?,

    pues resultara ser la peor medida para un herrero, pero ya que en

    realidad no somos herreros si no pequeos diseadores digitales pues

    necesitamos una medida minscula a las necesidades digitales y nada

    tan perfecto como un pixel, podemos ver en la imagen un ejemplo

    de lo que representa esta medida, si le hacemos a cualquier imagen

    digital una gran ampliacin poco a poco iremos detallando ms esos

    puntos de color llamados pixeles.

    Luego, el siguiente parmetro podemos denirlo colocando un 0,

    Por qu? Este parmetro sirve para opciones avanzadas de interfaz

    donde normalmente no ser necesario alterarlo, el ltimo parmetro

    es la profundidad de color que usaremos, donde el valor ms alto

    representara ms colores verdaderos para nuestro ojo humano. En

    este caso colocaremos 32 para usar el esquema de 256 valores para

    cada tono primario donde un cuarto canal denominado alfa que rep-

    resenta la transparencia. Este valor se utiliza si tambin queremos

    superponer dos imgenes. Entonces escribimos en nuestro editor:

    24

  • #supercie = pygame.display.set_mode ((ANCHOVENTANA, ALTOVEN-

    TANA), 0,

    Ya tenemos nuestra primera ventana diseada usando Pygame. Donde podr

    verse algo parecido a esto:

    Figura 1: instalacin de Pygame en gnu/linux

    Me podrs llamar, loco, pero luego de disear esa bonita ven-

    tana tambin puedes ponerle un nombre, colocarle muchos colores

    e incluso agregarle texto o guras geomtrica, si ya s que en una

    ventana de verdad no perders el tiempo haciendo eso pero si deseas

    perder el tiempo con algo Por qu no lo haces aprendiendo hacerlo

    en digital? Es ms barato e incluso puedes modicarla siempre que

    quieras. Si te gusta mucho tu nuevo diseo y quieres que tenga un

    nombre o cuando estemos haciendo el videojuego siempre necesitaras

    colocar el nombre de el en todos los lados posibles para as identicar

    donde estas parado, puedes hacerlo con Pygame.

    A continuacin vamos a crear nuestra primera ventana de texto

    usando el popular y el mejor ejemplo desde punto de vista didctico

    en un lenguaje de programacin el Hola Mundo pero en este caso le

    25

  • diremos un gran Hola a nuestra ventana y mientras ms aprendas

    de este lenguaje incluso hars que tambin la ventana te responda.

    Maravilloso no? Seguiremos usando display donde en ella llamare-

    mos una funcin llamada set_caption esto quiere decir bueno dime

    el ttulo de la ventana, en donde luego de su respectivo parntesis

    y comilla simple colocaremos dentro de ella lo que sea que se nos

    ocurra, en este caso Hola Ventana!

    # pygame.display.set_caption('Hola Ventana!')

    Si pensabas que colocarle un nombre a una ventana era genial,

    pues te sorprender que colocarle colores es algo espectacular, sim-

    plemente podramos ir a donde venden pinturas y escoger el que ms

    nos guste para pintar nuestro cuarto ya ordenado por cierto y luego

    echarle pintura a las paredes, ventanas o puertas. Aqu, podemos

    hacer lo mismo, pero vamos a denir los colores en vez de comprarlos

    y vamos a decirle a Python que color queremos en vez de escoger-

    los. Cmo lo hacemos?, pues primero debes conocerte un modelo

    de colores muy popular llamado RGB (Rojo, Verde, Azul) donde usa

    la composicin del color en trminos de la intensidad de los colores

    primarios con que se forma: el rojo, el verde y el azul. Es un modelo

    de color basado en la sntesis aditiva, con el que es posible represen-

    tar un color mediante la mezcla por adicin de los tres colores luz

    primarios.

    Figura: Cubo RGB

    En nuestro editor, lo que haremos es crear variables con re-

    specto a los colores y su denicin ser igual a la cantidad de valores

    altos o mnimos en deciman en cada rojo, verde y azul. Por ejemplo,

    el valor mnimo seria el color negro denido en el RGB y el color

    mximo el blanco donde son denidos de la siguiente manera:

    26

  • # NEGRO = (0, 0, 0)

    # BLANCO = (256, 256, 256)

    La personalizacin de los colores, lo indicaran los valores que

    alteremos, por ejemplo, si solamente dejamos el valor de 256 en el

    canal R y colocamos 0 en los otros canales. El color predominante

    ser el ROJO y podemos denirlo sencillamente as:

    # ROJO = (256, 0, 0)

    Ahora si quieres crear un valor naranja o morado, puedes jugar

    con los nmeros decimales en cada canal agregarle a ella, cualquier

    texto, dibujos e incluso colorear los mismos, aqu comienza una etapa

    bastante difcil para todos, la de pensar, porque tu imaginacin solo

    es la nica que pondr lmites a las cosas que podrs colocar dentro

    de la ventana, tan fcil como siempre lo ha sido este lenguaje, si

    queremos escribir algo en la ventana, lo primero que debemos saber

    es con qu tipo de letra lo haremos, si ya s que te gusta escribir

    corrido o a veces te gusta escribir en MAYUSCULAS en un chat,

    que resulta bastante molesto por cierto ya que eso es el equivalente a

    GRITAR. En n, debemos traer de nuestro Pygame las fuentes que

    deseamos, podemos denir una o las que se nos antojen, usaremos

    para este caso una modulo llamado Font que contienen funciones para

    personalizar letras donde un primer parmetro seria el tipo de letra

    y el segundo su tamao usando la funcin SysFont. Mostramos un

    ejemplo a continuacin:

    # fuenteBasica = pygame.font.SysFont(None, 48)

    Si te has dado cuenta, colocamos None en vez de alguna letra en

    particular como Arial, Verdana o la que uno quiera colocar. Entonces,

    lo que har es buscar una fuente predeterminada que tenga Pygame

    y la usara por defecto y usamos un tamao de letra de tamao 48.

    Ahora que tenemos ya la fuente elegida lo que debemos hacer es

    dibujar ese texto en la supercie de la ventana. Cmo lo hacemos?,

    Creamos una variable llamada y usamos render con la fuente que

    anteriormente creamos en este caso fuenteBasica. Para indicarle los

    27

  • parmetros tales como; el texto que vamos a colocar, donde el segundo

    lo dejaremos en True, luego indicamos el color de la fuente y por

    ltimo el fondo de la fuente. Mostramos un ejemplo a continuacin:

    # text = fuenteBasica.render('Hola Ventana!', True, BLANCO, ROJO)

    Excelente, pero ahora necesitamos sacar las medidas del espa-

    cio donde estar este texto, Por qu?, pues hasta el momento hemos

    denido que estar escrito, su color y tamao pero no le hemos in-

    dicado en que parte esta de la supercie de la ventana. Necesitamos

    decirle a Python en que posicin estar lo que queremos dibujar.

    Para eso necesitamos saber desde donde comienza el texto y hasta

    donde llega, debemos denir el tamao del lugar donde estar lo que

    estamos dibujando

    # textRect = text.get_rect() .

    Mostramos en el siguiente ejemplo, como denimos donde es-

    tar el texto y luego le decimos que lo centre en X y lo centre en Y

    Qu quiere decir esto?, esto es muy importante si sabes que es un

    plano cartesiano, si eres muy novato en matemticas no te preocupes,

    estoy seguro que te documentaras lo suciente en este ejemplo para

    entender incluso un poco de matemticas.

    Figura: Ejemplo de tres coordenadas en un plano cartesiano

    Cuando estamos trabajando con coordenadas, podemos obser-

    var que siempre el primer valor que se nos indique estar en el eje

    de las X como puedes observar en la gura y el segundo valor ser

    tomado en el eje de las Y luego de que podamos obtener estos dos

    28

  • valores, el punto de interseccin de las dos rectas que pasen por esos

    puntos estar ubicado nuestro elemento. En la imagen, el color verde

    represente un valor 2 en el eje de las X y un valor 3 en el eje de las

    Y, creando as un punto de interseccin entre los dos puntos. Sigu-

    iendo con el cdigo, lo que en realidad queremos que entiendas es que

    cuando nos referimos a centrar en alguna posicin en este caso X o

    Y el buscara el centro y me colocara todo lo que necesite colocar.

    # textRect.centerx = supercie.get_rect().centerx

    # textRect.centery = supercie.get_rect().centery

    Para qu necesitamos esto? al momento de nosotros dibujar

    guras geomtricas como lneas, rectngulos, elipses, etc., fcilmente

    podemos darle vida en nuestra supercie usando las coordenadas, de

    esta manera le indicas a Python, la manera de dibujar lo que necesitas.

    Por cierto si queremos colocarle un color blanco a nuestra supercie

    de la ventana solo debemos escribir:

    # supercie.ll(BLANCO)

    Figura 8: supercie con color blanco

    Pasemos a dibujar algunas lneas azules, para ello debemos usar

    una funcin dentro de Pygame llamada draw.line donde contendr los

    parmetros del lugar donde estar la lnea, el color de la lnea y las

    coordenadas que necesitas desde el punto inicio hasta el punto nal,

    mientras que el ultimo parmetro es el groso que tomara la lnea

    dibujada. Si an no has entendido bien lo del plano cartesiano te

    recomiendo que regreses a esa parte o te documentes un poco mejor

    con libros matemticos que expliquen an ms detalladamente sobre

    ellos. Si ya entendiste, te felicito pues entonces acabaras creando las

    guras geomtricas que desees. Te mostramos en la gura parte del

    cdigo que necesitas ejecutar para lograr el dibujo de una lnea de un

    groso tamao 4 y de color azul en las posiciones mencionadas en la

    supercie.

    29

  • # pygame.draw.line (supercie, AZUL, (60, 60), (120, 60), 4)

    Figura 9: lneas azules dibujada con Pygame

    De la misma forma, suceder si quieres dibujar un crculo azul

    sin bordes como se ve en la gura, deberemos colocar para el ter-

    cer parmetro la posicin de X y Y, ya para el cuarto colocamos su

    dimetro y el ltimo parmetro podemos colocar si hay un relleno o

    no, mostramos el cdigo a continuacin:

    # pygame.draw.circle (supercie, AZUL, (300, 50), 20, 0)

    Figura 10: circulo azul dibujado con Pygame

    Si buscamos dibujar una elipse roja con un pequeo grosor,

    como se ve en la gura, tendremos que trazar dos dimetros, uno

    vertical y uno horizontal, donde el tercer parmetro denir la posi-

    cin X y el segundo la posicin Y, el tercero el dimetro horizontal y

    el cuarto el dimetro vertical mostramos el cdigo a continuacin:

    # pygame.draw.ellipse (supercie, ROJO, (300, 250, 40, 80), 1)

    30

  • Figura 11: elipse rojo dibujado con Pygame

    Si buscamos dibujar una elipse roja con un pequeo grosor,

    como se ve en la gura, tendremos que trazar dos dimetros, uno

    vertical y uno horizontal, donde el tercer parmetro denir la posi-

    cin X y el segundo la posicin Y, el tercero el dimetro horizontal y

    el cuarto el dimetro vertical mostramos el cdigo a continuacin:

    # pygame.draw.ellipse (supercie, ROJO, (300, 250, 40, 80), 1)

    Una de las cosas ms importantes que debes siempre recordar,

    pero recurdalo bien, que nunca se te olvide, es cerrar una ventana

    antes de salir de tu casa, porque posiblemente no encontraras nada

    cuando regreses, en el mundo real sucede as y como Python es un

    lenguaje muy fcil de utilizar y parecido a lo que hacemos en ese

    mundo real, pues deberas hacer lo mismo, tienes que permitir cerrar

    todo lo que haces porque si no, probablemente tampoco encontraras

    nada dentro, bueno quizs estoy exagerando pero en realidad debes

    permitirle siempre a las personas cerrar lo que hacen, te imaginas

    miles de ventanas abiertas en tu sistema sin poder cerrar ni saber

    qu hacer con ellas ahora, porque alguien simplemente le gusta dejar

    que lo roben.

    No tendra sentido hacer una cosa como esa, verdad?

    31

  • Pues, en este momento debes ser todo un Picasso creando dibu-

    jos, letras coloridas o guras inimaginables y peor aun ponindole

    nombres a tus mascotas y a las ventanas de tus futuras obras de artes.

    Primero para recordar siempre los resultados que haces y mostrar-

    los indenidamente en la ventana debes crear un While True: para

    as pasar a cerrar la ventana con una funcin que al principio te

    avisamos que la usuraramos llamada QUIT. Te mostramos en modo

    cdigo como lo hars es algo sencillo no te compliques en recordar

    esto, ya que puedes usarlo en casi todos los cierres o nalizacin de

    una ventana. Se puede explicar sencillamente, donde el evento en

    Pygame tipo salir sucede, pues todo se va a cerrar.

    # while True:

    # for event in pygame.event.get():

    # if event.type == QUIT:

    # pygame.quit() # sys.exit()

    Figura 12: cerrando una ventana

    Quizs hasta este momento te estas frustrando porque no has

    podido realizar nada de lo mostrado en las imgenes y ejemplos, pa-

    ciencia, porque hay una cosa muy importante que siempre y esto

    tambin debers recordar colocar, algo llamado actualizar. Si, debes

    siempre recordarle a nuestra amigo Python todo lo que hiciste, porque

    a veces tiene mala memoria y debes garantizar que todo lo que hiciste

    fue cierto, podemos decirle eso, usando:

    # pygame.display.update()

    Tambin ocurrir, que el texto que queras incluir no apareciera

    por alguna extraa razn, pero no es nada de extrao, solo debes

    repetirle a nuestro amigo olvidadizo que queremos incluir el texto

    creado en la supercie de la ventana, para eso usamos el siguiente

    cdigo:

    32

  • # supercie.blit(text, textRect)

    Si seguiste todos los pasos de esta parte de la documentacin,

    ahora si eres todo un Picasso en Pygame y podrs ver como se muestra

    en la siguiente imagen todo lo que has hecho hasta el momento.

    Figura 13: Dibujos en una ventana diseados con la librera Pygame.

    Figura 14: Versin de Frankenstein animado.

    33

  • Llego, la hora de que aprendas algo que en sueos, muchos

    cientcos han querido lograr y solo una persona fue trada a la vida

    incluso le colocaron Frankenstein, si esa historia te parece un mito.

    Pues, hacer animaciones radiantes y que se muevan en una ventana

    no es cosa de mitos gracias a Pygame. Vamos a crear algunos cuadra-

    dos que se puedan mover a los lados que queramos. Si, as como lo

    oyes, en este momento aprenders a darle un poco ms de vida a

    esa ventana que ya debe ser toda una obra de arte mi pequeo dis-

    eador. Lo primero que debemos decirle a nuestro el amigo Python,

    es la direccin y velocidad que tendrn los cuadrados, as es, recuerda

    que nuestro amigo tiene mala memoria y tampoco es un adivino, es

    un lenguaje de programacin y muy bueno por cierto, mientras que

    sea un lenguaje altamente entendible debemos decirle siempre lo que

    queremos hacer y l se encargara de hacerlo.

    As que, comencemos a denirle las direcciones que tomaran

    nuestras nuevas creaciones animadas. Para nosotros, es mucho ms

    fcil recordar ciertos nombres, si recuerda en el apartado de variables,

    fuimos ordenando nuestra habitacin en cajas con nombres que fcil-

    mente recordaramos y nos hara relacionar inmediatamente lo que

    estaba contenido, igualmente podemos hacer aqu, si denimos las

    direcciones que tomaran nuestro cuadrados por ejemplo, abajo a la

    izquierda, abajo a la derecho, arriba a la izquierda y luego que se

    mueva arriba a la derecha, fcilmente nuestro amigo recordara que

    har toda esta serie de movimientos. Recuerda que debes importar

    Pygame y todas sus herramientas, crear el ancho de ventana, la su-

    percie e incluso colocarle un nombre a la ventana, estoy seguro que

    ya debes saber cmo hacerlo, todo es completamente igual y ahora

    podemos continuar agregndole las variables de velocidad que te he

    nombrado:

    # ABAJOIZQ = 1

    # ABAJODERE = 3

    # ARRIBIZQ = 7

    # ARRIBADERE = 9

    Tambin puedes agregarle una variable que dena la velocidad de los

    cuadrados movindose, como colocamos a continuacin:

    # VELOCIDAD = 4

    Si, quieres puedes crear varios cuadrados y agregarles ciertos

    colocares para diferenciarlos, estoy seguro que tambin sabes pintar

    todo lo que este en tu ventana, te nombro unos colores por si acaso

    te gusta alguno de ellos:

    34

  • # NEGRO = (0, 0, 0)

    # ROJO = (255, 0, 0)

    # VERDE = (0, 255, 0)

    # AZUL = (0, 0, 255)

    Ahora, solo queda crear los cuadrados usando una funcin lla-

    mada, pygame.rect. Recuerdas, el ejemplo del diccionario en el juego

    del ahorcado que diseamos anteriormente sin usar Pygame?, pues es

    muy parecido estamos deniendo un bloque 1 con un rect de rectn-

    gulo y usando las coordenadas (300, 80, 50, 100) podemos crearlo

    con un tamao algo grande y le denimos su color, es exactamente

    igual a los diseos que has venido trabajando excepto que le agre-

    garemos el dir que ser tomado como un valor de direccin, hacia

    donde quieres que este se comience a dirigir en el momento de ver tu

    ventana. Luego hacemos un arreglo y decimos que en la posicin 0,

    estar nuestro primer cuadrado y agregamos dos cuadrados ms en

    la posicin 1 y 2 respectivamente.

    # b1 = {'rect':pygame.Rect(300, 80, 50, 100), 'color':ROJO, 'dir':ARRIBADERE}

    # b2 = {'rect':pygame.Rect(200, 200, 20, 20), 'color':VERDE, 'dir':ARRIBIZQ}

    # b3 = {'rect':pygame.Rect(100, 150, 60, 60), 'color':AZUL, 'dir':ABAJOIZQ}

    # bloques = [b1, b2, b3]

    Perfecto, ya tenemos denido todas las variables que necesita-

    mos, ahora viene la parte difcil, hacer que de verdad este viva nuestra

    ventana. Para ello, debemos comenzar con un blucle innito que re-

    visara primero el evento QUIT. Recordemos que esto har que al

    cerrar la ventana detendr todo, algo que siempre debemos recordar.

    # while True:

    # for event in pygame.event.get():

    # if event.type == QUIT:

    # pygame.quit()

    # sys.exit()

    35

  • Podemos, colocar la supercie en negro, recuerden que esto es

    una animacin cuadro por cuadro, necesitamos dibujar algo en un

    punto y resultara una animacin completa, si lo dibujamos varias

    veces, esta velocidad de actualizacin entre cada cuadro de dibujo, es

    lo que se reere a algo llamado Frames por segundos o cuadros por

    segundo lo que har posible el traspaso de un cuadro a otro, ser el

    bucle innito que estamos colocando desde el principio, por ellos es

    imprescindible que colocamos el bucle, cada vez que este comience a

    repetirse. Ahora, como logramos ese movimiento?, para realizarlo,

    podemos incrementar o restar el valor para arriba y a la izquierda y

    esto har que nuestro dibujo donde ocurra la colisin del punto entre

    arriba e izquierda se ir cambiando de posicin, esto har que se logre

    una simulacin de animacin por segundo.

    Figura 15: Ejemplo de cuadros por segundo, en una animacin clsica para un

    caballo movindose.

    Entonces, tendremos que donde ocurra la colisin, que ms ade-

    lante lo explicaremos un poco mejor con otro juego ms divertido.

    Vamos a recorrer la estructura de direccin de cada bloque, usando

    un for para los bloques a usar en cada posicin:

    # for b in bloques:

    Figura 16: Figura en movimiento hacia abajo a la izquierda

    Ahora, vamos a jugar con el movimiento inicial de arriba (top)

    y a la izquierda (left). Primero hagamos que se dirija abajo y a la

    izquierda. Para ello, vamos a restarle movimiento a la izquierda e

    36

  • incrementar movimiento hacia arriba, puedes ver en la gura como

    har este movimiento.

    # if b['dir'] == ABAJOIZQ:

    # b['rect'].left -= VELOCIDAD

    # b['rect'].top += VELOCIDAD

    Si queremos mover nuestro cuadrado arriba y a la derecha, todo

    lo contrario al anterior movimiento, vamos a aumentarle movimiento

    a la izquierda y restarle hacia arriba. Puedes ver como en la gura

    como hace este movimiento.

    # if b['dir'] == ARRIBADERE:

    # b['rect'].left += VELOCIDAD

    # b['rect'].top -= VELOCIDAD

    37

  • Hemos logado hasta el momento, darles vida a guras dentro de

    nosotros e incluso con un simptico nombre a la ventana. Pero no te

    has preguntado, si nuestra gura llega a salirse de la ventana o incluso

    romperla, en captulos anteriores, hablamos que es una mala idea

    dejar la ventana abierta pues el crimen est muy alto ltimamente,

    pero te imaginas que hagamos pedacitos esa supercie que tanto nos

    cost dibujar hasta el momento, estoy seguro que no te has ledo todo

    esta documentacin para ver tus obras de artes acabas por una gura

    que no sabe hasta dnde llegar y devolverse. Debemos indicarle a

    nuestras guras que tienen un lmite que recorrer y que se llegan hacia

    el debern devolverse, pues se est prohibido salirse de la supercie.

    Para ellos, crearemos unas decisiones anidadas correspondientes a

    cada lugar donde la gura llegara. La frontera de este valor, ser

    tomada como un 0 y pues todo debe ser menor que l, ya que si llega

    a ese valor, se estar moviendo fuera de la ventana y nuestra gura

    le har un gran agujero a la ventana y no queremos que pase eso,

    verdad? Vamos a comenzar entonces colocando:

    # if b['rect'].top < 0:

    Y luego, le decimos que si la gura va haciendo un movimiento

    de arriba a la izquierda llegando a su lmite, pues simplemente lo

    obligaremos que baje y no se salga de la supercie, de igual forma

    haremos si se nos viene la gura hacia arriba a la derecha, todo esto

    si estamos trabajando desde la parte superior de la supercie

    Si nuestra gura este en el fondo de la supercie, igualmente

    debemos decirle que no debe pasarse del lmite que le imponemos

    y debe regresar como chico bueno por donde vino. En este caso

    esteremos hablando del alto de la ventana.

    # if b['rect'].bottom > ALTOVENTANA:

    Indicaremos los valores que debe tomar la gura en caso de que se

    dirija hacia abajo y a la izquierda o hacia abajo a la derecha.

    38

  • # if b['dir'] == ABAJOIZQ:

    # b['dir'] = ARRIBIZQ

    # if b['dir'] == ABAJODERE:

    # b['dir'] = ARRIBADERE

    IMAGEN AQUI

    De igual manera si la gura intenta dirigirse hacia el lado izquierdo

    de la supercie, podemos ordenarle que cambie de rumbo, llevndolo

    desde abajo y la izquierda hacia abajo a la derecha o de arriba a la

    izquierda hacia arriba a la derecha, como te puedes dar cuenta es

    como si la gura estuviera chocando con algo que lo hace devolverse

    por donde vino.

    # if b['rect'].left < 0:

    # if b['dir'] == ABAJOIZQ:

    # b['dir'] = ABAJODERE

    # if b['dir'] == ARRIBIZQ:

    # b['dir'] = ARRIBADERE

    IMAGEN AQUI

    Por ultimo si se dirige hacia la parte derecha de la supercie, va-

    mos a realizar el mismo procedimiento que hemos venido realizando,

    en los anteriores casos pero con diferentes oposiciones de movimiento

    que representara el ancho de la ventana. Tomaremos en cuenta, la

    gura que se dirija abajo a la derecha esta cambiara su rumbo hacia

    abajo izquierda o en el caso de que este se dirija a la parte de arriba

    a la derecha cambiara hacia arriba y a la izquierda

    # if b['dir'] == ABAJODERE:

    # b['dir'] = ABAJOIZQ

    # if b['dir'] == ARRIBADERE:

    # b['dir'] = ARRIBIZQ

    39

  • Sabemos que es tedioso colocarle a cada gura un movimiento

    propio, pero de esta forma nos aseguramos que se dirija haca donde

    queramos y que no rompa ningunas ventanas en el intento. O como

    piensas que los buenos titiriteros logran que sus muecos cobren vida

    propia mediante largos hilos que controlan cada movimiento que re-

    alicen. No olvides, dibujar el bloque en la supercie, colocndole el

    color que desees, usando para esto el siguiente cdigo que ya hemos

    venido trabajando:

    # pygame.draw.rect(supercie, b['color'], b['rect'])

    Ahora, recurdale a nuestro olvidadizo amigo todo lo que has

    hecho usando un update: # pygame.display.update() Y podremos ver

    muchos cuadrados animados de distintos colores de un lado para otro

    sin romper nuestra ventana que tanto nos cost construir.

    Una nota importante que debes tener en cuenta es la pausa del

    buque que creamos al principio para dar la sensacin de cuadros por

    segundo, para eso debemos de darle una velocidad de transicin entre

    cada imagen y as mantenga que la ventana se refresca cada vez que

    se ejecute el bucle con la nueva posicin del cuadrado. La funcin

    time nos permite pasar por ejemplo 0.02 segundos antes de la nueva

    posicin. Cabe destacar que una de las libreras que vamos incluir al

    principio de nuestro cdigo ser time

    # import time

    # time.sleep(0.02)

    40

  • Captulo III

    Ten cuidado, puedes ocasionar una colisin!

    En cada captulo hemos estado preparando esa gran base que te

    servir para crear videojuegos usando Pygame. Hemos llegado a un

    punto clave de la creacin de los mismos, as que abrchate los cintur-

    ones y recuerda siempre tener cuidado al manejar porque puedes oca-

    sionar una colisin y en la vida real es muy peligroso tener una, pero

    aqu vamos a ensearte a como ocasionarlas y mantener el control

    de cualquier gura por nuestra cuenta. Es muy lindo, ver una gura

    moverse de un lugar a otro y que no se salga de la ventana o la rompa,

    pero es algo aburrido, es por ellos que es hora de que nosotros po-

    damos tener un poco ms de control de lo que hacemos agarrando ese

    volante y manejar hacia donde queramos incluso ocasionar colisiones

    con otras guras, tranquilo aqu no te pasara nada malo si lo haces y

    siempre es bueno saber hasta donde tenemos un lmite ya que pode-

    mos romper muchas ventanas en el intento si no tenemos cuidado.

    Vamos a comenzar a realizar un videojuego muy parecido a nuestro

    viejo amigo comeln de los clsicos de los videojuegos, alguna pista

    de quin es? Tarde o temprano terminaras adivinando. Recordemos,

    que lo primero que debemos hacer para comenzar a crear un video-

    juego o algo hecho en Pygame es importar las libreras necesarias,

    estoy seguro que ya eres todo un experto importando libreras pero

    debo decirte que necesitamos importar nuestra vieja amiga random

    para algunas acciones que realizaremos en los siguientes captulos.

    # import pygame, sys, random

    El paso siguiente, traer todas las herramientas de Pygame:

    # from pygame.locals import *

    Ahora, Cmo le decimos a nuestro amigo Python, que una gura

    est chocando o encima de otra?

    41

  • Ya que tenemos el gran poder de crear las cosas y necesi-

    tamos que dos guras choquen, simplemente espero que por puro

    conocimiento y aprendizaje, como pueden ver en la gura se muestran

    dos posibles escenarios, uno donde las guras colisionan y estn una

    encima de la otra o un escenario donde ocurre lo contrario. Nosotros,

    ahora debemos decirle a Python lo que sucede cuando una gura este

    sobre otra y cmo actuar cuando eso sucede. Tomando un rectngulo

    como la gura de ejemplo, haremos dos funciones, una que verique

    si uno de los rectngulos esta sobre otro, al detectar la colisin quiere

    decir que uno de los puntos del rectngulo esta sobre otro, haremos

    que sea verdadero si existe esta colisin o falso si no la hay. Donde

    el rectngulo 1 y el 2 si estn uno sobre otro, va a chequear tambin

    si las esquinas de uno de los rectngulos est en la parte superior,

    inferior, derecha o izquierda del otro rectngulo, estaremos jugando

    nuevamente con las coordenadas de un punto a otro, como puedes

    ver en la gura, se muestran las coordenadas (50,30), (85,30) ,(50,50)

    dentro de uno de los rectngulos, lo que signica que es reconocida

    de esta manera una colisin. Para salir, de dudas puedes ver la gura

    como se muestra una colisin entre dos rectngulo en este caso.

    # def rectSobrePuesto(rect1, rect2):

    # for a, b in [(rect1, rect2), (rect2, rect1)]:

    # if ((puntoDentroRect(a.left, a.top, b)) or

    # (puntoDentroRect(a.left, a.bottom, b)) or

    # (puntoDentroRect(a.right, a.top, b)) or

    # (puntoDentroRect(a.right, a.bottom, b))):

    # return True # return False

    42

  • En la ltima gura, mostramos como la parte superior o la es-

    quina de uno de los rectngulos estaban dentro de otro, lo que es

    reconocido como una colisin, es grcamente correcto, pero nece-

    sitamos decirle a nuestro olvidadizo amigo Python, que realice una

    funcin para esto, a continuacin te muestro una manera difcil como

    realizar este tipo de funciones para colisiones. Ms adelante, te

    mostrare una manera mucho ms fcil identicar las colisiones.

    # def puntoDentroRect(x, y, rect):

    # if (x > rect.left) and (x < rect.right) and (y > rect.top) and (y = NUEVACOMIDA:

    Aqu vamos aadiendo la comida y notaras como aparecer cada cierto

    tiempo.

    # contarComida = 0

    # comida.append(pygame.Rect(random.randint(0, ANCHOVENTANA -

    TAMANOCOMIDA), random.randint(0, ALTOVENTANA - TAMANOCO-

    MIDA), TAMANOCOMIDA, TAMANOCOMIDA))

    Para darle un tono ms realista, coloquemos la supercie de un color

    negro y asi podemos jugar un poco mejor con los colores:

    # supercie.ll(NEGRO)

    Lo dems, es simplemente hacer que nuestro rectngulo hambri-

    ento se mueva por toda la supercie, como en la anterior animacin,

    sumndole y restndole el valor de arriba (top) y a la izquierda (left)

    # if rebotador['dir'] == ABAJOIZQ:

    # rebotador['rect'].left -= VELOCIDAD

    # rebotador['rect'].top += VELOCIDAD

    # if rebotador['dir'] == ABAJODERE:

    46

  • # rebotador['rect'].left += VELOCIDAD

    # rebotador['rect'].top += VELOCIDAD

    # if rebotador['dir'] == ARRIBIZQ:

    # rebotador['rect'].left -= VELOCIDAD

    # rebotador['rect'].top -= VELOCIDAD

    # if rebotador['dir'] == ARRIBADERE:

    # rebotador['rect'].left += VELOCIDAD

    # rebotador['rect'].top -= VELOCIDAD

    Qu hace falta?, pues que no rompa la ventana, nuestro amigo

    hambriento puede estar tan concentrado buscando la comida que

    quizs no se percate hasta donde llegara, para eso vamos a indicarle

    sus lmites.

    La gura se dirige a la parte superior.

    #if rebotador['rect'].top < 0:

    # if rebotador['dir'] == ARRIBIZQ:

    # rebotador['dir'] = ABAJOIZQ

    # if rebotador['dir'] == ARRIBADERE:

    # rebotador['dir'] = ABAJODERE

    # if rebotador['rect'].bottom > ALTOVENTANA:

    Nuestro rectngulo ha pasado el fondo.

    # if rebotador['dir'] == ABAJOIZQ:

    # rebotador['dir'] = ARRIBIZQ

    # if rebotador['dir'] == ABAJODERE:

    # rebotador['dir'] = ARRIBADERE

    # if rebotador['rect'].left < 0:

    47

  • El rectngulo se mueve ms all de la izquierda.

    # if rebotador['dir'] == ABAJOIZQ:

    # rebotador['dir'] = ABAJODERE

    # if rebotador['dir'] == ARRIBIZQ:

    # rebotador['dir'] = ARRIBADERE

    # if rebotador['rect'].right > ANCHOVENTANA:

    La gura se mueve ahora hacia a la derecha.

    # if rebotador['dir'] == ABAJODERE:

    # rebotador['dir'] = ABAJOIZQ

    # if rebotador['dir'] == ARRIBADERE:

    # rebotador['dir'] = ARRIBIZQ:

    Lo que queda por realizar es simplemente dibujar la gura en

    la supercie con su color:

    # pygame.draw.rect(supercie, BLANCO, rebotador['rect'])

    Revisamos, si hay alguna colisin entre la comida y el rebotador,

    en caso verdadero solo debemos invocar a remove y podemos eliminar

    la comida. Esto, dar la sensacin de que nuestra gura principal es

    un gran glotn.

    # for bocado in comida[:]:

    # if rectSobrePuesto(rebotador['rect'], bocado):

    # comida.remove(bocado)

    Para dibujar la comida en la supercie, solo debemos dibujar un pequeo

    rectngulo por ejemplo de color verde:

    # for i in range(len(comida)):

    # pygame.draw.rect(supercie, VERDE, comida[i])

    Actualizamos todo lo que hemos hecho:

    # pygame.display.update()

    48

  • Recuerde, que es necesario crear el bucle al comienzo del juego

    para usar nuestra funcin QUIT y cerrar todo lo que hemos hecho,

    si no recuerdas el cdigo, psate por captulos anteriores y podrs

    vericarlo. Algo importante que es necesario acotar, es la veloci-

    dad de actualizacin de los cuadros por segundo, podemos denir

    un reloj principal que se encargue de llevar ese trabajo, colocndole

    por ejemplo un valor de 40 sin utilizar alguna funcin: # relojPrin-

    cipal.tick(40) Lo prometido es deuda, recuerda que te nombre que

    exista una forma menos tediosa y relativamente fcil de detectar las

    colisiones que hagamos, pues te dir que usando la funcin collid-

    erect preguntamos si un rectngulo esta colisionando con el otro pues

    entonces remueve el otro rectngulo que fue colisionado o en los tr-

    minos que estamos usando, simplemente comido, de esta manera nos

    ahorramos mucho cdigo ya que Pygame ya la mantiene en su arsenal

    de herramientas

    # for bocado in comida[:]:

    # if jugador.colliderect(bocado):

    # comida.remove(bocado)

    Puedes vericar todo lo que has logrado hasta el momento, com-

    parando con la gura Figura: Rectngulo comiendo a todos los dems

    mini rectngulos usando Pygame.

    49

  • Te imaginas, en un volante viajando por ciento de ciudades en

    Venezuela, disfrutando de los grandes paisajes que te puede ofrecer

    este hermoso pas, pues si yo me lo imagino y cuando realizamos

    esta documentacin pensbamos en ella siempre, pues es hora de

    que agarres tu mejor volante y te prepares a controlar a nuestro

    pequeo rectngulo hambriento para comerse todo lo que veamos. Te

    enseare a poder usar las echas como teclas de tu teclado favorito y

    poder controlar nuestros futuros personajes. Es muy importante que

    prestes atencin, ya que es fundamental que sepas como realizar la

    deteccin de eventos cuando alguien oprime una tecla. Podemos usar

    lo que llevamos hasta ahora, pero hay una gran diferencia y es que

    las variables que denimos de direccin vamos a cambiarlas por un

    valor falso, Por qu? Ahora nosotros seremos los que deniremos el

    movimiento de la gura con la tecla que apretemos, se escucha difcil,

    pero en realidad no lo es, vamos a denir entonces nuestra nueva

    variable:

    # ABAJO = False

    # DERECHA = False

    # IZQUIERDA = False

    # ARRIBA = False

    Decimos entonces que si se oprime una tecla o ocurre el evento

    de apretar una tecla que es denido como el KEYDOWN, vamos

    asignar los movimientos:

    # if event.type == KEYDOWN:

    Si nos movemos a la izquierda, pues asignamos que es verdadero

    a la izquierda y de lo contrario, sea a la derecha ser falso:

    # if event.key == K_LEFT:

    50

  • # DERECHA = False

    # IZQUIERDA = True

    Figura 28: rectngulo en la izquierda

    Figura: rectngulo en la izquierda As poco a poco iremos asig-

    nando cada una de ellas, por ejemplo si vamos a la derecha hace-

    mos lo contrario a la izquierda. Verdadero a la derecha y falso a la

    izquierda, Por qu colocar verdadero y falso? Para evitarle confu-

    siones a Python dicindole que solo tomara un camino y no dos al

    mismo tiempo, esto claro cuando se presiona una tecla:

    # if event.key == K_RIGHT:

    # IZQUIERDA = False

    # DERECHA = True

    Figura: rectngulo en la derecha

    Si nos movemos arriba:

    # if event.key == K_UP:

    51

  • # ABAJO = False

    # ARRIBA = True

    Figura: rectngulo arriba

    Si queremos ir abajo

    # if event.key == K_DOWN:

    # ARRIBA = False

    # ABAJO = True

    Figura: rectngulo abajo

    Ahora cuando no se presiona ninguna tecla, colocaremos todo

    en falso y haremos que se reinicialicen las posiciones, esto har que

    nuestro rectngulo se quede quieto ya que no tendr ninguna posicin

    a donde dirigirse. Esto es posible usando el tipo de evento KEYUP.

    Como algo extra, hemos aadido que si presiona la tecla ESCAPE

    simplemente se saldr del juego. Esto no es algo que debes aprenderte

    siempre, estas variables estn predenidas en Pygame.

    # if event.type == KEYUP:

    52

  • # if event.key == K_ESCAPE:

    # pygame.quit()

    # sys.exit()

    # if event.key == K_LEFT:

    # IZQUIERDA = False

    # if event.key == K_RIGHT:

    # DERECHA = False

    # if event.key == K_UP:

    # ARRIBA = False

    # if event.key == K_DOWN:

    # ABAJO = False

    Tambin puedes asignar cualquier tecla y asignarle su funcin

    en el juego. Por ejemplo, podemos colocar la tecla X para mover

    aleatoriamente al rectngulo.

    # if event.key == ord('x'):

    # jugador.top = random.randint(0, ALTOVENTANA - jugador.height)

    # jugador.left = random.randint(0, ANCHOVENTANA - jugador.width)

    Existe una variante con respecto a la velocidad, recordando que

    los valores de modicacin de arriba a la izquierda se harn ahora

    al jugador sea a nuestra gura directamente, igual como lo hemos

    venido trabajando. Recordemos que la variable jugado la estamos

    asignando a la gura rectangular. Con estamos, haciendo que nuestra

    gura no se salga de la ventana

    # if ABAJO and jugador.bottom < ALTOVENTANA:

    # jugador.top += VELOCIDAD

    # if ARRIBA and jugador.top > 0:

    # jugador.top -= VELOCIDAD

    # if IZQUIERDA and jugador.left > 0:

    # jugador.left -= VELOCIDAD

    # if DERECHA and jugador.right < ANCHOVENTANA:

    # jugador.right += VELOCIDAD

    53

  • Capitulo IV

    Llego la hora que ms esperabas, es hora de desarrollar algo

    ms completo, con fondo, msica y efectos alucinantes, dile adis a

    tus consolas o esos juegos de computadoras que cuestan mucho dinero,

    ya que t mismo podrs desarrollar cualquier cantidad de juegos y

    como te dije el limite lo pondr tu imaginacin. Vamos a seguir man-

    teniendo el esquema que hemos venido trabajando pero en este juego

    que haremos, van a cambiar muchas cosas porque en la parte de col-

    isiones debemos controlar por un lado la movilidad del juego y por

    otro lado los puntajes que pueda tener el jugador. Ya hemos creando

    una ventana con una supercie, le pusimos un nombre, la pintamos

    y dibujamos varias guras geometras dentro de ella e incluso pudi-

    mos controlarla y que se comiera otras guras, respetando siempre

    una limitacin de zona que fue impuesta para que no rompiera la

    ventana, pero ahora vamos a salirnos de la ventana e incluso de la

    mismo planeta para viajar con una pequea nave a muchas galaxias,

    siempre ha sido mi sueo viajar por el innito y ms all pero en el

    viaje siempre te encontraras con cientos de asteroides, es por ello que

    debemos esquvalos y porque no llevar la cuenta para decirle a todos

    tus amigos cuantos esquivaste y saliste ileso en el intento o quicas

    no tan ileso. Recuerda que primero debes ir importando todas las

    libreras y herramientas de Pygame, tambin podemos denir la ve-

    locidad de nuestro juego en cuadros por segundo, vamos a colocarle

    40.

    # FPS = 40

    Luego podemos seguir armando variables como el ancho y largo de la ventana

    o el color de texto y fondo que pueden ser denidas as:

    # COLORTEXTO = (255, 255, 255)

    # COLORFONDO = (0, 0, 0)

    54

  • Pasamos a denir las variables fundamentales de los elementos

    del juego, tales como los asteroides y nuestra nave. Por ejemplo,

    cuanto es el mnimo y mximo de asteroides aparecern en nuestro

    viaje y sus velocidades, la velocidad que aparecern cada asteroide

    luego de que nos alejemos de unos cuantos y la velocidad de nuestra

    nave, podemos indicarle que sea una gran y rpida nave o con una

    velocidad modesta.

    # ASTEROIDEMIN = 10

    # ASTEROIDEMAX = 40

    # ASTEROIDEMINVEL = 1

    # ASTEROIDEMAXVEL = 8

    # AGREGASTEROIDVEL = 6

    # VELOCIDADJUGADOR = 5

    Denamos de una vez, una funcin que cierre el juego:

    # def terminate():

    # pygame.quit()

    # sys.exit()

    Durante, el comienzo del juego es bien importante que logres

    llamar la atencin del jugador y de buscar las facilidades para comen-

    zar el juego, podemos denir una funcin de espera, Qu quiere

    decir eso? Hacemos que el jugador apriete una tecla para comenzar

    el juego y as el decidir el momento de inicio o n del mismo usando

    los tipo de eventos KEYDOWN donde presione alguna tecla o la tecla

    escape para salir usando QUIT.

    # def esperarJugadorPresTecla():

    # while True:

    # for event in pygame.event.get():

    # if event.type == QUIT:

    # terminate()

    # if event.type == KEYDOWN:

    # if event.key == K_ESCAPE:

    # Presionar escape naliza

    55

  • # terminate()

    # return

    Si te das cuenta, estamos usando todo lo que hemos aprendido

    hasta ahora para realizar un juego ms completo y divertido que

    un simple rectngulo, pero aun as necesitamos de colisiones para

    saber si nuestra nave chocara con algn asteroide, bsicamente us-

    amos el mtodo fcil que anteriormente fue explicado llamado collid-

    erect. Mandando el rectngulo perteneciente a la nave espacial con

    todo el arreglo del vector de asteroides, recuerda que en un vector de

    tipo arreglo pues hemos almacenado todo los asteroides y pues cada

    vez que iniciemos el juego, vericara que haga alguna colisin con al-

    guno de esos asteroides. # def JugadorColisionAsteroide(naveRect,

    asteroides):

    # for b in asteroides:

    # if naveRect.colliderect(b['rect']):

    # return True

    # return False

    Ya que estamos realizando algo ms profesional, necesitaremos

    que nuestro juego llame la atencin es por eso que para ahorrarnos

    cdigo vamos a crear una funcin de texto para lo que tengamos que

    utilizar y no tengamos que por cada lnea de texto denir las mismas

    variables a usar. Donde esta funcin recibir los valores para poder

    dibujar el texto que quiero su fuente y donde lo quiero. Recuerden

    que en captulos anteriores por cada texto que tenamos que agregar

    debimos agregar estas lneas, ahora lo que hacemos es simplicar con

    esta funcin.

    56

  • # def dibujarTexto(text, font, supercie, x, y):

    # textobj = font.render(text, 1, COLORTEXTO)

    # textrect = textobj.get_rect() # textrect.topleft = (x, y)

    # supercie.blit(textobj, textrect)

    Luego tenemos ms de lo mismo, inicializar la librera llamando

    al mtodo INIT, porque Pygame ejecutara cierta cantidad de cdigo

    para preparase y un reloj inicial. pygame.init() relojPrincipal =

    pygame.time.Clock() Seguimos con la supercie:

    # supercieVentana = pygame.display.set_mode((ANCHOVENTANA, AL-

    TOVENTANA), 0, 32)

    El ttulo de la ventana, donde indicamos que el mouse no se vea

    en la pantalla, eso depende del tipo de juegos que realicen, ya que

    pueden usar el ratn sin ningn problema en los juegos que diseen,

    en este caso no lo necesitamos:

    # pygame.display.set_caption('Asteroides')

    # pygame.mouse.set_visible(False) Inicializar las Fuentes de nuestro juego:

    # font = pygame.font.SysFont(None, 44)

    Figura 35: Comienzo del juego en espera que el jugador presione una tecla

    Probando, Probando, 1...2...3

    57

  • Ahora, pasemos a algo completamente nuevo, inicializar sonidos

    con Pygame es muy sencillo y simple, l nos facilita mucho la vida

    con sus funciones mixer.sound y mixer.load, ellas buscan y cargan

    respectivamente el archivo de sonido que queremos ejecutar, lo nico

    que debemos realizar es crear una variable para ellas y diferenciarla

    los sonidos en la trama, por ejemplo para el sonido de n de juego

    solo debemos escribir:

    # sonidoFinJuego = pygame.mixer.Sound('pygameFinal_over.wav')

    # pygame.mixer.music.load('pygameFinal_bg.mid'

    El archivo de mixer ser tomado como la msica de fondo, esto

    no quiere una variable de control como la variable sonidoFinJuego,

    porque automticamente el mixer de Pygame lo ejecuta. Si te has

    dado cuenta se ha creado una variable llamada sonidoFinJuego con la

    nalidad de controlar ese evento exacto con el sonido cuya extensin

    en este caso es .wav. Como nota importante, debes recordar que si

    tienes todos los sonidos e imgenes en la misma carpeta ejecutable del

    juego, no ser necesaria colocar una ruta pero de lo contrario debers

    hacerlo. Cabe destacar, que los sonidos del juego de ejemplo que es-

    tamos realizando son basados en los sonidos de Mario Bross. Puedes

    colocar cualquier sonido que desees y editarlos, recomendamos siem-

    pre el uso de programas libres es por ello que recomendamos el uso

    de AudaCity como editor y grabador libre, mostramos en la gura el

    logotipo de este maravilloso programa.

    Figura: Logotipo de AudaCity, software libre para la edicin de msica y

    sonidos.

    Amor a primera vista

    Ya que tenemos nuestros novedosos efectos de sonido y la msica

    de fondo, hay que darle ms vida y eso ser gracias a las imgenes.

    Lo primero que haremos es crear una variable que cargue la imagen

    donde gracias a la funcin de Pygame image.load podremos cargar

    nuestra imagen ubicada en la ruta correspondiente, al nosotros por

    ejemplo cargar la imagen de nuestra nave, automticamente debe

    58

  • generar un rectngulo de la aeronave, porque necesitamos saber el an-

    cho y alto de la imagen para saber done estn las colisiones, porque

    estas van a suceder con el rectngulo de la imagen mas no direc-

    tamente a la imagen que subamos, aunque el mismo sea invisible

    pero necesario para el paso fundamental de las colisiones. El manejo

    de sprites, que son todos estos bits dibujados para nuestra ventana,

    pueden ser creados usando tecnologas libres tales como GIMP, un

    entorno para la edicin de imgenes completamente gratuito y libre.

    Puedes pasar por la imagen y ver su logo.

    Figura: Logotipo de GIMP, software libre para la edicin de imgenes.

    # imagenNave = pygame.image.load('pygameFinal_avion.png')

    # naveRect = imagenNave.get_rect()

    En el caso de la imagen de fondo y el asteroide es lo mismo,

    debemos cargar nuestras imgenes con la funcin de Pygame que

    hemos comentado. # imagenAsteroide = pygame.image.load('pygameFinal_roca.png')

    # imagenFondo = pygame.image.load('pygameFinal_campo.png')

    De la misma manera que hicimos con la nave, haremos una

    variable inmediata del fondo para obtener el ancho y largo del fondo

    para las colisiones, me permite acceder a otras propiedades en el

    mapa.

    # fondoRect = imagenFondo.get_rect()

    Para dibujar el campo de asteroides, simplemente usamos una

    funcin de Pygame llamada BLIT, me permitir agregar la imagen

    fondo con las propiedades del fondoRect, que es lo extraido de la

    imagen de fondo.

    # supercieVentana.blit(imagenFondo, fondoRect)

    59

  • Pasemos, a mostrar el inicio de nuestro juego, dibujando un

    texto muy bonito dndole la bienvenida al usuario y armndole que

    si presiona una tecla comenzara el juego, todo el texto estar en las

    posiciones X y Y que hemos explicado en captulos anteriores. Y

    pasamos a actualizar todo lo que llevamos con update:

    # dibujarTexto('Asteroides!', font, supercieVentana, 200, 100)

    # dibujarTexto('Presiona una tecla para comenzar', font, supercieVen-

    tana, 25,300)

    # pygame.display.update()

    Hacemos recordarle a Python que se debe esperar a que el ju-

    gador presione una tecla, as es, nuestro querido Python puede ser

    un poco sobre la marcha si no le advertimos que debe tener un poco

    de paciencia, para ello escribimos:

    # esperarJugadorPresTecla()

    Si, queremos agregarle puntaciones al juego debemos denir en

    0 una variable de puntaje alto de esa forma si esta fuera de un bucle

    se ira almacenando por cada juego. De esta forma, el jugador seguir

    jugando y almacenando sus puntajes pero si cierra el juego y lo vuelve

    abrir comenzara de nuevo.

    # puntajeAlto = 0

    Ahora si podemos comenzar el bucle innito que nos llevara a

    seguir el juego, desde aqu el jugador le da una tecla y comenzara el

    juego: Que comience el juego

    Figura 38: Carpeta donde est almacenado todos los archivos del juego,

    incluyendo las imgenes y sonidos.

    60

  • # while True:

    Luego del bucle, podemos seguir inicializando condiciones al

    juego, las que queramos porque somos los creadores del mismo. Colo-

    camos la nave en el centro de la pantalla, la forma ms fcil de realizar

    esto, es dividendo el ancho de la ventana entre dos y el alto menos

    50 para que quede abajo la nave , el contador de asteroides en 0 y el

    puntaje por supuesto desde 0, los asteroides an no hay ninguno:

    # asteroides = []

    # puntaje = 0

    # naveRect.topleft = (ANCHOVENTANA / 2, ALTOVENTANA - 50)

    # contadorAsteroides = 0

    Para que no exista un movimiento inicial de la nave, debers

    colocarlos en falso, te muestro a continuacin una forma ms rpida de

    la que mostramos en captulos anteriores, donde una variable puede

    ser igual a varias y estas sern al nal igual a falso.

    # moverIzq = moverDer = moverArriba = moverAbajo = False

    Si deseas aadir algunos trucos, por ejemplo hacer que la nave

    este ms lenta o su camino sea reserva, tambin puedes hacerlo, re-

    cuerda que los lmites los pondr tu imaginacin, pero desde el prin-

    cipio los colocaremos en falso, ya que la activacin de los mismos lo

    decidir el jugador:

    # trucoReversa = trucoLento = False

    Aqu es donde comienza la msica de fondo del juego, es por

    eso que la inicialicemos con:

    # pygame.mixer.music.play(-1, 0.0)

    61

  • Figura 39: El juego en plena accin con la msica de fondo y sonidos extras

    con la temtica de esquivar los asteroides. En la parte superior izquierda, se

    muestran los puntajes

    Controles Ahora, vamos a iniciar un segundo loop innito, Por

    qu?, este se ejecutara para lograr el movimiento de los asteroides y

    dems acciones del juego restante.

    # while true:

    Puedes observar, que desde la interaccin del while vamos a in-

    crementar el puntaje que vamos acumulando con la variable puntaje:

    # puntaje += 1

    Llegamos al punto, donde si sucede le evento salir, sencillamente

    se sale del juego recurriendo a la funcin QUIT que har terminar

    todo:

    # for event in pygame.event.get(): # if event.type == QUIT:

    # terminate()

    Luego, revisaremos los eventos al presionar una tecla, usando

    KEYDOWN como hemos explicado en captulos anteriores, recorde-

    mos que debemos jugar con el verdadero y falso de cada uno de los

    movimiento. Hay algo muy interesante que destacar, es que si aprieta

    la tecla X o Z, estaremos utilizando los trucos, esto signicara que

    cambiara a verdadero su valor:

    # if event.type == KEYDOWN:

    # if event.key == ord('z'):

    # trucoReversa = True

    62

  • # if event.key == ord('x'):

    # trucoLento = True

    # if event.key == K_LEFT or event.key == ord('a'):

    # moverDer = False

    # moverIzq = True

    # if event.key == K_RIGHT or event.key == ord('d'):

    # moverIzq = False

    # moverDer = True

    # if event.key == K_UP or event.key == ord('w'):

    # moverAbajo = False

    # moverArriba = True

    # if event.key == K_DOWN or event.key == ord('s'):

    # moverArriba = False

    # moverAbajo = True

    De igual forma, suceder si las teclas son liberadas, de ninguna

    manera deber existir movimiento de la aeronave que queremos con-

    trolar, este caso los trucos nuevamente son llevados a falso:

    # if event.type == KEYUP:

    # if event.key == ord('z'):

    # trucoReversa = False

    # puntaje = 0

    # if event.key == ord('x'):

    # trucoLento = False

    # puntaje = 0

    # if event.key == K_ESCAPE:

    # terminate()

    # if event.key == K_LEFT or event.key == ord('a'):

    # moverIzq = False

    63

  • # if event.key == K_RIGHT or event.key == ord('d'):

    # moverDer = False

    # if event.key == K_UP or event.key == ord('w'):

    # moverArriba = False

    # if event.key == K_DOWN or event.key == ord('s'):

    # moverAbajo = False

    Es tiempo de aadir todos los asteroides necesitados al principio

    de la pantalla de ser necesario, si hay algn truco activo no agregara

    los nuevos asteroides:

    # if not trucoReversa and not trucoLento:

    # contadorAsteroides += 1

    # if contadorAsteroides == AGREGASTEROIDVEL:

    ContadorAsteroides = 0 Los asteroides son agregados aleato-

    rios, gracias a random. Hay algo interesante que destacar, es que

    en la supercie vamos a agregar la imagen del asteroide con la fun-

    cin llamada transform.scale de esta forma nos dar aleatoriamente

    el ancho y largo del asteroide. La velocidad tambin es denida.

    #ASTEROIDETAM= random.randint (ASTEROIDEMIN, ASTEROIDE-

    MAX)

    # nuevoAsteroide = {

    # 'rect' : pygame.Rect(random.randint(0,

    #ANCHOVENTANA-ASTEROIDETAM), 0 - ASTEROIDETAM,

    #ASTEROIDETAM, ASTEROIDETAM),

    # 'speed' : random.randint(ASTEROIDEMINVEL,

    #ASTEROIDEMAXVEL),

    # 'supercie' : pygame.transform.scale(imagenAsteroide,

    # (ASTEROIDETAM, ASTEROIDETAM)), }

    64

  • Terminando Ahora, vamos a decirle a Python, como se mover

    el jugador, en este caso la aeronave:

    # if moverIzq and naveRect.left > 0: naveRect.move_ip(-1 * VELOCI-

    DADJUGADOR, 0)

    # if moverDer and naveRect.right < ANCHOVENTANA: naveRect.move_ip(VELOCIDADJUGADOR,

    0)

    # if moverArriba and naveRect.top > 0: naveRect.move_ip(0, -1 * VE-

    LOCIDADJUGADOR)

    # if moverAbajo and naveRect.bottom < ALTOVENTANA: naveRect.move_ip(0,

    VELOCIDADJUGADOR)

    Movamos los asteroides hacia abajo, siempre vericando los tru-

    cos, siempre se mover hacia abajo a la velocidad que nosotros de-

    namos y esta ser aleatoria, por eso ac podemos denir que los as-

    teroides sern algunos ms lentos y otros ms rpidos, si el truco de

    reversa est activado, quiere decir que estos se movern hacia arriba

    con el valor -5, si los asteroides pasan al truco lento sern denidos

    con el valor de 1.

    # for b in asteroides:

    # if not trucoReversa and not trucoLento:

    # b['rect'].move_ip(0, b['speed'])

    # elif trucoReversa:

    # b['rect'].move_ip(0, -5)

    # elif trucoLento:

    # b['rect'].move_ip(0, 1)

    Para borrar los asteroides que se pasaron del alto de la pantalla,

    pues ya los hemos pasado y no queremos volver a verlos. Usamos un

    remove por cada asteroide que va hacia el alto de la ventana (top):

    # for b in asteroides[:]:

    # if b['rect'].top > ALTOVENTANA:

    # asteroides.remove(b)

    Pasamos a dibujar la supercie del juego con el color de fondo

    denido:

    # supercieVentana.ll(COLORFONDO)

    65

  • Y dibujamos el campo de asteroides de fondo, usando blit.

    Porque recuerdan que siempre se hacen hacer un update y se realiza

    la actualizacin de la pantalla esta se limpiara.

    # supercieVentana.blit(imagenFondo, fondoRect)

    Mostramos los puntajes llamando el dibujarTexto, usamos el

    parmetro d %s para tomar los valores de puntaje y puntajeAlto

    con sus respectiva fuente y en donde estar ubicado.

    # dibujarTexto('Puntaje: %s' % (puntaje), font, supercieVentana, 10, 0)

    # dibujarTexto('Mejor: %s' % (puntajeAlto), font, supercieVentana, 10,

    40)

    Ahora comencemos a dibujar el rectngulo del jugador con su

    imagen:

    # supercieVentana.blit(imagenNave, naveRect)

    Dibujamos todos los asteroides del vector, vamos a recorrer todo

    el vector para poder sacar la supercie y el rect.

    # for b in asteroides:

    # supercieVentana.blit(b['supercie'], b['rect'])

    Actualizamos pantalla:

    # pygame.display.update()

    Vericamos las colisiones y la velocidad del juego :

    # if JugadorColisionAsteroide(naveRect, asteroides):

    # if puntaje > puntajeAlto:

    # puntajeAlto = puntaje

    # dene el puntaje ms alto

    # break

    # relojPrincipal.tick(FPS)

    66

  • Al salir del segundo bucle, quiere decir que un asteroide toco la

    nave. Entonces detenemos la msica de fondo y debe sonar el n de

    juego con sus respectivos textos de nal de juego, avisndole si desea

    presionar una tecla para jugar de nuevo:

    # pygame.mixer.music.stop()

    # sonidoFinJuego.play()

    # dibujarTexto('GAME OVER', font, supercieVentana, 200, 200)

    # dibujarTexto ('Presiona una tecla para jugar otra vez.', font, super-

    cieVentana, 25, 300

    Hacemos un ltimo recordatorio a Python de todo lo que hemos

    hecho hasta ahora con update y para nalizar, declaramos esperar

    hasta que el jugador presione una tecla y se activa el sonido de n de

    juego, listo y sintete orgullo de desarrollar tu primer juego usando

    Python y esta gran librera llamada Pygame.

    # pygame.display.update()

    # esperarJugadorPresTecla()

    # sonidoFinJuego.stop()

    Figura 40: Cuando ocurre la colisin, se acaba el juego mostrando un ttulo

    para comenzar de nuevo.

    67

  • Videos Juegos Realizados en Python: Sansn y Los Filisteos.

    Este Video Juego fue Realizado por: Garca Jocabed Moreno Mariana

    Sansn: Se caracteriza por una gura herclea, usando una extraordinaria

    fuerza para combatir contra sus enemigos y llevar a cabo actos heroicos

    inalcanzables para la gente comn: luchar contra un len (sin ms ar-

    mas que sus propias manos), acabar con todo un ejrcito con slo una

    mandbula de burro, o derribar un edicio.

    Filisteos: Los listeos aparecen en fuentes egipcias donde son presentados

    como los enemigos de Egipto venidos del norte, mezclados con otras pobla-

    ciones hostiles conocidas colectivamente por los antiguos egipcios bajo el

    nombre de Pueblos del Mar.

    68

  • En la lnea 353 imagen.set_colorkey (imagen.get_at((0,0)) , pygame.RLEACCEL

    ) que hace esa funcin? R: Un sprite es un objeto que tiene dos propiedades:

    image y rect. "image" es la imagen a mostrar y "rect" es el rectngulo

    en donde se muestra la imagen en pantalla, para ello utilizamos clases

    como "bala" que hereda a su vez de la clase "pema" que en este caso

    sera nuestro punto de partida. En la clase "bala" denimos el disparador

    y su velocidad, si notan la lnea 256 se empiezan a comprobar todas las

    condiciones dependiendo si este choca con un objetivo o simplemente hace

    contacto con la misma pared de nuestro juego.

    Qu hace: letra = pygame.font.Font ('Grandezza.ttf', 25)? R: letra =

    pygame.font.Font ('Grandezza.ttf', 25) hace el llamado al archivo que es

    para el formato de las letras q se muestra en el inicio.

    Sugerencias de Parte del Grupo:

    Recuerden que para poder iniciar siempre un juego nuevo o a su vez visto

    por primera vez, es necesario que revisemos de manera detallada sus in-

    strucciones, para as no presentar muchos inconvenientes a la hora de jugar

    el mismo.

    Tambin a la hora de realizar cualquier juego, querer modicar los mismos

    o modicar los cdigos de los mismos. Hay que respetar esa parte, es decir

    respetar los derechos de autor ya que son temas muy delicados y si no los

    conocemos a fondo son ms delicados.

    El video juego: Sansn y los listeos, es muy bueno, muy creativo y su

    parte de diseo es muy original.

    Videos Juegos Realizados en Python:

    Astuto Ben.

    Este Video Juego fue Realizado por:

    Blanco Laudis Carrasquel Rosmauris

    Guayapero Reynaldo

    Leota Brbara Mendoza

    Diana Pulido Naicelis

    69

  • Astuto Ben: Es un videojuego basado en Bobby Carrot, creado en el

    lenguaje python que busca despertar el inters y la motivacin espontanea

    de los usuarios que lo ejecutan. Bobby Carrot es una serie de videojuegos

    producida, desarrollada y publicada por la empresa alemana FDG Mobile

    Games. La primera entrega de la serie se distribuy gratuitamente, prein-

    stalndola en numerosos modelos de telfonos Samsung, por gentileza de

    eFUSION Mobile. La serie consta hasta ahora de cinco juegos, todos ellos

    diseados para telfonos mviles.

    Videos Juegos Realizados en Python: El Helicptero.

    Este Video Juego fue Realizado por:

    Boada, Jess

    Bolvar,Jos

    Guevara, Marianny

    Quijada, Angel

    Helicptero: Es una aeronave que es sustentada y propulsada por uno o

    ms rotores horizontales, cada uno formado por dos o ms palas. Los

    helicpteros estn clasicados como aeronaves de alas giratorias para dis-

    tinguirlos de las aeronaves de ala ja porque los helicpteros crean sus-

    tentacin con las palas que rotan alrededor de un eje vertical.

    Que Hace la Funcin def (HelicopteroRect, meteoritos):for b in me-

    teoritos: return true return false?

    R: def (HelicopteroRect, meteoritos):

    for b in meteoritos: if HelicopteroRect.colliderect (b[`rect`]):

    Return true

    70

  • Return false Esta funcin determina la colisin entre el helicptero y al-

    gunos de los meteoritos.

    Funcion para terminar juego def terminar():

    #Funcion que permite terminar el juego. pygame.quit() sys.exit()

    def Esperar():

    #Funcion que espera que se presione una tecla despues de la "colision",

    para volver a jugar o salir del juego.

    Este codigo va debajo de TEXCOLOR = BLANCO

    while True:

    for event in pygame.event.get():

    if event.type == QUIT:

    terminar() if event.type == KEYDOWN:

    if event.key == K_ESCAPE: #Al presionar escape cierra la ventana de

    juego. terminar()

    return.

    Este otro codigo que es otra funcion es el que nos permite dibu-

    jar el texto en la pantalla lo debes colocar debajo de #Funcion que

    espera que se presione una tecla despues de la "colision", para volver

    a jugar o salir del juego.

    #Dibuja el texto en la pantalla.

    def DibujarTexto(text, font, screen, x, y):

    textobj = font.render(text, 1, TEXTCOLOR)

    textrect = textobj.get_rect()

    textrect.topleft = (x, y)

    screen.blit(textobj, textrect)

    # Creamos la fuente y asignamos un tamao a la misma.

    font = pygame.font.SysFont(None, 50)

    71

  • Y por ultimo este otro codigo lo debes colocar debajo de Pun-

    taje_Panta('Juego Terminado.Puntaje: %s' % puntos, font, screen,

    0, 0, BLANCO)

    #muestra el mensaje de game over.

    DibujarTexto('Presiona una tecla.',font, screen, (SCREEN_WIDTH / 3)

    - 50, (SCREEN_HEIGHT / 3) + 50)

    DibujarTexto('para intentarlo nuevamente.',font, screen, (SCREEN_WIDTH

    / 3) - 130, (SCREEN_HEIGHT / 3) + 80)

    pygame.display.update()

    pygame.display.ip() #Actualizamos la pantalla E