jueves, 13 de octubre de 2011

Hola Mundo

... y con ello no me refiero al típico programa de iniciación en todos los lenguajes de programación.

Hasta ahora teníamos un mapa y un personaje que se movía por él sin problemas.

Bien, ¿y si queremos tener más estados de juego y más personajes?, ¿en cada estado del juego tendremos que repetir el código de dibujar el mapas y los personajes?.
Pues no, para eso vamos a crear una Clase Mundo a la que le pasaremos el mapa y los personajes que van a intervenir.

Para ello creamos en el raiz del proyecto un archivo llamado mundo.py con el siguiente codigo:
# -*- coding: utf-8 -*-

import pygame
from pygame.locals import *

from mapa import *
from personaje import *

sábado, 8 de octubre de 2011

Colisiones del personaje con el mapa

Hoy vamos a detectar las colisiones con el mapa y no permitir el movimiento en las zonas no "pisables".

Para ello vamos a usar la capa llamada "Pisable" que creamos con las X rojas para indicar que por allí no se podría pasar.


Primero en la clase Mapa (mapa.py) vamos a crear un método que nos dirá si se puede pisar o no en la celda indicada.

def es_pisable(self, fila, columna):
        # Si se intenta mover fuera del mapa, no se permite
        if ((fila >= self.height) or (fila < 0) or (columna >= self.width) or (columna < 0)):
            return False
        else:
            return not (self.capas[Mapa.LAYER_PISABLE][fila][columna])

jueves, 6 de octubre de 2011

El Personaje

Bueno hoy vamos a crear un personaje que se mueva por nuestro mapa. Lo vamos a hacer inicialmente sin animaciones, solo que se mueva de celda en celda del mapa.


Inicialmente vamos a añadir un método en la clase Mapa para que nos devuelva la posición central de una celda del mismo.

class Mapa:

    ...

    def obtener_centro_celda(self, fila, columna):
        x = (self.tam_tiles[0] * columna) + (self.tam_tiles[0] / 2)
        y = (self.tam_tiles[1] * fila) + (self.tam_tiles[1] / 2)
        return (x,y)



Este método nos servirá para centrar el personaje en la celda en la que se encuentra.

Ahora vamos a crear la clase Personaje en un archivo en el directorio raíz llamado personaje.py.

# -*- coding: utf-8 -*-
from pygame.locals import *

from utilidades.imagen import *

class Personaje():

miércoles, 5 de octubre de 2011

Cargar mapas en el juego

Bueno llegó el momento de cargar el mapa creado en el articulo "Crear mapas con Tiled Map Editor".

Para ello primero crearemos el archivo mapa.py en la raiz del proyecto.

# -*- coding: utf-8 -*-
from xml.dom import minidom
import base64
import gzip
import StringIO

from utilidades.imagen import *
from utilidades.archivo import *

class Mapa:

    LAYER_PISABLE = 0
    LAYER_SUELO = 1
    LAYER_OBJETOS = 2
    LAYER_OBJETOS_SUPERPUESTOS = 3
    LAYER_CIELO = 4

Crear mapas con Tiled Map Editor

El Tiled Maps Editor es un programa que permite generar mapas de una forma sencilla para la creación de juegos.

Para instalarlo en linux, en distribuciones basadas en debian, debéis ejecutar:

apt-get install tiled

Para los usuarios de windows podeis acceder a la página del proyecto y descargaros la ultima versión.

http://www.mapeditor.org/

Bueno, ahora ejecutamos el programa y creamos un mapa nuevo.
En tamaño del patrón debeis especificar el tamaño de los tiles que forman nuestro tileset. En este caso será de 16x16 pixeles.


En Edición -> Preferencias deberemos dejar las opciones como muestro ahora. Esto es importante porque cuando carguemos el mapa en el juego, este debe estar comprimido en Base64 gzip.




Ahora en Capa -> Añadir Capa de Patrones, añadiremos las capas que muestro a continuación en el orden que veis.

Nueva galeria de imagenes

El otro día vimos como gestionar las imágenes del juego.

Pues bien, he pensado que para el proyecto es mejor que useis estas imágenes:
Descargar imágenes

(Las imágenes están extraidas de los juegos del pokemon).

Recordad, las teneis que descomprimir en la carpeta data/imagenes/.
Así pues quedarán de la siguiente forma:
data/imagenes/enemigo.png
data/imagenes/jugador.png
data/imagenes/policia.png
data/imagenes/tileset.png

En este caso los tilesets son de 16x16 pixeles.
Los nombres son bastantes descriptivos de lo que contienen ;).

Bueno, en el proximo artículo os explicaré como crear nuestro primer mapa.

Nos vemos.