1er juego Pygame

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

1er juego Pygame

Notapor IrvingProg » Vie Ene 07, 2011 7:45 pm

Hola.

He estado viendo Python desde algunas semanas atrás y algunos días antes me he metido con Pygame, resulta que estoy creando un juego de practica, para ir obteniendo mas conocimientos y claro poder crear mejores proyectos en un futuro, solo que aun tengo algunas dudas. Aquí dejo el código del juego que estoy creando, al final explico mis dudas.
Código: Seleccionar todo
#!/usr/bin/python

# ######################
# Programando un juego en Python utilizando Pygame como libreria
# Irving Rodriguez
# IDE: Eric4 && Geany
# S.O.: Ubuntu 10.10
# ######################

import pygame
from pygame.locals import *

pygame.init()
screen_x = 640
screen_y = 480
# Creamos pantalla y asignamos nombre
screen = pygame.display.set_mode((screen_x, screen_y))
pygame.display.set_caption('Juego en Python')

######################
# Posicion de mario
mario_pos_x = 1
mario_pos_y = 1
######################

#Cargamos las imagenes y visualizamos en pantalla
fondo = pygame.image.load('./data/fondo.jpg') .convert()
mario = pygame.image.load('./data/mario1.png') .convert_alpha()
mario2 = pygame.image.load('./data/mario4.png') .convert_alpha()
screen.blit(fondo, (0, 0))

#Rectas
recta_mario = mario.get_rect()
recta_mario2 = mario2.get_rect()

#Actualizamos pantalla
pygame.display.update()

#bucle
while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
        presionada = pygame.key.get_pressed()
        if presionada[K_RIGHT]:
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.x += 1
            screen.blit(mario, recta_mario)
            pygame.display.update()
        if presionada[K_LEFT]:
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.x -= 1
            screen.blit(mario,  recta_mario)
            pygame.display.update()
        if presionada[K_DOWN]:
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.y += 1
            screen.blit(mario, recta_mario)
            pygame.display.update()
        if presionada[K_SPACE]:
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.y -= 1
            screen.blit(mario2, recta_mario)
            pygame.display.update()


Lo único que hace este juego es mover el personaje por la pantalla con las teclas de dirección(< >) y hacia abajo, brinca con la tecla "space".

Lo que quiero hacer es al moverlo no se salga de la pantalla, intente con una función pero no me sirve:
Código: Seleccionar todo
def pos_mario(par1, par2):
if pos_mario_x < 1:
pos_mario_x = 600


También que al brincar regrese a la posición donde inicio, osea que baje, por que el personaje no conoce la gravedad :D

He intentado hacer que inicie el personaje desde una coordenada, por ejemplo (0,385) Pero no sucede eso, supongo que es por la recta que me inicia el personaje desde la coordenada (0,0), cuando hago eso se crean dos personajes, el que imprime en la primera coordenada, y el que inicia cuando presiono alguna tecla.

Espero me puedan ayudar. Gracias
Avatar de Usuario
IrvingProg
 
Mensajes: 24
Registrado: Vie Ene 07, 2011 7:36 pm
Ubicación: México

Re: 1er juego Pygame

Notapor pchack » Sab Ene 08, 2011 12:49 am

Saludos, IrvingProg.

empezemos por las cordenada iniciales de el personaje:

He intentado hacer que inicie el personaje desde una coordenada, por ejemplo (0,385) Pero no sucede eso, supongo que es por la recta que me inicia el personaje desde la coordenada (0,0), cuando hago eso se crean dos personajes, el que imprime en la primera coordenada, y el que inicia cuando presiono alguna tecla.


para que inicie por ejemplo en x = 300 y en y: 100 tienes que escribir lo siguiente:

recta_mario.x = 300
recta_mario.y = 100
# luego de asignarlas debes pintar en pantalla los cambios
screen.blit(mario, recta_mario)

para simular la gravedad en tu personaje navegando en el foro encontre una explicación buenisima en el siguiente link.

http://www.loosersjuegos.com.ar/foro/viewtopic.php?p=807&sid=d07cf9676834f412c49b5a21eb48d93a

y la adapte para tu codigo, aqui va:




Código: Seleccionar todo
#!/usr/bin/python

# ######################
# Programando un juego en Python utilizando Pygame como libreria
# Irving Rodriguez
# IDE: Eric4 && Geany
# S.O.: Ubuntu 10.10
# ######################

import pygame
from pygame.locals import *

pygame.init()
screen_x = 640
screen_y = 480
# Creamos pantalla y asignamos nombre
screen = pygame.display.set_mode((screen_x, screen_y))
pygame.display.set_caption('Juego en Python')

######################
# Posicion de mario
mario_pos_x = 1
mario_pos_y = 1
######################

GRAVEDAD = 0.03



#Cargamos las imagenes y visualizamos en pantalla
fondo = pygame.image.load('./data/fondo.jpg') .convert()
mario = pygame.image.load('./data/mario1.png') .convert_alpha()
mario2 = pygame.image.load('./data/mario4.png') .convert_alpha()
screen.blit(fondo, (0, 0))

#Rectas
recta_mario = mario.get_rect()
recta_mario2 = mario2.get_rect()


#indicamos posicion inicial
recta_mario.x = 300
recta_mario.y = 100

screen.blit(mario, recta_mario)

# posicion suelo es la posicion de origen del salto
pos_suelo = recta_mario.y

# representa la distancia con respecto al suelo
dy = 0

#Actualizamos pantalla
pygame.display.update()

#bucle
while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
        presionada = pygame.key.get_pressed()
        if presionada[K_RIGHT]:
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.x += 1
            screen.blit(mario, recta_mario)
            pygame.display.update()

        if presionada[K_LEFT]:
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.x -= 1
            screen.blit(mario,  recta_mario)
            pygame.display.update()

        if presionada[K_DOWN]:
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.y += 1
            screen.blit(mario, recta_mario)
            pygame.display.update()
       
        if dy == 0:    #si esta en el suelo
            if presionada[K_SPACE]: # si se presiona espacio
                screen.blit(fondo, recta_mario, recta_mario)
                pos_suelo = recta_mario.y
                dy = -2
        else: # si esta en el aire
            screen.blit(fondo, recta_mario, recta_mario)
            recta_mario.y += dy    # empuja el personaje hacia abajo
            dy += GRAVEDAD    # y acelera su caida

            if recta_mario.y > pos_suelo:    # detiene la caida en el punto de origen
                dy = 0
                y = pos_suelo
           

            screen.blit(fondo, recta_mario, recta_mario)
            screen.blit(mario2, recta_mario)           
            pygame.display.update()
            pygame.time.wait(1)             






Espero que te sirva la respuesta y te recomiendo que utilices el motor Pilas , es un motor
para desarrollar videojuegos bastante interactivo , robustos, sintaxis bastante simple y en español.

ademas esta desarrollado en python y tambien existe una version para c++. Este motor esta siendo
desarrollada por participantes de este foro, incluyendome.

En el motor pilas ahi un ejemplo buenisimo de lo que quieres lograr tu, con un personaje llamado pingu.

si te interesa probarlo en la pagina oficial explica como instalarlo y ademas ahi una documentación buenisima de como
se utiliza.

http://www.pilas-engine.com.ar

bueno espero que sirva la respuesta y mi recomendación y cualquier duda
preguntala, ya que en este foro ahi gente muy buena y dispuesta a ayudar.

Saludos.
pchack
 
Mensajes: 106
Registrado: Lun Dic 13, 2010 12:23 am

Re: 1er juego Pygame

Notapor IrvingProg » Sab Ene 08, 2011 1:06 am

Gracias pchack.

Por lo del codigo y la explicacion, bien facil entenderla. Por cierto "pilas" me dejo así :o :o :o :o :o :o
Se ve genial esa librería, creo que mejor empezare con esa en lugar de pygame, aparte esta en español cierto?

Se ve genial :D
Avatar de Usuario
IrvingProg
 
Mensajes: 24
Registrado: Vie Ene 07, 2011 7:36 pm
Ubicación: México

Re: 1er juego Pygame

Notapor pchack » Sab Ene 08, 2011 1:14 am

si es ciero la sintaxis de pilas, y toda la documentacion esta en español.

ademas trae algunos ejemplos y minijuegos muy buenos que permiten entender facilmente su uso.

saludos.
pchack
 
Mensajes: 106
Registrado: Lun Dic 13, 2010 12:23 am


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron