Pygame sin funciones o class

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

Pygame sin funciones o class

Notapor conde » Mié Ene 27, 2010 11:54 pm

Hola, soy nuevo en Pygame y conozco las class de python. Pero, las class de python y los objetos de pygame, son cosas distintas; porque su uso es mas complejo y a los principiantes nos cuesta un poco comprenderlos. Por eso quisiera consultar, ¿De que forma puede hacerse un juego sin utilizar las class, funciones y sprites?

Hay explicaciones de como mover imágenes en python solo con bucles. También de como configurar eventos. Pero no hay ninguna que una las dos cosas. Por eso, si alguien puede tirar un código que realice dicha tarea, estaría agradecido.

SAludos y gracias
conde
 
Mensajes: 6
Registrado: Lun Ene 25, 2010 7:29 pm

Notapor shackra » Sab Ene 30, 2010 6:34 pm

Hola :D.
no "tirare" ningun codigo explicandote como puedes hacer un juegos sin clases, funciones o sprites. lamentablemente para ti (y para mi) estas tres cosas son muy importantes.

con las clases puedes hacer derivaciones a partir de una clase base, por ejemplo, una clase para los bichitos en general que maneje el pìntarlos en la pantalla de juego y actualize su posicion con introducir algunos parametros (sacandolos por entrada de teclado o por I.A) y a partir de esa clase base, derivar la clase para el jugador (con otros metodos y atributos como la cantidad de vida u magia, etc) y los enemigos.

las funciones son aun mas sencillas, el problema viene cuando estas haciendo el juego y tenga ese millar de variables por todas partes haciendo del codigo fuente de tu juego un asco de seguir.

con los sprites puedes saber cunado uno choca con otro y realizar alguna accion como borrar al segundo de la pantalla y esas cosas.

en fin, tienes que cambiar un poco tu mentalidad, asi podras aprender!.
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Notapor Metalero » Sab Ene 30, 2010 8:31 pm

Lo que estas pidiendo es imposible, es como si te digo que quiero hacer un videojuego usando una calculadora o una maquina de escribir.

1º. las funciones son algo basico no solo en los videojeugos, si no es la programacion general, asi como en las matematicas.

2º. las clases son el alma de la programacion aorientada a objetos. Y ésta a su vez, es el alma del estilo de programacion para hacer videojuego, seria muy dificil por no decir imposible hacer un jeugo, usando programacion estructurada o procedural.

3º. los sprites son la base de la parte grafica de un juego 2D. Absolutamente TODO lo que vez en tu pantalla en un juego 2D (exeptuando cosas muy especiales, como por ejemplo un generador de particulas) son sprites.
Metalero
 
Mensajes: 14
Registrado: Sab Oct 24, 2009 3:47 pm

Re: Pygame sin funciones o class

Notapor hugoruscitti » Sab Ene 30, 2010 10:06 pm

conde escribió:Hay explicaciones de como mover imágenes en python solo con bucles. También de como configurar eventos. Pero no hay ninguna que una las dos cosas. Por eso, si alguien puede tirar un código que realice dicha tarea, estaría agradecido.



Saludos conde, te escribí un ejemplo sencillo utilizando solamente
una imagen y un bucle (espero haber entenido tu pedido).

Así es como se ve el ejemplo en pantalla, con los direccionales
del teclado puedes mover al personaje por el escenario:

Imagen

La imagen del personaje tiene que estar en el mismo directorio
del ejemplo (bajo el nombre "boy.png").

Imagen

y el código es este:

Código: Seleccionar todo
import pygame
import sys

pygame.init()

screen = pygame.display.set_mode((320, 240))
imagen = pygame.image.load('boy.png')
color = (200, 200, 200)
x, y = 100, 100

while True:

    # atiende el pedido de cierre de la ventana
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            sys.exit(0)


    # Actualiza la posicion del personaje
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        x = x - 2

    if keys[pygame.K_RIGHT]:
        x = x + 2

    if keys[pygame.K_UP]:
        y = y - 2

    if keys[pygame.K_DOWN]:
        y = y + 2


    # limpia la pantalla
    screen.fill(color)

    # imprime el personaje sobre la pantalla
    screen.blit(imagen, (x, y))

    # actualiza la ventana y se detiene un instante
    pygame.display.flip()
    pygame.time.wait(10)



Saludos y buena suerte.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor conde » Dom Ene 31, 2010 12:44 am

Hugo, la verdad que sos un genio. Era exactamente lo que estaba buscando y sabía que el post era difícil de leer. Así que mil gracias!!!


Metalero: Respeto tu opinión. Porque es cierto, de ser el juego muy grande, es imposible hacerlo sin clases. Pero bueno, aclaré que era principiante y yo necesitaba ver un código bien básico para comprenderlo; y creo que muchos principiantes necesitan eso. Igual gracias.

shackra
en fin, tienes que cambiar un poco tu mentalidad, asi podras aprender!.

Lamentablemente para vos (y para mí), todavía no fijé turno con el psicólogo, para el "cambio de mentalidad" que me estás sugiriendo. Pero bueno, te recomiendo, de tener pocas ganas de responder, no escribas 5 renglones contándome lo ya que sé y expresando tu negativa a escribir lo que quiero saber.

SAludos :D y gracias !!!
Última edición por conde el Dom Ene 31, 2010 1:30 am, editado 2 veces en total
conde
 
Mensajes: 6
Registrado: Lun Ene 25, 2010 7:29 pm

Notapor conde » Dom Ene 31, 2010 12:46 am

Modifiqué el código de Hugo para agregar una imagen que se mueva de forma automática (o sea sin flechas). Tal vez a alguien le sirve:

Código: Seleccionar todo
import pygame
import sys

pygame.init()
size = width, height = 320, 240 #Medida de ventana

screen = pygame.display.set_mode(size) #Ventana
pygame.display.set_caption('ejemplo 3') #Nombre de ventana
imagen = pygame.image.load('life.png') # Imagen que se mueve con las flechas
imagen2 = pygame.image.load('life.png')  # Imagen que se mueve de forma automatica
color = (200, 200, 200)
x, y = 100, 100
pos_x = 20
pos_y = 20

while True:

    # atiende el pedido de cierre de la ventana
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            sys.exit(0)
    pos_x += 10
    if pos_x > width:
        pos_x = -40
        pos_y += 20
    if pos_y > height:
        pos_y = -10


    # Actualiza la posicion del personaje
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        x = x - 2

    if keys[pygame.K_RIGHT]:
        x = x + 2

    if keys[pygame.K_UP]:
        y = y - 2

    if keys[pygame.K_DOWN]:
        y = y + 2


    # limpia la pantalla
    screen.fill(color)

    # imprime el personaje sobre la pantalla
    screen.blit(imagen, (x, y)) #impresion de la imagen que se mueve con las flechas
    screen.blit(imagen2, (pos_x, pos_y)) #Impresion de la imagen que se mueve de forma automatica

    # actualiza la ventana y se detiene un instante
    pygame.display.flip()
    pygame.time.wait(10)


SAludos
conde
 
Mensajes: 6
Registrado: Lun Ene 25, 2010 7:29 pm

Notapor Geo » Dom Ene 31, 2010 5:45 am

Metalero escribió:1º. las funciones son algo basico no solo en los videojeugos, si no es la programacion general, asi como en las matematicas.

Aunque sería posible evitarlas, es cierto.
Metalero escribió:seria muy dificil por no decir imposible hacer un jeugo, usando programacion estructurada o procedural.

Falso, claro que se puede.
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor Juanxo » Dom Ene 31, 2010 10:06 am

Estoy de acuerdo con casi todo.

En cuanto a lo de que es casi imposible programación estructurada para juegos, os recuerdo que aquí tenemos un ejemplo de lo contrario. ¿Dónde estas lacabra? xD Y voy más lejos. Os recuerdo que hay muchos juegos profesionales que tienen más años que c++.

Después de este desvarío, solo darte ánimos y decirte que no te rindas ni tires la toalla porque sea algo dificil para principiantes. El secreto para avanzar en esto es practicar y practicar, y leerse un monton de tutoriales/manuales entre medias.
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Notapor shackra » Lun Feb 01, 2010 12:58 am

mira, mejor bajate este libro, leetelo todo y luego vienes a postear dudas!.

bienvenido a la comunidad.
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Notapor conde » Mar Feb 02, 2010 12:55 am

Geo y Juanxo gracias por sus comentarios. Voy a seguir probando suerte...
El post es una propuesta que tiende a simplificar un poco el código, y ser mas accesible. No pretendía, estrictamente, que carezca de funciones de una manera absoluta. Aunque el código de Hugo lo logra.


Shackra, gracias por tu bienvenida. Me parece que el libro que me dejaste, tiene cierta conexión con el lenguaje de este sitio de internet:

http://www.igooh.com/notas/la-vanidad/


SAludos
conde
 
Mensajes: 6
Registrado: Lun Ene 25, 2010 7:29 pm

Raw_Input con pygame... entrada de datos por usuario

Notapor conde » Mar Feb 09, 2010 10:50 pm

ALguien sabe:
¿Se puede hacer un raw_input con Pyame como hacemos con python? O sea, pedir que el usuario escriba y se vea en la pantalla TODAS las teclas que van tipeando hasta algun evento. Por ejemplo Presionar un botón o tocar enter.

SAludos
conde
 
Mensajes: 6
Registrado: Lun Ene 25, 2010 7:29 pm

Notapor lacabra25 » Dom Feb 14, 2010 12:11 am

Geo escribió:
Metalero escribió:
Metalero escribió:seria muy dificil por no decir imposible hacer un jeugo, usando programacion estructurada o procedural.

Falso, claro que se puede.


Completamente de acuerdo con Geo, Logo es un lenguaje interpretado que no usa programacion orientada a objetos, simplemente ejecuta ordenes y permite definir procedimientos o funciones (hace una diferenciacion entre ambas desde el punto de vista de si devuelven o no algun valor), C tampoco usa clases u objetos sino funciones, variables, estructuras, punteros, uniones, enumeraciones, bucles, etc, etc, y particularmente el que C no use programacion orientada a objetos sino imperativa me resulta incluso mas sencillo, comodo y facil que C++ o Python por mucho que para muchos la abstraccion en objetos de C++ y Python les haga la vida más facil.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Re: Raw_Input con pygame... entrada de datos por usuario

Notapor endaramiz » Dom Feb 14, 2010 7:02 pm

conde escribió:ALguien sabe:
¿Se puede hacer un raw_input con Pyame como hacemos con python? O sea, pedir que el usuario escriba y se vea en la pantalla TODAS las teclas que van tipeando hasta algun evento. Por ejemplo Presionar un botón o tocar enter.

SAludos



Quizás esto te sirva.

Personalmente creo que es mejor crear un hilo nuevo cuando se hace una segunda pregunta que no tiene relación con la primera.

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Notapor endaramiz » Dom Feb 14, 2010 7:35 pm

Al final me he animado y he modificado el programa para no usar la clase. Espero que mirar los dos códigos (después de leer algo de teoría) te ayude a aprender sobre como escribir programas usando clases.

Código: Seleccionar todo
import sys

import pygame
from pygame import *


pygame.init()
screen = pygame.display.set_mode((600, 600))
salir = False
# // Las variables que servian para guardar informacion interna de la clase
line = 0
strings = ['',]
font = pygame.font.Font(None, 28)
dist = 20
ipos_x = 50
ipos_y = 50
# \\

while salir == False:
    events = pygame.event.get()
    for event in events:
        if event.type == QUIT:
            salir = True
   
    # // update de la clase
    for event in events:
        if event.type == KEYDOWN:
            if event.key == K_RETURN:
                strings.append('')
                line += 1
            elif event.key == K_ESCAPE:
                sys.exit()
            elif event.key == K_BACKSPACE:
                if strings[line] == '' and line > 0:
                    strings = strings[0:-1]
                    line -= 1
                else:
                    strings[line] = strings[line][0:-1]
            else:
                strings[line] = str(strings[line] + event.unicode)
    # \\
   
    # // draw de la clase
    print strings
    screen.fill((0, 0, 0))
    for line in range(len(strings)):
        img_line = font.render(strings[line], 1, (255, 255, 255))
        screen.blit(img_line, (ipos_x, ipos_y + dist * line))
    # \\
   
    display.update()

Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona


Volver a General

¿Quién está conectado?

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

cron