¿Como crear nuevos bloques-piezas para juego de Puzzle?

Consulte acerca de programas, técnicas, algoritmos etc.

¿Como crear nuevos bloques-piezas para juego de Puzzle?

Notapor orenji » Mar Dic 11, 2012 6:32 pm

Saludos campaneros

Antes que nada quiero agradecerles por la ayuda y el tiempo que me brinden, en verdad se los agradezco, mi duda supongo que es común en novatos, así que no creo que a ustedes les cueste esto, por mi parte estoy un poco desorientado. Desde ya muchas gracias por todo. :)

Estoy intentando hacer un juego de puzzle similar a Puyo Puyo y similares, es decir un juego al estilo Tetris donde cada jugador lucha con otro jugador y cada vez que uno elimina bloques de igual colores, el jugador contrario recibe una cantidad de bloques grises, algo así como piedras que el jugador contrario debe romper si o si para seguir jugando. :D

Cree una clase llamada "bloques" donde tiene las orden de caer, datos para la colisión y gráficos, con la intensión de luego crear varios bloques con la misma base. Pero ahora llegado el momento, no se me ocurre como crear nuevos objetos "al vuelo" por decirlo de alguna manera.

Esa es mi duda, que no se como crear nuevos bloques/objetos teniendo el programa corriendo, si ustedes saben algún método que sea mas sencillo, se los agradeceré, pues la verdad yo mismo no tengo mucha experiencia programando.

Aquí les pongo el código que hice hasta ahora, esta recién empezado:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Nombre: Puzzle attack!
# Licencia: GNU/GPL Version 3

import sys, pygame


# iniciando modulos de pygame

pygame.init()


# carga del joystick

pygame.joystick.init()

numero_joysticks = pygame.joystick.get_count()

print 'Usted tiene ' + str(numero_joysticks) + ' joysticks conectados.'

joystick_p1 = pygame.joystick.Joystick(numero_joysticks - 1)

joystick_p1.init()


# creación de la pantalla

ancho_pantalla = 854
alto_pantalla = 480

pantalla = pygame.display.set_mode((ancho_pantalla,alto_pantalla))
pygame.display.set_caption("Puzzle attack !")


# se oculta el mouse

pygame.mouse.set_visible(False)


# carga del fondo

fondo = pygame.image.load("./image/fondo.png")


# rectangulo de la ventana

rectangulo_ventana = pygame.Rect((0,alto_pantalla-10) , (ancho_pantalla,100))


# clases

class bloque_simple:

def __init__ (self):
self.bloque_simple_grafico = pygame.image.load("./image/bloque.png")
self.posy = 0
self.bloque_rectangulo = pygame.Rect((0, self.posy) , (50, 50))


def actualizar(self):
self.bloque_rectangulo = pygame.Rect((0, self.posy) , (50, 50))
self.posy_previa = self.posy


def caer(self):
self.posy += 10


def imprimir(self):
pantalla.blit(self.bloque_simple_grafico, (0,self.posy))


bloque = bloque_simple()


# se crea un reloj

clock = pygame.time.Clock()


while True:

time = clock.tick(60)

bloque.actualizar()

# se mira si hay colisión y sí lo hay detiene el bloque a una
# posición previa. sí no encuentra nada lo deja caer

if bloque.bloque_rectangulo.colliderect(rectangulo_ventana):
print 'colision'
bloque.posy = bloque.posy_previa
else:
bloque.caer()


# refresco de pantalla

pantalla.blit(fondo, (0,0),(0, 0, ancho_pantalla, alto_pantalla))


# se dibuja un bloque

bloque.imprimir()


# se muetra la pantalla

pygame.display.flip()


# fin del game loop


Bueno ese el código hasta ahora, espero haberme expresado bien. Desde ya les agradezco su ayuda. Saludos.
orenjigames.wordpress.com - Mi blog donde pongo mis códigos entre otras cosas.
orenji
 
Mensajes: 8
Registrado: Mar Sep 04, 2012 9:59 pm

Re: ¿Como crear nuevos bloques-piezas para juego de Puzzle?

Notapor Barajas » Jue Dic 13, 2012 2:55 am

Simple, creas una nueva "instancia" del objeto :)... Mira esto...

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pygame
from random import *

ANCHO=200
ALTO=200

#tenemos la definición de nuestro objeto...
class Objeto():
#inicializamos nuestro objeto...
def __init__(self):
self.x = randrange(0,200)
self.y = 0
self.dy = 10
#creamos un método de actualización....
def actualizar(self):
#esto cambia la posición en y
if self.y < 200-32:
#le sumamos la diferencia...
self.y+=self.dy
#creamos un método para dibujar el objeto...
def dibujar(self,pantalla):
pygame.draw.rect(pantalla, (10,10,210),(self.x,self.y,32,32))

#iniciamos pygame...
screen = pygame.display.set_mode((ANCHO, ALTO))
#fijamos un numero de frames por segundo...
delay_frames = (1000/35)

#creamos una lista de objetos....
Lista_objetos = []

hacer = True
while hacer:
#esto pausa el bucle durante un numero de milisegundos...
pygame.time.delay(delay_frames)

