<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2224637814982711187</id><updated>2012-02-16T11:04:02.297-03:00</updated><category term='Pygame'/><category term='Python'/><category term='Multijugador Online'/><category term='pyopengl'/><category term='Estructuras de datos'/><category term='frameworks'/><category term='php'/><category term='SDL'/><category term='HTML'/><category term='codeigniter'/><category term='webcam'/><category term='Conceptos'/><category term='Mis Juegos'/><category term='midi'/><category term='cake'/><category term='Enlaces'/><category term='Pseudocodigo'/><title type='text'>Crea tus juegos</title><subtitle type='html'>Un blog acerca de la programacion de video juegos</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-3823535779787406762</id><published>2009-08-05T15:00:00.002-04:00</published><updated>2009-08-05T15:23:39.197-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Multijugador Online'/><category scheme='http://www.blogger.com/atom/ns#' term='cake'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>Juegos para navegadores II</title><content type='html'>&lt;p&gt;A pasado ya mas de un año de la ultima vez que escribi en este tema, pero he estado trabajando principalmente en diseño web y aprendido algún par de cosas interesantes de mencionar.&lt;/p&gt;&lt;p&gt;En primer lugar debo mencionar que asi como existen frameworks para python y ruby que son lenguajes sencillos de aprender, tambien existen frameworks para php que simplifican mucho el trabajo, yo se que antes dije que php era lenguaje un tanto criptico, pero la verdad es que es cosa de costumbres y la mayoria de los frameworks te hacen la mayor parte del trabajo.&lt;/p&gt;&lt;p&gt;actualmente existen muchos y cada dia salen nuevos frameworks, la mayoria de ellos inclusive son gratis y de licencias libres, en particular debo mencionar los dos que mas me gustan, estos son &lt;a href="http://codeigniter.com/"&gt;codeigniter&lt;/a&gt;, y &lt;a href="http://cakephp.org/"&gt;cakephp&lt;/a&gt; . &lt;/p&gt;&lt;p&gt;Las diferencias de estos dos son enormes, el primero es muy liviano, pero no cuenta con demasiadas herramientas, sin embargo la curva de aprendizaje es casi indolora, sabiendo php aprender codeigniter es cosa de una o dos horas, el segundo cakephp es completamente lo contrario, cuenta con muchas herramientas, pero tambien tiene muchas convenciones que lo hacen dificil de seguir, sin embargo la mayor gracia de cake es un script que se llama bake, que te construye paginas crud (Create, Update &amp;amp; Delete) para cada una de las tablas de tu base de datos.&lt;/p&gt;&lt;p&gt;Existen muchos mas, pero no tengo experiencia con ellos, por ejemplo esta &lt;a href="http://framework.zend.com/"&gt;zend&lt;/a&gt; y &lt;a href="http://www.symfony-project.org/"&gt;symfony&lt;/a&gt;, que tambien estan muy valorados dentro del mercado.&lt;/p&gt;&lt;p&gt;Algunos se preguntaran que tiene que ver todo esto con juegos de video, la respuesta es que la mayoria de estos juegos de navegador consisten en insertar y recuperar valores de una base de datos, mas un par de imagenes que se muestran en el navegador, y para hacer este tipo de paginas un framework ayuda mucho, y si se espera que corra para mucha gente jugando al mismo tiempo un framework liviano es la solucion. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-3823535779787406762?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/3823535779787406762/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=3823535779787406762' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3823535779787406762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3823535779787406762'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2009/08/juegos-para-navegadores-ii.html' title='Juegos para navegadores II'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-7087949525887348410</id><published>2009-08-05T14:52:00.002-04:00</published><updated>2009-08-05T14:59:17.025-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webcam'/><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='midi'/><title type='text'>Pygame 1.9 esta listo</title><content type='html'>&lt;p&gt;Han sacado una nueva version de pygame, la version 1.9, esta incluye varios cambios, pero los mas relevantes de mencionar son lejos soporte para webcams y soporte para midi, con esto se pueden hacer varias cosas interesantes. Otro cambios incluyen mejor soporte para OSX y soporte para el celular nokia s60  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-7087949525887348410?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/7087949525887348410/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=7087949525887348410' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7087949525887348410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7087949525887348410'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2009/08/pygame-19-esta-listo.html' title='Pygame 1.9 esta listo'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5084881940638353026</id><published>2008-11-22T21:58:00.006-03:00</published><updated>2008-12-09T10:46:00.344-03:00</updated><title type='text'>Backtracking ( Busqueda En Profundidad )</title><content type='html'>Backtracking es una tecnica para resolver problemas de diversos tipos, por ejemplo:&lt;br /&gt;generación de numeros y encontrar salidas de laberintos.&lt;br /&gt;&lt;br /&gt;La tecnica consiste en recorrer todas las soluciones posibles ordenadamente,&lt;br /&gt;asi si estuviesemos hablando de generar todos los numeros posibles de 4 digitos&lt;br /&gt;tendriamos:&lt;br /&gt;&lt;br /&gt;1 1 1 1&lt;br /&gt;2 1 1 1&lt;br /&gt;3 1 1 1&lt;br /&gt;...&lt;br /&gt;9 1 1 1&lt;br /&gt;1 2 1 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora si estuviesemos hablando de encontrar la salida en un laberinto, lo que tendriamos que hacer es recorrer todas las habitaciones del laberinto pero en profundidad esto quiere decir, que una vez que se entra en una pieza, se busca una nueva salida que no sea por donde tu entraste y no te devuelves hasta que llegues a una habitacion sin salida&lt;br /&gt;&lt;br /&gt;imaginemosnos el siguiente mapa&lt;br /&gt;&lt;pre&gt;......&lt;br /&gt;....xf&lt;br /&gt;sxx...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;donde:&lt;br /&gt;&lt;br /&gt;s es el punto de partida&lt;br /&gt;f el punto de llegada&lt;br /&gt;x un muro&lt;br /&gt;. un camino accesible&lt;br /&gt;* un camino ya transitado&lt;br /&gt;&lt;br /&gt;ademas dijimos que backtracking funciona generando soluciones ordenadas, de ahora&lt;br /&gt;en adelante le llamaremos a esto generar nuevos candidatos, los nuevos candidatos son aquellas&lt;br /&gt;posiciones que no han sido transitadas previamente.&lt;br /&gt;&lt;br /&gt;Para este ejemplo usaremos el siguiente criterio:&lt;br /&gt;primero se recorre para arriba si es posible&lt;br /&gt;sino a la derecha&lt;br /&gt;sino abajo&lt;br /&gt;sino la izquierda.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;con este criterio la salida encontrada seria:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;******&lt;br /&gt;*...x*&lt;br /&gt;*xx...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Es importante destacar que backtracking no se preocupa de encontrar la mejor solucion, le&lt;br /&gt;basta con la primera.&lt;br /&gt;&lt;br /&gt;Recapitulando, se necesita&lt;br /&gt;1) un mapa&lt;br /&gt;2) un orden de movimiento ( para la generación de nuevos candidatos )&lt;br /&gt;3) un criterio de llegada, normalmente que la posicion de un personaje este en cierta posicion&lt;br /&gt;&lt;br /&gt;el pseudocodigo es el siguiente&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;listo = falso&lt;br /&gt;backtrack(mapa, camino_recorrido, posicion_nueva)&lt;br /&gt;si llegaste al final:&lt;br /&gt;agregas la posicion a recorrido&lt;br /&gt;listo = verdadero&lt;br /&gt;retornas el camino_recorrido&lt;br /&gt;&lt;br /&gt;si no:&lt;br /&gt;agregas el nuevo punto a camino_recorrido&lt;br /&gt;por cada posicion adyacentes&lt;br /&gt;  si es un movimiento legal y no esta en camino_recorrido&lt;br /&gt;    backtrack(mapa, camino_recorrido, posicion adyacente)&lt;br /&gt;    si esta listo retornas el camino_recorrido&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para empezar simplemte le pasas la posicion de origen.&lt;br /&gt;&lt;br /&gt;Sabes que llegasta al final cuando tu posicion es la posicion de destino&lt;br /&gt;el camino de recorrido puede ser una lista, pero cuidado tienes que copiar la lista&lt;br /&gt;y no pasarlo por referencia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5084881940638353026?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5084881940638353026/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5084881940638353026' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5084881940638353026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5084881940638353026'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/11/backtracking-para-mapas.html' title='Backtracking ( Busqueda En Profundidad )'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-2053411853197854097</id><published>2008-07-08T01:03:00.002-04:00</published><updated>2008-07-08T01:04:53.786-04:00</updated><title type='text'>actualizacion</title><content type='html'>Hace tiempo que no me quedaba tiempo para programar, pero hoy sali de vacaciones, asi que actualize la pagina de codigos, subi un par de ejemplos muy simples hechos en C, y pienso seguir subiendo un monton de codigos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-2053411853197854097?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/2053411853197854097/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=2053411853197854097' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/2053411853197854097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/2053411853197854097'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/07/actualizacion.html' title='actualizacion'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-3504644574379755576</id><published>2008-05-21T01:57:00.003-04:00</published><updated>2008-06-03T12:24:11.816-04:00</updated><title type='text'></title><content type='html'>He decidido dejar de postear los codigos en la pagina debido a la extension de ellos, para eso cree una nueva pagina donde voy a ir poniendo todos los tutoriales.&lt;br /&gt;&lt;br /&gt;La direccion por ahora es:&lt;br /&gt;&lt;a href="http://www.alumnos.utfsm.cl/~gonzalo.sanchez/"&gt;http://www.alumnos.utfsm.cl/~gonzalo.sanchez/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-3504644574379755576?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/3504644574379755576/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=3504644574379755576' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3504644574379755576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3504644574379755576'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/05/he-decidido-dejar-de-postear-los.html' title=''/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6229915443210977094</id><published>2008-05-14T23:31:00.002-04:00</published><updated>2008-05-14T23:44:22.000-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='pyopengl'/><title type='text'></title><content type='html'>Hoy dia por fin me hice el tiempo para volver a programar en python, en esta ocacion les traigo un pequeño programa en python que dibuja un cuadrado que se puede mover por la pantalla cuando uno presiona las flechas del teclado, en el codigo se combinan las librerias pygame y pyopenGL.&lt;br /&gt;&lt;br /&gt;Aqui viene lo interesante, el codigo&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import pygame&lt;br /&gt;from pygame import *&lt;br /&gt;from OpenGL.GL import *&lt;br /&gt;&lt;br /&gt;class Character:&lt;br /&gt;  def __init__(self):&lt;br /&gt;    #--Position&lt;br /&gt;    self.posX = 0.0&lt;br /&gt;    self.posY = 0.0&lt;br /&gt;    self.posZ = 0.0&lt;br /&gt;    &lt;br /&gt;    #--Movement&lt;br /&gt;    self.rot = 0.0    &lt;br /&gt;    self.speed_left = 0.0&lt;br /&gt;    self.speed_right = 0.0&lt;br /&gt;    self.speed_top = 0.0&lt;br /&gt;    self.speed_down = 0.0&lt;br /&gt;    &lt;br /&gt;    #--General&lt;br /&gt;    self.color = (1.0, 0.0, 0.0)&lt;br /&gt;    self.size = 0.2&lt;br /&gt;  &lt;br /&gt;  def Update(self):&lt;br /&gt;    self.posX -= self.speed_left&lt;br /&gt;    self.posX += self.speed_right&lt;br /&gt;    self.posY += self.speed_top&lt;br /&gt;    self.posY -= self.speed_down&lt;br /&gt;&lt;br /&gt;  def Draw(self):&lt;br /&gt;    glBegin(GL_QUADS)&lt;br /&gt;    glColor3f(self.color[0], self.color[1], self.color[2])&lt;br /&gt;    &lt;br /&gt;    glVertex3f(self.posX - self.size , self.posY - self.size , self.posZ)&lt;br /&gt;    glVertex3f(self.posX - self.size , self.posY + self.size , self.posZ)&lt;br /&gt;    glVertex3f(self.posX + self.size , self.posY + self.size , self.posZ)&lt;br /&gt;    glVertex3f(self.posX + self.size , self.posY - self.size , self.posZ)&lt;br /&gt;    &lt;br /&gt;    glEnd()&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;def UpdateScreen ():  &lt;br /&gt;  glClearColor(0.0, 0.0, 0.0, 0.0)&lt;br /&gt;  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)&lt;br /&gt;&lt;br /&gt;  # Select GL_MODELVIEW matrix&lt;br /&gt;  glMatrixMode(GL_MODELVIEW)  &lt;br /&gt;  glLoadIdentity()&lt;br /&gt;  &lt;br /&gt;  character.Draw();&lt;br /&gt;  # Save current GL_MODELVIEW matrix state&lt;br /&gt;  glPushMatrix()              &lt;br /&gt;       &lt;br /&gt;  # Restore last GL_MODELVIEW matrix state&lt;br /&gt;  glPopMatrix()                             &lt;br /&gt;  &lt;br /&gt;  # Flush everything to screen&lt;br /&gt;  glFlush()                                                    &lt;br /&gt;  &lt;br /&gt;  # Flip the double-buffer&lt;br /&gt;  pygame.display.flip()                    &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def SetUp():&lt;br /&gt;  pygame.init()  &lt;br /&gt;&lt;br /&gt;  # we want a fullscreen, 1280x1024, SDL surface that supports doublebuffered OpenGL&lt;br /&gt;  pygame.display.set_mode((500,500),OPENGL|DOUBLEBUF)&lt;br /&gt;&lt;br /&gt;  # Select GL_PROJECTION matrix&lt;br /&gt;  glMatrixMode(GL_PROJECTION)             &lt;br /&gt;  &lt;br /&gt;  # Reset GL_PROJECTION matrix&lt;br /&gt;  glLoadIdentity()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def Main():&lt;br /&gt;  SetUp()&lt;br /&gt;  &lt;br /&gt;  global character&lt;br /&gt;  character = Character()&lt;br /&gt;      &lt;br /&gt;  while True:&lt;br /&gt;    character.Update()&lt;br /&gt;    UpdateScreen()&lt;br /&gt;    &lt;br /&gt;    for event in pygame.event.get():&lt;br /&gt;      &lt;br /&gt;      if event.type == QUIT:&lt;br /&gt;        return&lt;br /&gt;&lt;br /&gt;      if event.type == KEYDOWN:&lt;br /&gt;        if event.key == K_LEFT:&lt;br /&gt;          character.speed_left += 0.01&lt;br /&gt;        if event.key == K_RIGHT:&lt;br /&gt;          character.speed_right += 0.01&lt;br /&gt;        if event.key == K_DOWN:&lt;br /&gt;          character.speed_down += 0.01&lt;br /&gt;        if event.key == K_UP:&lt;br /&gt;          character.speed_top += 0.01&lt;br /&gt;          &lt;br /&gt;      if event.type == KEYUP:&lt;br /&gt;        if event.key == K_LEFT:&lt;br /&gt;          character.speed_left = 0&lt;br /&gt;        if event.key == K_RIGHT:&lt;br /&gt;          character.speed_right = 0&lt;br /&gt;        if event.key == K_DOWN:&lt;br /&gt;          character.speed_down = 0&lt;br /&gt;        if event.key == K_UP:&lt;br /&gt;          character.speed_top = 0&lt;br /&gt;&lt;br /&gt;Main()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Voy a seguir trabajando en este mismo tema, asi que cualquier comentario es bienvenido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6229915443210977094?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6229915443210977094/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6229915443210977094' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6229915443210977094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6229915443210977094'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/05/hoy-dia-por-fin-me-hice-el-tiempo-para.html' title=''/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-4202419318034206554</id><published>2008-05-13T23:53:00.003-04:00</published><updated>2008-05-14T00:04:22.119-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='pyopengl'/><title type='text'>Pygame y openGL juntos: lo mejor de 2 mundos</title><content type='html'>La idea de combinar Pygame y openGL es conseguir lo mejor de ambos, o sea utilizar openGL como motor grafico, y Pygame para manejar los eventos y el sonido, les voy a mostrar un codigo bien sencillo donde se dibuja un triangulo pero sobre una ventana de pygame. &lt;br /&gt;&lt;br /&gt;La clave esta en usar la siguiente linea:&lt;br /&gt;pygame.display.set_mode((width,height),OPENGL|DOUBLEBUF)&lt;br /&gt;&lt;br /&gt;de esa manera le permitimos a la ventana principal de pygame, mostrar lo que podria mostrar una ventana de OpenGL. &lt;br /&gt;&lt;br /&gt;A continuacion el ejemplo.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#---Codigo de pygame junto con pyopengl---&lt;br /&gt;#Working with pygame instead of GLUT&lt;br /&gt;#Using pygame events&lt;br /&gt;&lt;br /&gt;import pygame&lt;br /&gt;from pygame import *&lt;br /&gt;from OpenGL.GL import *&lt;br /&gt;from OpenGL.GLU import *&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def triangle():&lt;br /&gt; glBegin(GL_TRIANGLES)&lt;br /&gt; glColor3f(1.0,0.0,0.0)&lt;br /&gt; glVertex3f(0.0,0.8,0.0)&lt;br /&gt; glColor3f(0.0,1.0,0.0)&lt;br /&gt; glVertex3f(-0.6,-0.2,0.0)&lt;br /&gt; glColor3f(0.0,0.0,1.0)&lt;br /&gt; glVertex3f(0.6,-0.2,0.0)&lt;br /&gt; glEnd()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def display():&lt;br /&gt; glClearColor(0.0,0.0,0.0,0.0)&lt;br /&gt; glClear(GL_COLOR_BUFFER_BIT)&lt;br /&gt; glMatrixMode(GL_PROJECTION)&lt;br /&gt; glLoadIdentity()&lt;br /&gt; glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0)&lt;br /&gt; triangle()&lt;br /&gt; glMatrixMode(GL_MODELVIEW)&lt;br /&gt; glFlush()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def windowInit(width,height):&lt;br /&gt; pygame.init()&lt;br /&gt; pygame.display.set_mode((width,height),OPENGL|DOUBLEBUF)   &lt;br /&gt; glViewport(0,0,width,height)&lt;br /&gt; glMatrixMode(GL_PROJECTION)&lt;br /&gt; glLoadIdentity()&lt;br /&gt; gluPerspective(45,1.0*width/height,0.1,100.0)&lt;br /&gt; glMatrixMode(GL_MODELVIEW)&lt;br /&gt; glLoadIdentity()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;   windowInit(640,480)&lt;br /&gt;   while True:  &lt;br /&gt;       display()&lt;br /&gt;       pygame.display.flip()&lt;br /&gt;       for event in pygame.event.get():&lt;br /&gt;   if event.type==QUIT:&lt;br /&gt;    return&lt;br /&gt;      &lt;br /&gt;main()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;El unico problema de combinarlos es que el framerate que se obtiene, es menor que el que se obtendria ocupando directamente la ventana de Glut, o ventanas de windows/linux/otros. De todas maneras el framerate obtenido es suficiente para desarrollar un juego comercial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-4202419318034206554?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/4202419318034206554/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=4202419318034206554' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4202419318034206554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4202419318034206554'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/05/pygame-y-opengl-juntos-lo-mejor-de-2.html' title='Pygame y openGL juntos: lo mejor de 2 mundos'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5250674695279225568</id><published>2008-04-20T01:56:00.002-04:00</published><updated>2008-04-20T02:02:37.097-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Como Compilar en python</title><content type='html'>Ya habiamos hablado que Python era un lenguaje interpretado y que por lo tanto no tenia necesidad de ser compilado, pero eso no quiere decir que sea incapaz de hacerlo. Existe una herramienta para compilar tus codigos hechos en python, se llama py2exe. descargalo desde &lt;a href="http://www.py2exe.org/"&gt;http://www.py2exe.org/&lt;/a&gt;. Un ejemplo muy sencillo de como compilar el codigo es:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from distutils.core import setup&lt;br /&gt;import py2exe&lt;br /&gt;&lt;br /&gt;setup(console=['mi_archivo.py'])&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;el codigo anterior lo guardas en un archivo, digamos makeExe.py, y luego lo llamas desde la consola makeExe.py py2exe, y voila se compila el codigo. &lt;br /&gt;&lt;br /&gt;Nota: Si tu codigo depende de librerias como pygame, py2exe las compilara solo, asi que no te preocupes, con el codigo anterior basta para compilar tu codigo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5250674695279225568?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5250674695279225568/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5250674695279225568' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5250674695279225568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5250674695279225568'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/04/como-compilar-en-python.html' title='Como Compilar en python'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5548027697365713404</id><published>2008-03-23T23:00:00.002-03:00</published><updated>2008-03-23T23:12:01.320-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><title type='text'>Dirty Rects</title><content type='html'>Dirty Rects es una tecninca muy usada en la programacion 2d, consiste en solo dibujar lo que este sucio, de esa manera se evita procesar informacion innecesariamente, un ejemplo sencillo de la tecnica seria&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;global dirty&lt;br /&gt;dirty = True&lt;br /&gt;&lt;br /&gt;def draw() :&lt;br /&gt;  #Aqui va el codigo de ploteo y de dibujo&lt;br /&gt;  global dirty&lt;br /&gt;  dirty = False # Como recien fue dibujado ya no esta sucio&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;  while True&lt;br /&gt;     if dirty:&lt;br /&gt;        draw()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Es tan facil como esto, ahora como ejemplo final voy a reescribir el codigo del ploteo isometrico ocupando dirty rects&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#-------Empieza Codigo-----------&lt;br /&gt;#Isometric Plot&lt;br /&gt;import pygame&lt;br /&gt;from pygame import *&lt;br /&gt;&lt;br /&gt;global dirty&lt;br /&gt;dirty = True&lt;br /&gt;&lt;br /&gt;TILESIZE = 64&lt;br /&gt;SCREEN = pygame.display.set_mode((800, 600))&lt;br /&gt;BLUE = (0, 0, 200)&lt;br /&gt;GROUND_IMAGE = pygame.image.load('grass.png')&lt;br /&gt;&lt;br /&gt;def plot():&lt;br /&gt; SCREEN.fill((0, 200 , 0))&lt;br /&gt;&lt;br /&gt; """Aqui en el range es donde vamos a poner cuantos tiles queremos dibujar&lt;br /&gt; En este caso son 15 tiles en la direccion y, y 10 tiles en la direccion x&lt;br /&gt; y por lo tanto vamos a dibujar 150 tiles"""&lt;br /&gt;&lt;br /&gt; for y in range(0, 15):&lt;br /&gt;    for x in range(0, 10):&lt;br /&gt;       """tenemos 2 tipos de posiciones en este ploteo,&lt;br /&gt;       posiciones de pixeles y posiciones de tiles,&lt;br /&gt;       la posiciones de pixeles se incrementan de 1 en 1,&lt;br /&gt;       las de tile depende del ploteo que queramos,&lt;br /&gt;       en este caso nuestra imagen mide 64*32 pixeles,&lt;br /&gt;       por lo tanto cada posicion horizontal esta a 64 pixeles&lt;br /&gt;       de la siguiente, pero en el caso vertical,&lt;br /&gt;       las imagenes estan distanciadas por 32 pixeles&lt;br /&gt;       y dijimos que habia que moverse desde&lt;br /&gt;       la mitad de la imagen para abajo&lt;br /&gt;       o sea: imagen/4 para abajo&lt;br /&gt;       """&lt;br /&gt;     &lt;br /&gt;       tile_x = x * TILESIZE&lt;br /&gt;       tile_y = y * TILESIZE/4&lt;br /&gt;  &lt;br /&gt;       if y % 2 == 0: # si estamos en una fila par(partiendo desde 0 seria la fila 0,2,4,6,8)&lt;br /&gt;          SCREEN.blit(GROUND_IMAGE, (tile_x, tile_y))&lt;br /&gt;  &lt;br /&gt;       else:&lt;br /&gt;          tile_x += 32 # corregimos la posicion para las filas impares&lt;br /&gt;          SCREEN.blit(GROUND_IMAGE, (tile_x, tile_y))&lt;br /&gt;&lt;br /&gt; global dirty&lt;br /&gt; dirty = False&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt; clock  = pygame.time.Clock()&lt;br /&gt; fps = 40&lt;br /&gt;&lt;br /&gt; ready = False&lt;br /&gt; while not(ready):&lt;br /&gt;    clock.tick(fps)&lt;br /&gt;    print clock.get_fps()&lt;br /&gt;    if dirty:&lt;br /&gt;      plot()&lt;br /&gt;     &lt;br /&gt;    pygame.display.update()&lt;br /&gt;  &lt;br /&gt;    events = pygame.event.get()    &lt;br /&gt;    for event in events:&lt;br /&gt;       if event.type == QUIT:&lt;br /&gt;          return&lt;br /&gt;       if event.type == KEYDOWN:&lt;br /&gt;          ready = True&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;#-------Termina Codigo-----------&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5548027697365713404?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5548027697365713404/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5548027697365713404' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5548027697365713404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5548027697365713404'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/03/dirty-rects.html' title='Dirty Rects'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5963724507047464712</id><published>2008-03-21T11:25:00.002-03:00</published><updated>2008-03-21T11:56:54.574-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><title type='text'>Ploteo Isometrico</title><content type='html'>Hoy les traigo un codigo sencillo para ploteos isometricos, pero primero deben poner el codigo en la misma carpeta que la imagen que les dejo a continacion&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9UzKK6NUgk0/R-PFptFxIgI/AAAAAAAAABY/KeIetReWtPg/s1600-h/grass.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_9UzKK6NUgk0/R-PFptFxIgI/AAAAAAAAABY/KeIetReWtPg/s400/grass.png" alt="" id="BLOGGER_PHOTO_ID_5180201316675297794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta imagen tiene una carecteristica muy especial, y es que es el doble de ancha que de alta, en este caso tiene 64 pixeles de ancho y 32 de alto, aunque el canvas de la imagen es de 32*32, el resto que no es visible es transparente, tambien pudimos haber ocupado un fondo blanco y usar colorkey pero no este caso preferi ocupar el canal alpha que traen los png's&lt;br /&gt;&lt;br /&gt;Volviendo al tema interesante, el ploteo isometrico  consiste en poner esta imagen u otras de las mismas caracteristicas a lo largo de la pantalla, para lograr esto debes poner sucesivamente las imagenes a lo largo del eje x, pero cuando lleguemos al final del eje y nos toque empezar a rellenar la segunda fila,  la imagen la pones solo la mitad de un imagen mas abajo que la anterior, y  una imagen mas a la derecha que la anterior y solo la mitad de la imagen mas abajo, despues cuando terminemos esa fila empezamos llenando el eje x desde el principio y el eje y de nuevo la mitad de la imagen en pixeles mas abajo, esta estructura se repite cuantas veces quieras.&lt;br /&gt;&lt;br /&gt;Aqui les dejo un codigo para que puedan ver como funciona&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#-------Empieza Codigo-----------&lt;br /&gt;#Isometric Plot&lt;br /&gt;import pygame&lt;br /&gt;from pygame import *&lt;br /&gt;&lt;br /&gt;TILESIZE = 64&lt;br /&gt;SCREEN = pygame.display.set_mode((800, 600))&lt;br /&gt;BLUE = (0, 0, 200)&lt;br /&gt;GROUND_IMAGE = pygame.image.load('grass.png')&lt;br /&gt;&lt;br /&gt;def plot():&lt;br /&gt; SCREEN.fill((0, 200 , 0))&lt;br /&gt;&lt;br /&gt; """Aqui en el range es donde vamos a poner cuantos tiles queremos dibujar&lt;br /&gt; En este caso son 15 tiles en la direccion y, y 10 tiles en la direccion x&lt;br /&gt; y por lo tanto vamos a dibujar 150 tiles"""&lt;br /&gt;&lt;br /&gt; for y in range(0, 15):&lt;br /&gt;    for x in range(0, 10):&lt;br /&gt;       """tenemos 2 tipos de posiciones en este ploteo,&lt;br /&gt;       posiciones de pixeles y posiciones de tiles,&lt;br /&gt;       la posiciones de pixeles se incrementan de 1 en 1,&lt;br /&gt;       las de tile depende del ploteo que queramos,&lt;br /&gt;       en este caso nuestra imagen mide 64*32 pixeles,&lt;br /&gt;       por lo tanto cada posicion horizontal esta a 64 pixeles&lt;br /&gt;       de la siguiente, pero en el caso vertical,&lt;br /&gt;       las imagenes estan distanciadas por 32 pixeles&lt;br /&gt;       y dijimos que habia que moverse desde&lt;br /&gt;       la mitad de la imagen para abajo&lt;br /&gt;       o sea: imagen/4 para abajo&lt;br /&gt;       """&lt;br /&gt;     &lt;br /&gt;       tile_x = x * TILESIZE&lt;br /&gt;       tile_y = y * TILESIZE/4&lt;br /&gt;  &lt;br /&gt;       if y % 2 == 0: # si estamos en una fila par(partiendo desde 0 seria la fila 0,2,4,6,8)&lt;br /&gt;          SCREEN.blit(GROUND_IMAGE, (tile_x, tile_y))&lt;br /&gt;  &lt;br /&gt;       else:&lt;br /&gt;          tile_x += 32 # corregimos la posicion para las filas impares&lt;br /&gt;          SCREEN.blit(GROUND_IMAGE, (tile_x, tile_y))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt; clock  = pygame.time.Clock()&lt;br /&gt; fps = 40&lt;br /&gt;&lt;br /&gt; ready = False&lt;br /&gt; while not(ready):&lt;br /&gt;    clock.tick(fps)&lt;br /&gt;    print clock.get_fps()&lt;br /&gt;  &lt;br /&gt;    plot()&lt;br /&gt;     &lt;br /&gt;    pygame.display.update()&lt;br /&gt;  &lt;br /&gt;    events = pygame.event.get()    &lt;br /&gt;    for event in events:&lt;br /&gt;       if event.type == QUIT:&lt;br /&gt;          return&lt;br /&gt;       if event.type == KEYDOWN:&lt;br /&gt;          ready = True&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;#-------Termina Codigo-----------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hay otros tipos de ploteo y todavia nos queda mucho por hablar acerca de este.&lt;br /&gt;Nos vemos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5963724507047464712?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5963724507047464712/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5963724507047464712' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5963724507047464712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5963724507047464712'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/03/ploteo-isometrico.html' title='Ploteo Isometrico'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9UzKK6NUgk0/R-PFptFxIgI/AAAAAAAAABY/KeIetReWtPg/s72-c/grass.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-8082957691790736945</id><published>2008-03-18T23:39:00.004-03:00</published><updated>2008-03-19T00:15:43.766-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multijugador Online'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Juegos para navegadores</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Existen muchos juegos en linea que se juegan simplemente con el navegador, como por ejemplo &lt;a href="http://www.ogame.com.es/"&gt;Ogame&lt;/a&gt;, el cual es un juego donde debes colonizar el espacio, tambien hay de otros temas como &lt;a href="http://www.travian.com/"&gt;Travian&lt;/a&gt; donde puedes jugar con romanos, galos o germanos y debes fundar pueblos y defenderlos de tus enemigos y tambien hay juegos de futbol como es el caso de &lt;a href="http://www.hattrick.org/Common/default.asp"&gt;Hattrick.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para poder jugar estos juegos solo necesitas un navegador como por ejemplo IExplorer o Firefox.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Estos tipos de juegos no estan hechos en html plano, puesto que el html es un lenguaje estatico y por lo mismo no sirve para hacer juegos, puesto que no se puede actualizar la pagina mientras el usuario no presione actualizar, y tenga que cargar la pagina completamente desde cero.&lt;br /&gt;Existen algunas herramientas para poder generar codigo ligeramente dinamico como por ejemplo javascript y DOM, pero para poder crear un juego donde se deba interaccionar con otras personas que estan jugando se necesita un fuente de datos (variables como por ejemplo niveles o cantidades de recursos) fija y que no dependa del cliente (la persona que esta usando el navegador). Para tener una fuente de datos fijas necesitamos una base de datos, esta puede ser un simple archivo al que el cliente envie informacion, el servidor modifique el archivo con la informacion nueva y envie el archivo a cada uno de los clientes conectados, o bien puede ser una herramienta mas sofisticada como una base de datos con un lenguaje propio de consultas como por ejemplo &lt;a href="http://es.wikipedia.org/wiki/MySQL"&gt;MySQL&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Oracle"&gt;Oracle,&lt;/a&gt; estas ultimas tienen la ventajas de poder recuperar la informacion rapidamente y con mucho menos trabajo que programarlo manualmente&lt;br /&gt;&lt;br /&gt;Como solucion a la enorme cantidad de problemas mencionados anteriormente nacen los frameworks, estos son un conjunto de herramientas como por ejemplo una libreria para el manejo de las bases de datos, un router el cual permite redirrecionar la pagina web (y asi poder actualizar la pagina), y un template el cual permite poner codigo dinamico en nuestra pagina web&lt;br /&gt;&lt;br /&gt;Muchos de los juegos en linea actualmente no estan hechos en frameworks sino que usan php, el cual es un lenguaje dinamico pero no muy bueno, de por si es un poco criptico y con criptico quiero decir que alguien que no sabe php no puede leer el codigo, a diferencia que casi cualquier persona que sepa programar puede leer un codigo diseñado en python, bueno volviendo al analisis de los juegos, ogame el cual a mi gusto es el mejor de los juegos de este tipo, esta hecho en php, y si mal no recuerdo travian tambien.&lt;br /&gt;&lt;br /&gt;Si te interesa programar este tipo de juegos existe una alternativa bastante buena al php y son los frameworks, existen principalmente tres frameworks para python y son &lt;a href="http://www.djangoproject.com/"&gt;django&lt;/a&gt;,  &lt;a href="http://pylonshq.com/"&gt;pylons&lt;/a&gt; y &lt;a href="http://turbogears.org/"&gt;turbogears&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Yo hasta el momento solo he trabajdo con los dos primeros, con django y con pylons, y comparandolos diria que django es mas facil de aprender, pero es mejor pylons, si quieren diseñar un juego sencillo o una pagina estilo fotolog o myspace o youtube con django podrian hacerlo perfectamente, aunque yo personalmente me inclino por pylons que permite mucha mayor configuracion.&lt;br /&gt;&lt;br /&gt;Lamentablemente toda la buena documentacion de estos frameworks esta en ingles.&lt;br /&gt;&lt;br /&gt;Bueno si todavia estan interesados, les recomendaria &lt;a href="http://www.djangobook.com/"&gt;The Django Book&lt;/a&gt; como punto de partida.&lt;br /&gt;&lt;br /&gt;Buena Suerte.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-8082957691790736945?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/8082957691790736945/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=8082957691790736945' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/8082957691790736945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/8082957691790736945'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/03/juegos-de-n.html' title='Juegos para navegadores'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-7398251295758259815</id><published>2008-03-03T23:20:00.002-03:00</published><updated>2008-03-03T23:30:42.593-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Cargar imagenes con pygame</title><content type='html'>&lt;div style="text-align: justify;"&gt;Si en lugar de dibujar utilizando los comando de pygame quieres cargar imagenes tuyas o de tus personajes puedes usar la funcion image.load que viene en la libreria de pygame, esta funcion devuelve una superficie con la imagen. Se usa de la siguiente manera:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;superficie1 = image.load("nombre_imagen")&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Pero tenemos que darnos el trabajo de verificar si la imagen existe, ya que podria no estar en el programa y entonces el juego fallaria al intentar correrlo, para eso validamos si se puede abrir el archivo de la siguiente manera&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;#---cargando imagenes&lt;br /&gt;import pygame&lt;br /&gt;from sys import exit&lt;br /&gt;&lt;br /&gt;def loadImage(filename):&lt;br /&gt;try:&lt;br /&gt;    image = pygame.image.load(filename)&lt;br /&gt;except:&lt;br /&gt;    print "error al cargar la imagen desde ", filename&lt;br /&gt;    sys.exit()&lt;br /&gt;return image&lt;br /&gt;#-----&lt;br /&gt;&lt;/pre&gt;De esta manera el programa avisara que hubo un fallo a la hora de intentar abrir el archivo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-7398251295758259815?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/7398251295758259815/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=7398251295758259815' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7398251295758259815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7398251295758259815'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/03/cargar-imagenes-con-pygame.html' title='Cargar imagenes con pygame'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-7065858746616938046</id><published>2008-03-03T23:15:00.003-03:00</published><updated>2008-03-03T23:30:42.594-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Transparencia en pygame</title><content type='html'>En pygame hay 2 tipos de transparencias, la transparencia alpha y la de colorkey:&lt;br /&gt;&lt;br /&gt;Transparencia alfa (alpha) :&lt;br /&gt;    Se aplica a toda la imagen, es un valor que va desde 0 a 255 donde 0 es opaco y 255 es transparente, se puede hacer una imagen borrosa dandole valores intermedios&lt;br /&gt;&lt;br /&gt;Tranparencia colorkey :&lt;br /&gt;    Se aplica solo a un color de la imagen y hace ese color invisible.&lt;br /&gt;&lt;br /&gt;Advertencia: la transparencia alpha suele ser bastante lenta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-7065858746616938046?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/7065858746616938046/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=7065858746616938046' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7065858746616938046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7065858746616938046'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/03/transparencia-en-pygame.html' title='Transparencia en pygame'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5928938735509283674</id><published>2008-02-29T02:38:00.002-03:00</published><updated>2008-02-29T02:44:15.863-03:00</updated><title type='text'>Deteccion de colisiones 3d</title><content type='html'>&lt;div style="text-align: justify;"&gt;A mi juicio lo mas dificil de hacer un juego 3d es la deteccion de colisiones, ahora en lugar de explicar un monton de calculo vectorial les voy a dar la solucion facil al problema y es utilizar la libreria &lt;a href="http://www.ode.org/%20"&gt;ODE (Open Dynamics Engines)&lt;/a&gt; existe un binding de esa libreria para python llamado pyODE, es bastante sencillo de usar pero combinarlo con openGL y a la vez con pygame puede ser levemente complicado, otro dia voy a explicar bien los detalles de como se hace, por lo demas la pagina web de &lt;a href="http://pyode.sourceforge.net/"&gt;pyODE&lt;/a&gt; y la de &lt;a href="http://www.ode.org/"&gt;ODE&lt;/a&gt; tienen las documentaciones oficiales respectivas y unos tutoriales para empezar desde cero.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Asi que no queda otra que empezar a leer.&lt;br /&gt;Suerte con sus juegos 3D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5928938735509283674?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5928938735509283674/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5928938735509283674' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5928938735509283674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5928938735509283674'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/deteccion-de-colisiones-3d.html' title='Deteccion de colisiones 3d'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6998600475192483430</id><published>2008-02-28T11:06:00.007-03:00</published><updated>2008-02-29T02:27:22.734-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Variables locales y variables globales</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ya vimos anteriormente que las variables se pueden clasificar segun su tipo, ejemplo entero (integer), decimal (float), cadena de caracteres (string) pero los variables tambien se pueden clasificar segun su ambito, o sea desde donde son visibles. Una variable definida dentro de una funcion suele ser visible solo desde esa funcion.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Supongamos la siguiente situacion:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#---Caso 1&lt;br /&gt;a = 5&lt;br /&gt;print a&lt;br /&gt;def funcion():&lt;br /&gt;  print a&lt;br /&gt;&lt;br /&gt;function()&lt;br /&gt;#fin codigo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Este codigo lo que hace es imprimer 5 dos veces en la pantalla, ahora observemos otro caso&lt;br /&gt;En este primer caso como la variable a esta definida fuera de la funcion es visible dentro de la funcion, pero en el caso contrario no sucede lo mismo, para eso veamos el siguiente ejemplo&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;#---Caso 2&lt;br /&gt;def otra_funcion():&lt;br /&gt;  b = 5&lt;br /&gt;&lt;br /&gt;otra_funcion()&lt;br /&gt;print b&lt;br /&gt;#fin codigo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En este caso obtenenmos un error puesto que la variable b fue definida dentro de una funcion y la estamos llamando desde fuera, una solucion a este problemas es declarar la variable como variable global, en ese caso la variable es visible en cualquier parte del codigo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Solucion al caso 2:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#---Solucion al caso 2&lt;br /&gt;def solucion():&lt;br /&gt;  global b&lt;br /&gt;  b = 6&lt;br /&gt;&lt;br /&gt;solucion()&lt;br /&gt;print b&lt;br /&gt;#fin codigo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A modo de advertencia dejo claro que las variables globales quedan tapadas por las locales, pero este comentario probablemente no sea muy clara asi que pongamoslo un ejemplo de esto&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#---codigo&lt;br /&gt;a = 5&lt;br /&gt;def funcion():&lt;br /&gt;  a = 7&lt;br /&gt;&lt;br /&gt;funcion()&lt;br /&gt;print a&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La pregunta que deberias estar haciendote es: ¿que imprime?.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;La respuesta es 5, y la razon es porque cuando definimos la variable a en la funcion tapamos la definida anteriormente, hay que tener cuidado con esto, este tipo de errores son muy dificiles de rastrear.&lt;br /&gt;&lt;br /&gt;La explicacion de porque esto sucede es dificil explicarla sin dibujitos pera la idea es la siguiente, el programa principal imaginalo como un bloque que en la parte superior tiene escrita informacion, ahora cuando en el programa llama a una funcion&lt;br /&gt;se pone otro bloque pero de menor tamaño, que tapa la mayor parte de lo que estaba en el bloque anterior excepto aquellas cosas que fueron escritas en la periferia, de esta  manera se va construyendo una especie de piramide que realmente es mas parecida a una columna que recibe como nombre tecnico pila (stock). Espero que entienda que esto es una metafora y no es del todo correcto.&lt;br /&gt;&lt;br /&gt;Para completar me gustaria comentarles que en python se puede conocer cuales son las variables locales que actualmente estan en uso, para acceder a ellas se usa la funcion locals(), esta devuelve un diccionario con todas las variables locales, de la misma forma es posible conocer que variables globales estan en uso a traves de la funcion globals().&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6998600475192483430?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6998600475192483430/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6998600475192483430' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6998600475192483430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6998600475192483430'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/variables-locales-y-variables-globales.html' title='Variables locales y variables globales'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-7572033189632126966</id><published>2008-02-24T01:53:00.002-03:00</published><updated>2008-02-24T03:04:00.639-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><title type='text'>Recursividad</title><content type='html'>Las funciones recursivas son funciones que se llaman a si misma:&lt;br /&gt;&lt;br /&gt;ej:&lt;br /&gt;&lt;pre&gt;def funcion_hola():&lt;br /&gt;funcion_hola()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bueno, y esto para que sirve?.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Existen un monton de algoritmos dentro del mundo de los video juegos que estan escritos en forma recursiva, como son los del tipo &lt;a href="http://es.wikipedia.org/wiki/Backtracking"&gt;backtracking&lt;/a&gt;, los cuales entre sus aplicaciones sirven para crear laberintos y tambien para encontrar sus soluciones. Tambien hay algoritmos del tipo &lt;a href="http://es.wikipedia.org/wiki/Algoritmo_divide_y_vencer%C3%A1s"&gt;divide and conquer&lt;/a&gt; como por ejemplo el &lt;a href="http://es.wikipedia.org/wiki/Quicksort"&gt;quicksort.&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;El limite de la recursividad:&lt;br /&gt;&lt;div style="text-align: justify;"&gt;  La principal restriccion de la recursividad es que no puede ser infinita, o sea el primer ejemplo que les di viola esta restriccion y por lo tanto esta malo, de hecho si intentamos hacer correr un algoritmo asi obtendremos un error del tipo "se ha superado la profundidad maxima de la recursion". Ahora el limite exacto de la recursividad depende de los interpretes o de los compiladores pero es bastante profundo asi que mientras el limite de la funcion este claro, veamos ejemplos&lt;br /&gt;&lt;br /&gt;Factorial:&lt;br /&gt;-El factorial de un numero N, natural (o sea un entero &gt; 0) se anota como N!&lt;br /&gt;y esta definido asi:&lt;br /&gt;N! = (N - 1)!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;-El factorial de 0, esta definido como 1.&lt;br /&gt;&lt;br /&gt;En base a estas 2 definiciones podemos programar una funcion recursiva que calcule el factorial de un numero&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#---codigo&lt;br /&gt;def recursive_factorial( n ):&lt;br /&gt;  if n == 0:&lt;br /&gt;    return 1&lt;br /&gt;  else:    &lt;br /&gt;    return n * recursive_factorial( n - 1 )&lt;br /&gt;#---fin codigo&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-7572033189632126966?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/7572033189632126966/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=7572033189632126966' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7572033189632126966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7572033189632126966'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/recursividad.html' title='Recursividad'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-4154939761913959248</id><published>2008-02-21T15:45:00.003-03:00</published><updated>2008-02-21T15:53:01.403-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyopengl'/><title type='text'>Crear un triangulo con pyopengl</title><content type='html'>&lt;div style="text-align: justify;"&gt;para dibujar un triangulo usando opengl en python basta con agregar glBegin(GL_TRIANGLES) luego 3 vertices que se dan a partir de la funcion glVertex3f(x,y,z) y por ultimo glEnd(), veamos un codigo completo.&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;#Codigo ---------&lt;br /&gt;from OpenGL.GL import *&lt;br /&gt;from OpenGL.GLUT import *&lt;br /&gt;&lt;br /&gt;def draw_triangle():&lt;br /&gt; glBegin(GL_TRIANGLES)&lt;br /&gt; glVertex3f(0.0, 0.6, 0.0)&lt;br /&gt; glVertex3f(0.6, -0.6, 0.0)&lt;br /&gt; glVertex3f(-0.6, -0.6, 0.0)&lt;br /&gt; glEnd()&lt;br /&gt;&lt;br /&gt;def display():&lt;br /&gt; glClear(GL_COLOR_BUFFER_BIT) # Pinta la pantalla de color negro&lt;br /&gt; draw_triangle()&lt;br /&gt; glFlush()&lt;br /&gt;&lt;br /&gt;glutInitWindowSize(800, 600)&lt;br /&gt;glutCreateWindow("HELLO WORLD")&lt;br /&gt;glutDisplayFunc(display)&lt;br /&gt;glutMainLoop()&lt;br /&gt;#------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;la unica diferencia de este codigo con el anterior es que este mientras esta dibujando (funcion display), llama a la funcion draw_triangle, este define una primitiva en base a tres vertices, los vertices tienen coordenadas x,y,z. donde cada uno de los ejes tiene un valor minimo de -1, y un valor maximo de 1, el punto 0 esta en el centro de la pantalla.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-4154939761913959248?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/4154939761913959248/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=4154939761913959248' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4154939761913959248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4154939761913959248'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/crear-un-triangulo-con-pyopengl.html' title='Crear un triangulo con pyopengl'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-4598032092743596300</id><published>2008-02-21T00:47:00.002-03:00</published><updated>2008-02-21T00:53:31.408-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyopengl'/><title type='text'>Crear una ventana con pyopengl</title><content type='html'>&lt;pre&gt;&lt;br /&gt;from OpenGL.GL import *&lt;br /&gt;from OpenGL.GLUT import *&lt;br /&gt;&lt;br /&gt;def display():&lt;br /&gt; glClear(GL_COLOR_BUFFER_BIT) # Pinta la pantalla de color negro&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;glutInitWindowSize(800, 600)&lt;br /&gt;glutCreateWindow("HELLO WORLD")&lt;br /&gt;glutDisplayFunc(display)&lt;br /&gt;glutMainLoop()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;las primeras 2 lineas importan las funciones de la libreria.&lt;br /&gt;&lt;br /&gt;glutInitWindowSize(800, 600): crea una ventana de ancho 800 pixeles y alto 600 pixeles&lt;br /&gt;&lt;br /&gt;glutCreateWindow("HELLO WORLD"): crea la ventana con titulo HELLO WORLD&lt;br /&gt;&lt;br /&gt;glutDisplayFunc(display): llama a la funcion display mientras corre el bucle principal de glut&lt;br /&gt;&lt;br /&gt;glutMainLoop(): llama a correr el bucle principal de openGL.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para correr el codigo en windows necesitas el dll de glut, el cual se llama glut32.dll&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-4598032092743596300?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/4598032092743596300/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=4598032092743596300' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4598032092743596300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4598032092743596300'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/crear-una-ventana-con-pyopengl.html' title='Crear una ventana con pyopengl'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5955123084072537337</id><published>2008-02-19T15:06:00.003-03:00</published><updated>2008-02-19T15:29:53.051-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Usando el mouse en pygame</title><content type='html'>Buenas tardes, hoy dia voy a explicar como utilizar el mouse en pygame, en especial como utilizarlo cuando se trata de juegos estrategias.&lt;br /&gt;&lt;br /&gt;Primero: Para poder hacerlo visible o invisible el cursor del mouse:&lt;br /&gt;pygame.mouse.set_visible(bool)&lt;br /&gt;&lt;br /&gt;bool puede ser True o False segun se desee hacer visible o invisible el cursor&lt;br /&gt;&lt;br /&gt;Segundo: para poder saber en que posicion de la pantalla esta el cursor utilizamos:&lt;br /&gt;pygame.mouse.get_pos()&lt;br /&gt;&lt;br /&gt;esta funcion devuelve un par de datos con las coordenadas x,y del cursor, por lo tanto la deberiamos llamar asi:&lt;br /&gt;&lt;br /&gt;mouse_pos = pygame.mouse.get_pos()&lt;br /&gt;o tambien:&lt;br /&gt;&lt;br /&gt;mouse_pos_x, mouse_pos_y = pygame.mouse.get_pos()&lt;br /&gt;&lt;br /&gt;Estos nombres son arbitrarios, los puedes cambiar, lo que debes saber es que: pygame.mouse.get_pos() te devuelve una tupla con las posiciones del mouse.&lt;br /&gt;&lt;br /&gt;Tercero: Para saber si se esta presionando algun boton del mouse:&lt;br /&gt;pygame.mouse.get_pressed()&lt;br /&gt;devuelve un tupla de tres valores, que son los tres botones del mouse, los valores se encuentran en el mismo orden que los botones del mouse, o sea el valor de mas a la izquierda es el boton izquierdo del mouse y asi sucesivamente, si el boton se encuentra presionado, el valor es 1, en caso contrario es 0.&lt;br /&gt;&lt;br /&gt;Resumiendo con codigo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;botones_mouse = pygame.mouse.get_pressed()&lt;br /&gt;if botones_mouse[0] == 1: # o sea&lt;br /&gt;  print "hola"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cuarto: tambien queremos poder saber si con el mouse estamos o no haciendo click sobre algo, para esto hay varias formas, una de ellas es aprovechar el rect de lo que estamos clickeando, eso seria mas o menos asi:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mouse_x, mouse_y = pygame.mouse.get_pos()&lt;br /&gt;for objeto in objetos_del_juego:&lt;br /&gt;  if objeto.collidepoint(mouse_x, mouse_y):&lt;br /&gt;    print "algo"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;una segunda opcion es construir un rect con la posicion del mouse, dandole un ancho y alto&lt;br /&gt;y utilizando ese rect para detectar colisiones como explique en un post anterior&lt;br /&gt;&lt;br /&gt;Para los que se entusiasmaron, buena suerte programando su primer RTS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5955123084072537337?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5955123084072537337/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5955123084072537337' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5955123084072537337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5955123084072537337'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/usando-el-mouse-en-pygame.html' title='Usando el mouse en pygame'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-3130883327890329138</id><published>2008-02-17T14:44:00.002-03:00</published><updated>2008-02-18T14:38:50.692-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multijugador Online'/><category scheme='http://www.blogger.com/atom/ns#' term='Mis Juegos'/><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Pong Online 0.1</title><content type='html'>Acabo de subir la primera version del pong online que estoy haciendo, hasta el momento tiene un par de fallas en la deteccion de colisiones pero ya arreglare eso.&lt;br /&gt;&lt;br /&gt;&lt;a href="es.geocities.com/war_chocobo/pong_online_0.1.zip"&gt;es.geocities.com/war_chocobo/pong_online_0.1.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hay 2 archivos, un servidor y un cliente, el servidor no muestra informacion grafica solo hace calculos como por ejemplo la deteccion de colisiones, por el otro lado los clientes hacen la menor cantidad de calculos posibles solo muestran la informacion grafica.&lt;br /&gt;&lt;br /&gt;En este juego se nesecita que esten conectados los 2 jugadores para poder jugar, a modo de prueba uno puede hacer correr los 2 clientes en el mismo computador.&lt;br /&gt;&lt;br /&gt;El servidor es facilmente ampliable a mas a jugadores lo que serviria para hacer un mmorpg que debe ser el objetivo de muchos de los programadores de video juegos.&lt;br /&gt;&lt;br /&gt;Les dejo el codigo a modo de tutoriales, sugerencias respecto al codigo son bienvenidas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-3130883327890329138?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/3130883327890329138/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=3130883327890329138' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3130883327890329138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3130883327890329138'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/pong-online-01.html' title='Pong Online 0.1'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-3720865802058075799</id><published>2008-02-15T17:02:00.002-03:00</published><updated>2008-02-15T17:12:29.007-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Tipos de datos</title><content type='html'>En python los tipos de datos no son muchos, para vale la pena conocerlos&lt;br /&gt;&lt;br /&gt;int:&lt;br /&gt;abreviación de integer, son números enteros o sea números sin decimales, como por ejemplo: -50&lt;br /&gt;&lt;br /&gt;float:&lt;br /&gt;abreviación de floating point, con coma flotante o sea números con decimales, como por ejemplo: 2.5&lt;br /&gt;&lt;br /&gt;character:&lt;br /&gt;son caracteres, como por ejemplo 'h'&lt;br /&gt;&lt;br /&gt;advertencia:&lt;br /&gt;'1' es un caracter&lt;br /&gt;1 es un integer&lt;br /&gt;cuidado al hacer comparaciones puesto que&lt;br /&gt;1 es distinto de '1'&lt;br /&gt;&lt;br /&gt;se puede convertir un tipo de dato a otro, por ejemplo&lt;br /&gt;str(1) convierte el integer 1 al caracter '1'&lt;br /&gt;int('1')  convierte el caracter '1' al numero 1&lt;br /&gt;&lt;br /&gt;Advertencia:&lt;br /&gt;1 + 1 = 2&lt;br /&gt;'1' + '1' = '11'&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Tenga cuidado en python los operadores están sobrecargados, eso quiere decir que dependen del tipo de dato, no es lo mismo 1+1, que '1' + '1', en el primer caso el operador mas hace de suma, en el segundo de concatenación.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-3720865802058075799?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/3720865802058075799/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=3720865802058075799' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3720865802058075799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3720865802058075799'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/tipos-de-datos.html' title='Tipos de datos'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-4148690590484533515</id><published>2008-02-14T15:08:00.002-03:00</published><updated>2008-02-14T15:22:42.489-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multijugador Online'/><title type='text'>Hacer juegos multijugador online</title><content type='html'>&lt;div style="text-align: justify;"&gt;He estado programando un pong multijugador online, a penas lo tenga listo lo voy a poner en la pagina, tambien estoy pensando en poner tutoriales de como programar juegos en linea utilizando la libreria Twisted para python, ya que es bastante dificil encontrar documentacion en linea respecto al tema.&lt;br /&gt;&lt;br /&gt;Aqui les dejo el link para que descarguen la libreria&lt;br /&gt;&lt;/div&gt;&lt;a href="http://twistedmatrix.com/trac/"&gt;http://twistedmatrix.com/trac/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-4148690590484533515?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/4148690590484533515/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=4148690590484533515' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4148690590484533515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/4148690590484533515'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/hacer-juegos-multijugador-online.html' title='Hacer juegos multijugador online'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6774871406635502926</id><published>2008-02-12T10:36:00.000-03:00</published><updated>2008-02-12T10:46:01.128-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enlaces'/><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Tutorial de POO</title><content type='html'>Para los que les gusta profundizar, encontre un buen tutorial sobre programacion orientada a objetos, esta en español, es bien claro y preciso, la direccion es:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.rvburke.com/2006/11/22/programacion-orientada-a-objetos-en-python/"&gt;http://blog.rvburke.com/2006/11/22/programacion-orientada-a-objetos-en-python/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6774871406635502926?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6774871406635502926/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6774871406635502926' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6774871406635502926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6774871406635502926'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/tutorial-de-poo.html' title='Tutorial de POO'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-3316883293867031430</id><published>2008-02-12T00:50:00.000-03:00</published><updated>2008-02-12T10:35:01.750-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Programacion Orientada a Objetos II : Herencia</title><content type='html'>&lt;div style="text-align: justify;"&gt;La herencia es uno de los grandes beneficios de trabajar con objetos, consiste en crear un nuevo objeto al que llamaremos hijo, el cual adquiere automicamente todos los atributos y metodos que contenga su padre. Veamos  un ejemplo&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#Codigo----&lt;br /&gt;class Padre:&lt;br /&gt;  def __init__(self):&lt;br /&gt;    self.valor1 = 5&lt;br /&gt;    self.valor2 = 9&lt;br /&gt;&lt;br /&gt;class Hijo(padre):&lt;br /&gt;  def __init__(self):&lt;br /&gt;    Padre.__init__(self)&lt;br /&gt;  def  mostrar(self):&lt;br /&gt;    print "valor1: ", self.valor1&lt;br /&gt;    print "valor2: ", self.valor2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;luego instanciamos el objeto hijo, no es necesario instanciar el padre ya que el hijo contiene todos los atributos y metodos del padre&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hijo = Hijo()&lt;br /&gt;hijo.mostrar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;mostraria en la pantalla:&lt;br /&gt;valor1: 5&lt;br /&gt;valor2: 9&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;en C++ habria mucho mas que hablar de herencia, pues ahi los datos se pueden proteger del exterior dandoles el caracter de privado, y existen distintos niveles de proteccion, pero en python todos los datos siempre son de caracter publico, aun asi el programa siempre debe ser escrito considerando siempre en lo posible el principio de encapsulacion, el cual consiste  en que cada objeto es cerrado en si, o sea no cambia los valores de los otros objetos y estos valores solo se modifican mandandose mensajes a traves del codigo principal.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-3316883293867031430?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/3316883293867031430/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=3316883293867031430' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3316883293867031430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3316883293867031430'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/programacion-orientada-objetos-ii.html' title='Programacion Orientada a Objetos II : Herencia'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-7296230783235092537</id><published>2008-02-10T19:31:00.004-03:00</published><updated>2008-02-21T15:54:32.304-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Programacion Orientada a Objetos</title><content type='html'>&lt;div style="text-align: justify;"&gt;Lo programacion orientada a objetos de ahora en adelante POO por ser esa su sigla, nos brinda un mundo de oportunidades, entre las mas entendibles estan la capacidad de reutilizar codigo, (similar a las funciones en ese aspecto) y la capacidad que tiene para ordenarlo, imaginate que tienes un codigo de unas 5000 lineas, encontrar algo ahi puede ser complicado.&lt;br /&gt;&lt;br /&gt;En los terminos mas sencillos posibles un objeto es un grupo de datos y funciones. En terminos un poco mas tecnicos un objeto es un enfoque abstracto de un problema. un ejemplo practico seria el objeto personaje&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#Codigo----&lt;br /&gt;class Personaje:&lt;br /&gt; def __init__(self):&lt;br /&gt;  self.posX = 400&lt;br /&gt;  self.posY = 300&lt;br /&gt;  self.color = (255, 255, 255)&lt;br /&gt;  self.radio = 50&lt;br /&gt; &lt;br /&gt; def draw(self):&lt;br /&gt;  pygame.draw.circle(SCREEN, self.color,\&lt;br /&gt;  (self.posX, self.posY), self.radio)&lt;br /&gt;  pygame.display.update()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La palabra class se ocupa para avisarle al compilador que hemos empezado a escribir un objeto.&lt;br /&gt;&lt;br /&gt;La funcion __init__ recibe el nombre tecnico de constructor, en terminos practicos simplemente lo que este puesto ahi seran los valores iniciales de nuestro objeto.&lt;br /&gt;&lt;br /&gt;La funcion draw dibuja al personaje en la pantalla, el \ que hay ahi es simpelemente para escribir en 2 lineas, no cumple ningun rol a la hora de correr el juego.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Repasemos el vocabulario antes de seguir:&lt;br /&gt;argumento = valor que recibe una funcion.&lt;br /&gt;clase = abstraccion del objeto.&lt;br /&gt;atributo = cualquier variable o constante definido dentro de la clase.&lt;br /&gt;metodo = cualquier funcion definida dentro de la variable que contenga el argumento self.&lt;br /&gt;constructor = metodo que permite asignar valores iniciales a un objeto.&lt;br /&gt;&lt;br /&gt;advertencia:&lt;br /&gt;A todos los atributos de un objeto los debe preceder un self. , es esto lo que los convierte en atributos&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class miclase:&lt;br /&gt; def __init__(self):&lt;br /&gt;  a = 0 # Esto no es atributo y no se puede hacer nada con el desde fuera del codigo&lt;br /&gt;  self.a = 0 # Esto si es un atributo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ahora volviendo a nuestro personaje, que ventajas tiene?, como lo usamos?.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Para que esto quede claro voy a juntar la clase personaje con el codigo anterior, y ahi notaran la utilidad, pero antes me falta por explicar un solo concepto que es el de instancia, una instancia es cuando se crea un objeto, esto se hace asi&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;mi_instancia = mi_objeto()&lt;br /&gt;&lt;br /&gt;aqui va el codigo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#Codigo----&lt;br /&gt;import pygame&lt;br /&gt;from sys import exit&lt;br /&gt;SCREEN = pygame.display.set_mode((800, 600))&lt;br /&gt;clock = pygame.time.Clock()&lt;br /&gt;&lt;br /&gt;class Personaje:&lt;br /&gt; def __init__(self):&lt;br /&gt;  self.posX = 400&lt;br /&gt;  self.posY = 300&lt;br /&gt;  self.color = (255, 255, 255)&lt;br /&gt;  self.radio = 50&lt;br /&gt; def draw(self):&lt;br /&gt;  pygame.draw.circle(SCREEN, self.color,\&lt;br /&gt;  (self.posX, self.posY), self.radio)&lt;br /&gt;  pygame.display.update()&lt;br /&gt;&lt;br /&gt;personaje = Personaje()&lt;br /&gt;&lt;br /&gt;while True:&lt;br /&gt; clock.tick(60)&lt;br /&gt; SCREEN.fill((0,0,0))&lt;br /&gt; personaje.draw()&lt;br /&gt;&lt;br /&gt; for event in pygame.event.get():&lt;br /&gt;  if event.type == pygame.QUIT:&lt;br /&gt;   exit()&lt;br /&gt;  elif event.type == pygame.KEYDOWN:&lt;br /&gt;   if event.key == pygame.K_LEFT:&lt;br /&gt;    personaje.posX = personaje.posX - 10&lt;br /&gt;   elif event.key == pygame.K_RIGHT:&lt;br /&gt;    personaje.posX = personaje.posX + 10&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Espero que haya quedado claro puesto que la programacion orientada objetos es muy util a la hora de desarrollar video juegos,  en especial aquellos  en 3D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-7296230783235092537?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/7296230783235092537/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=7296230783235092537' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7296230783235092537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7296230783235092537'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/programacion-orientada-objetos_10.html' title='Programacion Orientada a Objetos'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-238492018389904069</id><published>2008-02-10T02:35:00.000-03:00</published><updated>2008-02-10T19:27:33.451-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Controlar la velocidad del juego</title><content type='html'>Dentro del bucle principal el codigo se lee miles de veces por segundo, y si dibujamos al personaje dentro del bucle principal, el personaje se estaria dibujando miles de veces por segundo, mucho mas de lo que necesitamos, ademas el gasto de recursos de dibujar mil elementos cada segundo es monstruoso, y ya que estamos en la onda ecologica y gastar menos corriente electrica para disminuir el calentamiento global o bien si eso no te interesa y quieres asegurarte que tu juego corra a la misma velocidad independiente si es un pentium de 400 MHz o un pentium 4 de 2.0 GHz entonces debes agregar un reloj al juego, y esto se hace de la siguiente forma:&lt;br /&gt;&lt;br /&gt;clock = pygame.time.Clock()&lt;br /&gt;&lt;br /&gt;ahora que ya tienes un reloj, dentro del ciclo principal tienes que hacerlo marcar a la velocidad que quieres que corra tu juego, o sea si quieres que tu juego corra a 60 ciclos por segundo, o mejor dicho 60 cuadros por segundo, entonces escribes dentro del bucle principal&lt;br /&gt;&lt;br /&gt;clock.tick(60)&lt;br /&gt;&lt;br /&gt;y eso seria todo.&lt;br /&gt;&lt;br /&gt;Retomando el ejemplo anterior donde dibujabamos un circulo en la pantalla, agregando un reloj el codigo quedaria asi:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#Codigo----&lt;br /&gt;import pygame&lt;br /&gt;from sys import exit&lt;br /&gt;&lt;br /&gt;SCREEN = pygame.display.set_mode((800, 600))&lt;br /&gt;clock = pygame.time.Clock()&lt;br /&gt;posX = 400&lt;br /&gt;posY = 300&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while True:&lt;br /&gt;  clock.tick(60)&lt;br /&gt;  SCREEN.fill((0,0,0))&lt;br /&gt;  pygame.draw.circle(SCREEN, (255,255,255), (posX, posY), 50)&lt;br /&gt;  pygame.display.update()&lt;br /&gt;&lt;br /&gt;  for event in pygame.event.get():&lt;br /&gt;    if event.type == pygame.QUIT:&lt;br /&gt;      exit()&lt;br /&gt;    elif event.type == pygame.KEYDOWN:&lt;br /&gt;      if event.key == pygame.K_LEFT:&lt;br /&gt;        posX = posX - 10&lt;br /&gt;      elif event.key == pygame.K_RIGHT:&lt;br /&gt;        posX = posX + 10&lt;br /&gt;&lt;br /&gt;#-------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Los dejo por hoy, que tengan buenas noches.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-238492018389904069?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/238492018389904069/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=238492018389904069' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/238492018389904069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/238492018389904069'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/controlar-la-velocidad-del-juego.html' title='Controlar la velocidad del juego'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5906268533495654258</id><published>2008-02-10T02:05:00.001-03:00</published><updated>2008-02-10T19:15:09.409-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Postear codigos fuentes en html</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hace ya varios meses que el tema de como postear los codigo en html me estaba volviendo loco, debido a que el uso de espacios antes de un texto cualquiera es ignorado, no podia respetar la identacion que debe tener cada bucle, en algunos lenguajes como C/C++, la identacion puede ser ignorada, es simplemente buena practica, pero en lenguajes como Python es obligatoria.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La solucion que estaba ocupando era usar la etiquita div, y de esa manera darle a cada bloque un margen de 10 pixeles mas respecto al anterior, lo hacia de la siguiente manera:&lt;br /&gt;&lt;br /&gt;div style="margin-left: 10px;"&lt;br /&gt;obiamente entre &lt;&gt; pero si los pongo en el ejemplo se formatea mi texto y queda invisible.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;pero el problema de esta solucion es que los espacios son virtuales, realmente no existen, son solo una capa de estilo y si deseascopiar el codigo de la pagina y pegarlo en otra parte la identacion se suprime.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Hoy por fin encontre la solucion. Es ocupando la etiqueta pre.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;De esta manera se respeta al 100% el codigo que tu escribas, pero cuidado si escribes una linea muy larga la pagina puede adquirir un scroll horizontal muy grande y eso es incomodo para los lectores, de hecho de por si el scroll horizontal para un texto es mala idea, evitalo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;aqui va una prueba para que lo vean funcionando&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sin etiqueta pre:&lt;br /&gt;hola&lt;br /&gt;hola&lt;br /&gt;hola&lt;br /&gt;hola&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;con etiqueta pre:&lt;br /&gt; hola&lt;br /&gt;  hola&lt;br /&gt;   hola&lt;br /&gt;    hola&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5906268533495654258?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5906268533495654258/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5906268533495654258' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5906268533495654258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5906268533495654258'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/postear-codigos-fuentes-en-html.html' title='Postear codigos fuentes en html'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-3664412427788956188</id><published>2008-02-08T20:58:00.000-03:00</published><updated>2008-02-10T20:13:59.342-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='Estructuras de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Diccionarios</title><content type='html'>&lt;div style="text-align: justify;"&gt;Los diccionarios son otra de las claves para hacer juegos en python, funcionan muy parecido a las listas, pero en lugar de ordenarse los terminos a traves de un indice, se ordenan a traves de una clave, la clave la pones tu.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Para crear un diccionario vacio:&lt;br /&gt;mi_diccionario = {}&lt;br /&gt;&lt;br /&gt;Para agregar un elemento al diccionario:&lt;br /&gt;mi_diccionario[clave1] = un_valor&lt;br /&gt;&lt;br /&gt;para sacar un elemento de un diccionario:&lt;br /&gt;mi_diccionario.pop(clave)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Supongamos que queremos cargar imagenes al juego, podriamos cargarlas todas en variables separadas,  tambien podriamos cargarlas todas a una lista, pero definitivamente la mejor manera es administrarlas a traves de un diccionario de la siguiente manera:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;images = {}&lt;br /&gt;images["Heroe"] = pygame.image.load("heroe.png")&lt;br /&gt;images["Enemigo"] = pygame.image.load("enemigo.png")&lt;br /&gt;&lt;br /&gt;De esta manera si quisieramos dibujar al heroe en la pantalla bastaria con:&lt;br /&gt;SCREEN.blit(images["Heroe"], (posicion_X,  posicion_Y).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;De la misma manera podemos usar los diccionarios para administrar los sonidos, y como resultado tener un codigo limpio y ordenado y facil de mantener.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-3664412427788956188?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/3664412427788956188/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=3664412427788956188' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3664412427788956188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/3664412427788956188'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/diccionarios.html' title='Diccionarios'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5326901124795886697</id><published>2008-02-07T03:15:00.001-03:00</published><updated>2008-02-10T19:17:51.099-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mis Juegos'/><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Ballons Beta</title><content type='html'>He trabajado todo el dia pero ya tengo un adelanto listo, esta en version beta todavia, falta poner la introduccion, el final, hacer las etapas, en fin, falta todo. pero por lo menos ya es "jugable".&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://es.geocities.com/war_chocobo/balloonsV8.zip"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_9UzKK6NUgk0/R6v53kXL17I/AAAAAAAAABI/8z5yGjr3n8k/s400/screenshot1.jpg" alt="" id="BLOGGER_PHOTO_ID_5164496130759448498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hagan click en la imagen para descargar el codigo fuente, necesitan python y pygame para correr el juego&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Si lo de la imagen no resulta por alguna misteriosa razon, y quieres descargar el codigo, la direccion donde lo puedes descargar es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://es.geocities.com/war_chocobo/balloonsV8.zip"&gt;http://es.geocities.com/war_chocobo/balloonsV8.zip&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Ojala les guste, espero su opinion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5326901124795886697?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5326901124795886697/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5326901124795886697' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5326901124795886697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5326901124795886697'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/ballons-beta_07.html' title='Ballons Beta'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9UzKK6NUgk0/R6v53kXL17I/AAAAAAAAABI/8z5yGjr3n8k/s72-c/screenshot1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6810446360820922724</id><published>2008-02-06T23:19:00.007-03:00</published><updated>2008-02-10T19:17:51.101-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mis Juegos'/><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Balloons</title><content type='html'>&lt;div style="text-align: justify;"&gt;El primer juego que hice se llamaba Balloons, es ese que esta en la foto de alla abajo, consiste en agarrar los globos los cuales salen de las cajas antes de que ellos salgan de la pantalla, el codigo es relativamente sencillo y por lo demas el juego es muy tierno, tiene tres niveles distintos (mañanta, tarde y noche) y la diferencias es que iban apareciendo globos de distintos colores que eran mas rapidos. Para hacer mas entretenido el juego quise agregarle plataformas sobre las que tu pudieras saltar, y asi darle un toque mas de destresa al juego, pero como la caida del personaje tiene aceleracion y por lo tanto la velocidad cambiaba cada frame no lograba detectar si debajo del personaje habia o no plataforma, y por ende el personaje a veces las atravesaba o quedaba metido entre medio de ellas, al final opte por remover las plataformas del juego, pero por el mismo motivo el juego quedó tan simple que aburria muy rapido puesto que lo unico que habia que hacer era agarrar los globos antes de que estos se escaparan.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9UzKK6NUgk0/R6pvxEXL14I/AAAAAAAAAAk/qyD-q-hPE5w/s1600-h/shoot5.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_9UzKK6NUgk0/R6pvxEXL14I/AAAAAAAAAAk/qyD-q-hPE5w/s400/shoot5.JPG" alt="" id="BLOGGER_PHOTO_ID_5164062811508955010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ayer rehice el juego ocupando algunas tecnicas nuevas aprendidas, como por ejemplo una matriz que guarda la informacion del escenario de la cual hablare en un futuro post. Ademas ocupe tecnicas de sprite por lo que mejore el rendimiento del juego, ahora  por cada cuadro solo se actualiza el personaje y no todo el escenario. De lo anterior tambien hablare mas adelante aunque en los links que publique se trata bien a fondo el tema de los sprites.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pronto publicare el juego asi que paciencia.&lt;br /&gt;Buena suerte y buenas noches.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6810446360820922724?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6810446360820922724/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6810446360820922724' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6810446360820922724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6810446360820922724'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/balloons_3145.html' title='Balloons'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9UzKK6NUgk0/R6pvxEXL14I/AAAAAAAAAAk/qyD-q-hPE5w/s72-c/shoot5.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6941529966892292494</id><published>2008-02-06T01:20:00.001-03:00</published><updated>2008-02-10T19:17:22.343-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enlaces'/><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Tutorial sobre Pygame</title><content type='html'>Siempre es mejor que sobre informacion a que falte, en esta ocasion voy a poner un link a una blog que contiene bastante informacion respecto a temas que todavia no he tratado, como por ejemplo el uso de los sprites y como hacer scroll de un fondo de pantalla, asi que para los que estan muy ansioso por aprenderlo todo y aprenderlo ya, aqui les dejo el link&lt;br /&gt;&lt;br /&gt;&lt;a href="http://miprogramacionenjuegos.wordpress.com/category/pygame/"&gt;http://miprogramacionenjuegos.wordpress.com/category/pygame/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Suerte y gracias por su tiempo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6941529966892292494?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6941529966892292494/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6941529966892292494' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6941529966892292494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6941529966892292494'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/enlace-interesante-iii_06.html' title='Tutorial sobre Pygame'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-5786986193688989656</id><published>2008-02-05T14:13:00.000-03:00</published><updated>2008-02-10T19:17:15.863-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Deteccion de Colisiones</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ya hablamos anteriormente acerca de como dibujar tu personaje en la pantalla, aunque solo fuera un circulo, y de la misma manera podemos poner otros personajes en la pantalla, el problema que tenemos ahora es como saber si dos o mas de los personajes estan tocandose, para solucionar esto existen los Rects, un rect (un rectangulo) el cual es una especie de contenedor de la superficie, para crear uno basta con:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;mi_rectangulo = pygame.Rect(posicion_izquierda, posicion_derecha, ancho, alto)&lt;br /&gt;&lt;br /&gt;Donde todas las medidas estan en pixeles, o sea si quiero crear un rectangulo de ancho 100 y de alto 100 en el extremo superior izquierdo de la pantala seria:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;mi_rectangulo = pygame.Rect(0, 0, 100, 100)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Advertencia para los matematicos: la pantalla no es igual al plano cartesiano, en el sentido de que si quieres dibujar algo mas abajo en la pantalla, son mas pixeles, puesto que todo se mide en distancias de pixeles desde el extremos superior derecho de la superficie principal creada.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Aprovecho el tema y la oportunidad para explicar como dibujar un cuadrado en la pantalla, esto se hace muy parecido a los circulos, se hace asi:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;pygame.draw(superficie, color, rect)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;o sea si la superficie principal es SCREEN, el color azul, y el rectangulo el que declaramos anteriormente, entonces para dibujar el cuadrado seria:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;pygame.draw(SCREEN, (0, ,0, 255), mi_rectangulo)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ahora viene la parte importante, ¿como sabemos si 2 rectangulos estan sobrepuestos?, puesto que nos gustaria saber si nuestra paleta golpeo la pelota, o si una bala dio con un blanco, o si estamos chocando contra una pared.&lt;br /&gt;&lt;br /&gt;Para solucionar eso existe la funcion colliderect, y se usa de la siguiente manera mi_rectangulo.colliderect(otro_rectangulo).&lt;br /&gt;&lt;br /&gt;La funcion retornara verdadero o falso segun corresponda.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Mas adelante entrare mas en el tema de las colisiones que es uno de los puntos criticos a la hora de crear juegos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-5786986193688989656?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/5786986193688989656/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=5786986193688989656' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5786986193688989656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/5786986193688989656'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/deteccion-de-colisiones.html' title='Deteccion de Colisiones'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6635666805869265120</id><published>2008-02-04T19:29:00.000-03:00</published><updated>2008-02-10T19:16:27.181-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enlaces'/><category scheme='http://www.blogger.com/atom/ns#' term='SDL'/><title type='text'>Tutorial sobre SDL para C/C++</title><content type='html'>Para todos aquellos que son mas amigos de C/C++ encontre un tutorial muy bueno sobre programacion de juegos con SDL, a continuacion les dejo el link.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javielinux.com/articulos/sdln1/sdl-n1/book1.html"&gt;http://www.javielinux.com/articulos/sdln1/sdl-n1/book1.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6635666805869265120?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6635666805869265120/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6635666805869265120' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6635666805869265120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6635666805869265120'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/enlace-interesante-iii.html' title='Tutorial sobre SDL para C/C++'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6172384355325573773</id><published>2008-02-04T14:32:00.000-03:00</published><updated>2008-02-10T19:11:50.555-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enlaces'/><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Tutorial de linuxjuegos</title><content type='html'>&lt;div style="text-align: justify;"&gt;Encontre un tutorial muy bueno sobre programacion de video juegos en español usando python y pygame, vale la pena verlo asi que no si les interesa aprender a programar juegos, no se lo pierdan.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Los tutoriales pertenecen a la comunidad de Linux Juegos, la cual tiene mucha informacion importante, parece que voy a pasar varias horas leyendo antes de seguir escribiendo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Aqui les dejo los links.&lt;br /&gt;&lt;a href="http://www.linuxjuegos.com/2005/08/21/programacion-de-juegos-en-python-tutorial-1/"&gt;tutorial parte 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.linuxjuegos.com/2005/08/25/programacion-de-juegos-en-python-tutorial-2/"&gt;tutorial parte 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Buena lectura.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6172384355325573773?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6172384355325573773/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6172384355325573773' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6172384355325573773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6172384355325573773'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/enlace-interesante-ii.html' title='Tutorial de linuxjuegos'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-6605617860200926250</id><published>2008-02-04T13:14:00.001-03:00</published><updated>2008-03-16T14:41:30.044-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='Estructuras de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Listas</title><content type='html'>&lt;div style="text-align: justify;"&gt;Las listas son una de las claves para hacer juegos, una lista es una especie de contenedor que sirve para agrupar datos, una especie de lo que vendria siendo un array en otro en lenguaje pero altamente dinamico. Una lista se declara de la siguiente manera:&lt;br /&gt;&lt;br /&gt;nombre_de_lista = []&lt;br /&gt;&lt;br /&gt;Se le puede asignar valores iniciales y estos valores no tienen porque ser del mismo tipo&lt;br /&gt;&lt;br /&gt;cosas = ["mesas", "comida", 23, 2]&lt;br /&gt;&lt;br /&gt;Si quisieramos acceder a los elementos de una lista, podemos accederlo a traves de su indice, tal como si fuera un array, o sea si escribimos cosas[0], obtendriamos como resultado el string mesas.&lt;br /&gt;&lt;br /&gt;si quisieramos recorrer completamente la lista lo podemos hacer de la siguiente manera:&lt;br /&gt;&lt;br /&gt;#Codigo---&lt;br /&gt;for elemento in cosas:&lt;br /&gt;&lt;div style="margin-left: 20px;"&gt;print elemento&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;#-----&lt;br /&gt;&lt;br /&gt;con ese codigo podemos escribir toda la informacion que hay en la lista.&lt;br /&gt;&lt;br /&gt;Si quisieras cambiar algun valor en la lista basta con saber su indice, o sea el lugar en que esta en la lista, debes recordar que la enumeracion empieza desde 0 y no de 1 y que por lo tanto el ultimo valor es el tamaño de la lista menos uno. Pues si intentas acceder a un valor que no existe el programa se cerrar. Supongamos que queremos cambiar el tercer elemento de la lista, entonces basta con cosas[2] = "nuevo elemento"&lt;br /&gt;&lt;br /&gt;Existe otro tipo de contenedor que se llama tupla, las tuplas o mas genericamente conocidas como n-plas, son mas livianas que las listas, pero no soportan reasignacion, si la idea simplemente es contener datos utiliza una tupla, pero si quieres estar cambiando los valores, utiliza una lista.&lt;br /&gt;&lt;br /&gt;Como ultimo me falta explicar como se agregan y se sacan datos de las listas, esto se hace a traves de la funcion append, para agregar un dato seria cosas.append("nueva cosa").&lt;br /&gt;Para remover el dato basta con cosas.remove("nueva cosa"), tambien es posible remover el ultimo valor utilizando al funcion pop, o sea cosas.pop(), nos retornaria el ultimo valor, veamos un ultimo ejemplo para ver si quedo todo claro.&lt;br /&gt;&lt;br /&gt;#Codigo---&lt;br /&gt;a = [] # Creamos una lista vacia&lt;br /&gt;a.append(1) # Agregamos un elemento&lt;br /&gt;a.append(2)&lt;br /&gt;print a # Esto nos mostraria en la pantalla [1,2]&lt;br /&gt;print a[0] # Esto nos mostraria el numero 1 en la pantalla&lt;br /&gt;b = a.pop&lt;br /&gt;print b # Esto nos mostraria el numero 2 en la pantalla&lt;br /&gt;#---------------&lt;br /&gt;&lt;br /&gt;Tambien es posible copiar una lista a otra lista, se hace de la siguiente forma:&lt;br /&gt;&lt;br /&gt;a = [1,2,3,4,5]&lt;br /&gt;b = a&lt;br /&gt;&lt;br /&gt;Este tipo de copia tiener una caracteristica especial, se llama copia por referencia, es muy rapido pero como consecuencia tiene que si yo modifico a o b, tambien modifico la otra lista, ejemplo:&lt;br /&gt;&lt;br /&gt;a = [1,2,3,4,5]&lt;br /&gt;b =  a&lt;br /&gt;a[0] = 5&lt;br /&gt;print b&lt;br /&gt;&gt;&gt;&gt;  [5,1,2,3,4,5]&lt;br /&gt;&lt;br /&gt;Hay una segunda forma de copiar una lista, y es haciendolo por valor, aunque podrias poner los elementos 1 a 1, iterando la primera lista y haciendo appends a la segunda vacia, hay una forma aun mas comoda y es la siguiente&lt;br /&gt;&lt;br /&gt;b = a[:]&lt;br /&gt;&lt;br /&gt;Los dejo hasta aca, mucha suerte que tengan un buen dia.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-6605617860200926250?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/6605617860200926250/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=6605617860200926250' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6605617860200926250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/6605617860200926250'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/listas.html' title='Listas'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-7273270869855063440</id><published>2008-02-04T12:43:00.000-03:00</published><updated>2008-02-10T20:14:39.237-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Funciones</title><content type='html'>&lt;div style="text-align: justify;"&gt;Las funciones sirven para no tener que reescribir codigo y a su vez para mantenerlo ordenado.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;¿Como se crea una funcion en python?&lt;br /&gt;&lt;br /&gt;def nombre_funcion(arg1, arg2, .....)&lt;br /&gt;&lt;div style="margin-left: 20px;"&gt;aqui se pone el codigo de la funcion&lt;br /&gt;aqui va el retorno de la funcion&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Una vez que la funcion llega al retorno, o se encuentra sin mas codigo debajo se devuelve a leer donde estaba antes, en caso que desees que la funcion no reciba ningun argumento simplemente no pongas nada entre los parentesis.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;veamos un ejemplo concreto por ejemplo la funcion suma.&lt;br /&gt;&lt;br /&gt;#Codigo ---&lt;br /&gt;def suma(a, b):&lt;br /&gt;&lt;div style="margin-left: 20px;"&gt;  c=a+b&lt;br /&gt;return a+b&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En el ejemplo anterior a es el primer argumento, y b el segundo argumento y por ultimo el retorno de la funcion es la suma de ambos argumentos, ahora en adelante para sumar dos valores podriamos ocupar la funcion suma y simplemente escribir suma(4, 7) y obtendriamos como resultado 11.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;una funcion como retorno puede hacer un llamado a otra funcion o asi misma, en este ultimo caso se llama funcion recursiva pero ese es un tema que trataremos mas adelante.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-7273270869855063440?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/7273270869855063440/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=7273270869855063440' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7273270869855063440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7273270869855063440'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/funciones.html' title='Funciones'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-2534044016199491735</id><published>2008-02-03T20:20:00.000-03:00</published><updated>2008-02-10T19:11:50.556-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Crear una ventana con pygame</title><content type='html'>&lt;div style="text-align: justify;"&gt;El hola mundo de los video juegos, o sea el codigo mas sencillo posible consiste en crear una ventana donde pondremos los objetos de nuestro juego, como el heroe y los escenarios, aqui les escribo el codigo&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#Codigo ----&lt;br /&gt;import pygame&lt;br /&gt;from sys import exit&lt;br /&gt;&lt;br /&gt;SCREEN = pygame.display.set_mode((800, 600))&lt;br /&gt;SCREEN.fill((0,0,0))&lt;br /&gt;&lt;br /&gt;while True:&lt;br /&gt;  pygame.display.update()&lt;br /&gt;  for event in pygame.event.get():&lt;br /&gt;    if event.type == pygame.QUIT:&lt;br /&gt;      exit()&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Aqui no hay mucho que explciar, se importa primero la libreria pygame y luego la funcion exit para salir del programa desde la libreria sys.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Luego se crea una ventana a traves del comando pygame.display.set_mode(), la cual como parametro recibe una tupla, o sea 2 datos, los cuales son el ancho y el alto.&lt;br /&gt;&lt;br /&gt;Luego pintamos esa pantalla de negro, los colores estan dados en el sistema RGB, eso quiere decir que cada uno de los valores es un numero entre 0 y 255 que corresponde a la cantidad de color de los colores respectivos, la R es de RED, la G de GREEN y la B de BLUE. Si quisieramos pintar la pantalla de rojo deberias pasar el parametro (255, 0, 0).&lt;br /&gt;&lt;br /&gt;Cada vez que hagamos un cambio en la pantalla para poder visualizarlo tenemos que actualizarla, eso se hace a travez del comando pygame.display.update()&lt;br /&gt;&lt;br /&gt;Una vez lista la pantalla entramos al bucle principal y nuestro programa queda esperando hasta que alguien lo cierre.&lt;br /&gt;&lt;br /&gt;ahora veamos un poco mas, como hacer un personaje, digamos que nuestro heroe es un circulo, y que solo se puede mover horizontalmente con las teclas flecha derecha y flecha izquierda, el codigo para hacer eso seria el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#Codigo----&lt;br /&gt;import pygame&lt;br /&gt;from sys import exit&lt;br /&gt;&lt;br /&gt;SCREEN = pygame.display.set_mode((800, 600))&lt;br /&gt;posX = 400&lt;br /&gt;posY = 300&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while True:&lt;br /&gt;  SCREEN.fill((0,0,0))&lt;br /&gt;  pygame.draw.circle(SCREEN, (255,255,255), (posX, posY), 50)&lt;br /&gt;  pygame.display.update()&lt;br /&gt;&lt;br /&gt;  for event in pygame.event.get():&lt;br /&gt;    if event.type == pygame.QUIT:&lt;br /&gt;      exit()&lt;br /&gt;    elif event.type == pygame.KEYDOWN:&lt;br /&gt;      if event.key == pygame.K_LEFT:&lt;br /&gt;        posX = posX - 10&lt;br /&gt;      elif event.key == pygame.K_RIGHT:&lt;br /&gt;        posX = posX + 10&lt;br /&gt;&lt;br /&gt;#-------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ahora el codigo se parece mucho al anterior, las diferencias son que este programa responde a 2 eventos mas, que son presionar la tecla izquierda y presionar la tecla derecha, ademas de lo anterior se dibuja un circulo de color blanco en la posicion posX, posY las cuales podemos variar a medida que vamos presionando las teclas flecha izquierda y flecha derecha.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;La funcion dibujar circulo recibe los siguientes parametros:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Superficie de destino, en este caso la pantalla&lt;/li&gt;&lt;li&gt;Color, tiene que estar en RGB&lt;/li&gt;&lt;li&gt;Posicion del centro&lt;/li&gt;&lt;li&gt;Radio&lt;/li&gt;&lt;/ol&gt;Bueno ya hicimos una introduccion a pygame, mas rato o mañana escribire un poco mas respecto al tema, como por ejemplo como dibujar cosas mas complejas que circulos.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-2534044016199491735?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/2534044016199491735/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=2534044016199491735' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/2534044016199491735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/2534044016199491735'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/crear-una-ventana-con-pygame.html' title='Crear una ventana con pygame'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-722736183036565461</id><published>2008-02-03T17:38:00.001-03:00</published><updated>2008-02-10T19:18:40.191-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enlaces'/><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><title type='text'>Enlace interesante</title><content type='html'>Navegando por ahi encontre una blog de programacion de video juegos usando python y pygame que tiene varios enlaces a informacion y tutoriales, inclusive contiene un video de mas de media hora sobre una conferencia sobre el tema de la programacion de video juegos,  los enlaces pueden ser vistos en &lt;a href="http://kalans.wordpress.com/category/programacion/python/"&gt;http://kalans.wordpress.com/category/programacion/python/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-722736183036565461?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/722736183036565461/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=722736183036565461' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/722736183036565461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/722736183036565461'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/enlace-interesante.html' title='Enlace interesante'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-1646214317701976044</id><published>2008-02-03T15:19:00.000-03:00</published><updated>2008-02-10T19:21:18.341-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Importar librerias en python</title><content type='html'>La filosofia python para resolver un problema es el siguiente.&lt;br /&gt;&lt;br /&gt;Importar algo de la libreria para resolver tal problema&lt;br /&gt;Resolver tal problema&lt;br /&gt;&lt;br /&gt;Ahora pongamonos un problema real para solucionarlo con python, digamos que calcular la raiz cuadrada de 2, entonces el codigo seria algo asi:&lt;br /&gt;&lt;br /&gt;#Codigo ---&lt;br /&gt;import math&lt;br /&gt;math.sqrt(2)&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;hay 2 formas comunes de importar librerias en python, la primera es como ya lo explique, o sea importar toda la libreria, la otra es importar solo parte de ella, eso en el ejemplo anterior seria:&lt;br /&gt;&lt;br /&gt;#Codigo ----&lt;br /&gt;from math import sqrt&lt;br /&gt;sqrt(2)&lt;br /&gt;#----&lt;br /&gt;&lt;br /&gt;En el segundo caso solo importamos la funcion sqrt.&lt;br /&gt;Ahora para importar las funciones de pygame hacemos lo siguiente&lt;br /&gt;&lt;br /&gt;#Codigo -----&lt;br /&gt;from pygame import *&lt;br /&gt;#----&lt;br /&gt;&lt;br /&gt;O sea importamos todas las funciones, tambien podriamos hacerlo una por una, pero la filosofia de python es codigo claro sin trabajar de mas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-1646214317701976044?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/1646214317701976044/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=1646214317701976044' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/1646214317701976044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/1646214317701976044'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/librerias-para-juegos-ii.html' title='Importar librerias en python'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-1464677672451219503</id><published>2008-02-03T14:58:00.001-03:00</published><updated>2008-02-10T19:22:34.046-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='Pseudocodigo'/><title type='text'>Conceptos basico de un juego de pc</title><content type='html'>&lt;div style="text-align: justify;"&gt;Bueno, al parecer hasta la fecha he hablado mucho y no he explicado nada, asi que para empezar explicare como es el pseudocodigo en terminos muy generales de un juego de computador.&lt;br /&gt;&lt;/div&gt; &lt;br /&gt;Primero se necesita crear una ventana principal que es donde pondremos todos los escenarios y personajes&lt;br /&gt;&lt;br /&gt;Luego ponemos los escenarios y los personajes dentro de la ventana principal&lt;br /&gt;&lt;br /&gt;Luego hacemos un bucle que corra mientras el juego no termine, algo asi como while (finnish == False) o while True, la idea es que el bucle corra hasta que un evento externo termine con el juego, normalmente este ciclo infinito se le llama bucle principal.&lt;br /&gt;&lt;br /&gt;Ahora que ya esta corriendo el juego, ponemos el escenario en la ventana principal, y luego al personaje puesto que no queremos que el escenario quede sobre el personaje&lt;br /&gt;&lt;br /&gt;Por ultimo verificamos todos los eventos que se estan generando, por ejemplo clicks del mouse o teclas del keyboard, podriamos poner una condicion de que si se presiona la tecla ESC la variable finnish sea igual True y en ese caso el programa terminiria, o simplemente podriamos llamar a una funcion del sistema que cierre el juego, en python seria sys.exit().&lt;br /&gt;&lt;br /&gt;A continuacion deje un pequeño pseudo codigo a modo de resumen.&lt;br /&gt;&lt;br /&gt;#Pseudo Codigo----------&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;crear una ventana&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cargar un personaje&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cargar un escenario&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mientras el juego no termine:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    dibujar el escenario&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        dibujar el personaje&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        verificar si hay eventos (por ejemplo si se presiona una tecla que mueve al personaje)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------#&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-1464677672451219503?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/1464677672451219503/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=1464677672451219503' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/1464677672451219503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/1464677672451219503'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/conceptos-basico-de-un-juego-de-pc.html' title='Conceptos basico de un juego de pc'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-8615067143029982412</id><published>2008-02-03T04:06:00.000-03:00</published><updated>2008-02-10T19:14:19.894-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Librerias para hacer juegos con python</title><content type='html'>&lt;div style="text-align: justify;"&gt;Una libreria es un conjunto de funciones que permiten hacer la vida de los programadores mas faciles y librerias para hacer juegos existen por miles, para python aunque existen muchas mencionare por mientras solo 2, pygame, la cual es una excelente libreria para programar juegos 2d, y pyopenGL la cual es probablemente la mejor libreria para hacer juegos 3d en python.&lt;br /&gt;&lt;br /&gt;la libreria pygame la puedes descargar desde la pagina oficial &lt;a href="http://www.blogger.com/www.pygame.org"&gt; www.pygame.org &lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;la libreria pyopenGL la puedes descargar en &lt;a href="http://pyopengl.sourceforge.net/"&gt; www.pyopengl.sourceforge.net &lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-8615067143029982412?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/8615067143029982412/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=8615067143029982412' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/8615067143029982412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/8615067143029982412'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/librerias-para-juegos.html' title='Librerias para hacer juegos con python'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-7979305461882943098</id><published>2008-02-01T20:10:00.001-03:00</published><updated>2008-02-10T19:22:44.385-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conceptos'/><title type='text'>Primeros pasos</title><content type='html'>&lt;div style="text-align: justify;"&gt;Los codigos de los juegos de videos, asi como de los programas de computadores se asemejan mucho a los diagramas de flujo, o poniendolo en terminos mas sencillos, a las recetas de cocina. uego, cuando uno ya tiene listo un codigo lo compila, o sea lo convierte a instrucciones que el computador entiende y luego lo ejecuta o sea lo hace correr.&lt;br /&gt;&lt;br /&gt;Existen distintos tipos de lenguajes de programacion, que es como decir que hay distintas formas de escribir las recetas, cada uno de estos lenguajes necesita de un compilador distinto. Como excepcion a la regla Hay algunos lengujes de programacion que no se compilan y algunos que se pseudocompilan, o sea que se compilan solo parte del codigo, este tipo de lenguajes se llama interpretado.&lt;br /&gt;&lt;br /&gt;A mi preferencia el mejor lenguaje para prototipear (o sea para desarrollar rapido los programas) es python, pero si se quiere desarrollar un potente motor 3d para juegos de videos es mejor ocupar un lenguaje como c++, voy a dejar para mas adelante las explicaciones del porque uno y no los otros, por ahora recomiendo que si quieren hacer un video juego desde 0, creado por ustedes mismo haganlo en python.&lt;br /&gt;&lt;br /&gt;Si ya sabes programar en algun lenguaje te recomiendo el tutorial de python instantaneo el cual puedes encontrar haciendo click &lt;a href="http://www.arrakis.es/%7Erapto/AprendaPython.html"&gt; aqui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-7979305461882943098?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/7979305461882943098/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=7979305461882943098' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7979305461882943098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/7979305461882943098'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/primeros-pasos.html' title='Primeros pasos'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2224637814982711187.post-542054808104322200</id><published>2008-02-01T19:20:00.001-03:00</published><updated>2008-02-10T18:38:11.933-03:00</updated><title type='text'>Hola mundo</title><content type='html'>Me llamo Gonzalo Sanchez, estudio informatica en la universidad Federico Santa Maria, y hace ya un buen tiempo que estoy abordando el tema de programacion de video juegos, he empezado ya a hacer varios juegos de diversas tipos entre los cuales se encuentran juegos de  simulacion, rpg y plataforma entre otros,  aunque solo unos pocos estan terminados debido a la cantidad de esfuerzo que se necesita en acabar los minuciosos detalles de un juego y que por lo general son la parte fome.&lt;br /&gt;&lt;br /&gt;Empiezo este blog con el motivo de intentar formar una comunidad hispana de desarrollo de video juegos y, aunque principalmente mis planes son discutir acerca de algoritmos relacionados con video juegos ej: colision con plataforma, camino mas corto entre 2 puntos (a*, dijkstra) y otros, tambien esta en mis planes escribir acercar de como desarrollar video juegos desde 0 con solo un block de notas y un compilador.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2224637814982711187-542054808104322200?l=creatusjuegos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://creatusjuegos.blogspot.com/feeds/542054808104322200/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2224637814982711187&amp;postID=542054808104322200' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/542054808104322200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2224637814982711187/posts/default/542054808104322200'/><link rel='alternate' type='text/html' href='http://creatusjuegos.blogspot.com/2008/02/hola-mundo.html' title='Hola mundo'/><author><name>Gonzalo Sánchez</name><uri>http://www.blogger.com/profile/15739777317617106779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