#esto revisa todos los eventos...
for event in pygame.event.get():
# Finaliza el programa si hay un evento de tipo cerrar
if event.type == pygame.QUIT:
hacer = False
# revisamos la entrada de las teclas...
if event.type == pygame.KEYDOWN:
#si se presiona la tecla espacio...
if event.key == pygame.K_SPACE:
#agrega un nuevo objeto...
#"Al vuelo"
Lista_objetos.append( Objeto() )
#si se presiona la tecla escape
if event.key == pygame.K_ESCAPE:
#terminamos el bucle...
hacer = False

#llenamos la pantalla de un color gris...
screen.fill((200,200,200))

#revisamos cada objeto en la lista...
for objeto in Lista_objetos:
#y a cada objeto llamamos su método...
objeto.dibujar(screen)
objeto.actualizar()

#si hay más de 10 objetos quitamos el ultimo de la lista...
if len(Lista_objetos)>10:
Lista_objetos.pop(0)

pygame.display.update()

#terminado el bucle.. limpiamos...
pygame.quit()


Si tienes dudas, pregunta, si lo entiendes, podríamos decir que "estas del otro lado"....
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: ¿Como crear nuevos bloques-piezas para juego de Puzzle?

Notapor orenji » Jue Dic 13, 2012 7:36 pm

Muchas gracias !!

Saludos barajas. Te agradezco tu ayuda, estuve viendo el código y revisando como adaptarlo al mio, estuve haciendo unas pruebas y funciono. Muchas gracias.

Te muestro como quedo el código hasta ahora, también intente avanzar por otros lados mientras alguien podía ayudarme, pero avance hasta una parte ya que no sabia como iba que dar todo, bueno ahí va: :P (perdón si no querías ver una parte grande del codigo)

marcador = marcadores()


#creamos una lista de objetos....
Lista_objetos = []


# se crea un reloj

clock = pygame.time.Clock()


while True:

time = clock.tick(1)

# coherencia de pygame con el sistema

pygame.event.pump()

# reinicio de variables - prueba

arriba = False
abajo = False
izquierda = False
derecha = False


# se agregan nuevos bloques

for nueva_columna in range ( 1, 7 ):
Lista_objetos.append( bloque_simple(nueva_columna) )
print nueva_columna


# se revisan los eventos

for eventos in pygame.event.get():

# pygame averigua si hay que cerrar el juego

if (eventos.type == pygame.QUIT):
sys.exit()

# revisamos la entrada de las teclas...

if eventos.type == pygame.KEYDOWN:

#si se presiona la tecla espacio...

if (eventos.key == pygame.K_UP):
arriba = True
#Lista_objetos.append( bloque_simple() )
print arriba


#revisamos cada objeto en la lista...
for bloques in Lista_objetos:
#y a cada objeto llamamos su método
bloques.actualizar()

# se mira si hay colisión y sí lo hay detiene el bloque a una
# posición previa. sí no encuentra nada lo deja caer

if bloques.bloque_rectangulo.colliderect(rectangulo_ventana):
print 'colision'
bloques.posy = bloques.posy_previa
else:
bloques.caer()


# se actualiza el marcador

marcador.actualizar(4,6)


# refresco de pantalla

pantalla.blit(fondo, (0,0),(0, 0, ancho_pantalla, alto_pantalla))


# se dibuja lo bloques

for bloques in Lista_objetos:
bloques.imprimir()


# se dibuja un marcador

marcador.imprimir()


# se muetra la pantalla

pygame.display.flip()


# fin del game loop


Donde dice:
# se agregan nuevos bloques

for nueva_columna in range ( 1, 7 ):
Lista_objetos.append( bloque_simple(nueva_columna) )
print nueva_columna


Es un método rápido que use para saber si el código agregaría los bloques, y si, si funciono. Use esto porque tenia problemas con mi IDE (geany) pues tenia problemas de identacion en la zona donde se presiona las teclas y para no perder tiempo fui al grano.

Hasta ahí me arreglo solo gracias, solo una cosita mas. Veras te comento que no conocía eso de:
#agrega un nuevo objeto...
#"Al vuelo"

Lista_objetos.append( Objeto() )


La parte .append() ¿a quien pertenece, al lenguaje python, al manejo de las listas o... a quien ?

Saludos y gracias por la ayuda.

PD: ¿Que quisiste decir con eso del otro lado? :shock:
Si tienes dudas, pregunta, si lo entiendes, podríamos decir que "estas del otro lado"....


la verdad me quede un poco perplejo y hasta me dio un poco de risa. ... el otro lado...
orenjigames.wordpress.com - Mi blog donde pongo mis códigos entre otras cosas.
orenji
 
Mensajes: 8
Registrado: Mar Sep 04, 2012 9:59 pm

Re: ¿Como crear nuevos bloques-piezas para juego de Puzzle?

Notapor Barajas » Mar Dic 18, 2012 7:38 am

Responderé por partes... :)

orenji escribió:La parte .append() ¿a quien pertenece, al lenguaje python, al manejo de las listas o... a quien ?


Es parte del lenguaje, y son métodos que tienen definidos por defecto. Sí quieres ver más ejemplos de eso mira esta pagina, en "añadir elementos": http://es.wikibooks.org/wiki/Inmersi%C3%B3n_en_Python/Tipos_de_datos_nativos/Presentaci%C3%B3n_de_las_listas

orenji escribió:la verdad me quede un poco perplejo y hasta me dio un poco de risa. ... el otro lado...


Es una forma de decir que has pasado de un punto a otro. Y la dije por el hecho de que si puedes darte cuenta de como funciona eso, puedes hacer una que otra cosa mas interesante... :)

Saludos.
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron