Posición aleatoria de un Sprite

Solicite, consulte o publique recursos de referencia para desarrolladores.

Posición aleatoria de un Sprite

Notapor Krakatoa » Dom Nov 21, 2010 9:38 am

Retomando Pygame:

Estoy intentando crear un sprite que aparezca cada vez en una posición aleatoria dentro de la ventana.
El sprite que debe aparecer en una posición aleatoria cada vez, es el objetivo (también el enemigo, pero eso mas adelante, "cuando sepa usar random").
He estado leyendo un poco de random, pero no sé exactamente como usarlo.
Es un juego basado en squarez, que consiste en recoger el mayor numero de "objetivos" (corazones sanos), sin ser alcanzado por los "enemigos" (corazones heridos) que se mueven de izquierda a derecha y de arriba a abajo a una velocidad constante entre tres velocidades. Cada vez que se coja un objetivo, tiene que aparecer un enemigo nuevo en una posición aleatoria, y a una velocidad también aleatoria entre 1 y 3 (pero eso ya lo iré viendo).

Código: Seleccionar todo
# -*- coding: utf-8 -*-
import pygame, random
from pygame.locals import *
from pygame.sprite import Sprite

width = 800
height = 600

# Clase Jugador
class Fantasma(pygame.sprite.Sprite):

    def __init__(self):
        self.image = pygame.image.load("boo1.png").convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.move_ip(200, 300)

    def update(self):
        teclas = pygame.key.get_pressed()
   if self.rect.left >=1:
           if teclas[K_LEFT]:
          self.rect.x -= 3
        if self.rect.right <=width:
      if teclas[K_RIGHT]:
          self.rect.x += 3
   if self.rect.top >= 1:
           if teclas[K_UP]:
          self.rect.y -= 3
   if self.rect.bottom <= height:
           if teclas[K_DOWN]:
          self.rect.y += 3
         
#Clase Objetivo
class Objetivo (pygame.sprite.Sprite):
    speed = 13

    def __init__(self):
   self.image = pygame.image.load("c1.png").convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.move_ip(300, 200)

         
         
if __name__ == '__main__':
    salir = False

    #ventana
    screen = pygame.display.set_mode((width, height))
    pygame.display.set_caption("CazAmoR")
    fondo = pygame.image.load("fa.jpg").convert()


    #objetos
    fantasma = Fantasma()
    objetivo = Objetivo()
    while not salir:
        fantasma.update()

        #actualizacion
        screen.blit(fondo, (0, 0))
        screen.blit(fantasma.image, fantasma.rect)
   screen.blit(objetivo.image, objetivo.rect)
   pygame.display.flip()

       
        #eventos
        for evento in pygame.event.get():
            if evento.type == pygame.QUIT:
                salir = True
      


¿Cómo uso random en este caso?


También tengo la clase enemigo, que empieza así, debería aparecer el primero, al recoger el primer objetivo (pero eso ya lo iré viendo).

Código: Seleccionar todo
# Clase Enemigo
class Enemigo(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('cb1.png').convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2.0
        self.rect.centery = HEIGHT / 2.7
        self.speed = [0.2, -0.2]

   def update(self, time):
       self.rect.centerx += self.speed[0] * time
#        self.rect.centery += self.speed[1] * time
        if self.rect.left <= 0 or self.rect.right >= WIDTH:
            self.speed[0] = -self.speed[0]
            self.rect.centerx += self.speed[0] * time
        if self.rect.top <= 0 or self.rect.bottom >= HEIGHT:
            self.speed[0] = -self.speed[1]
            self.rect.centery += self.speed[1] * time




Esto es casi todo lo que tengo de código, ¿está bien?

Para haceros una idea os dejo una imagen:

Imagen

Esto es un esquema mental en modo gráfico... ;-P

Saludos

Pd: Esto lo hago a modo entretenimiento... no pretendo programar a nivel profesional.


Pd1: Me acabo de dar cuenta, que no está en el hilo correcto, muévanlo si es necesario, y disculpen las molestias.
"El talento es algo corriente. No escasea la inteligencia, sino la constancia."
Avatar de Usuario
Krakatoa
 
Mensajes: 20
Registrado: Lun Sep 29, 2008 5:33 pm

Re: Posición aleatoria de un Sprite

Notapor hugoruscitti » Dom Nov 21, 2010 2:41 pm

Buenas, para usar numeros aleatorios simplemente tendrias
que importar el modulo random, y luego pedirle un numero
cualquiera entre 0 y el ancho de la pantalla.

Por ejemplo:

Código: Seleccionar todo
import random

random.randint(0, 640)


Es decir, en el caso que nos cuentas, me parece
que tendrias que agregar random en la clase enemigo:

Código: Seleccionar todo
self.rect.centerx = random.randint(0, WIDTH)
self.rect.centery = random.randint(0, HEIGHT)


Por cierto, no te animarias a hacer la version para pilas? puedo ayudarte.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Posición aleatoria de un Sprite

Notapor Krakatoa » Dom Nov 21, 2010 3:10 pm

Gracias Hugo, ahora lo probaré.

¿A qué te refieres con la versión para pilas?. Si está al alcance de mis conocimientos... ¿por qué no?

Pd: Empiezo ahora con python y pygame.

Saludos y gracias de nuevo.
"El talento es algo corriente. No escasea la inteligencia, sino la constancia."
Avatar de Usuario
Krakatoa
 
Mensajes: 20
Registrado: Lun Sep 29, 2008 5:33 pm

Re: Posición aleatoria de un Sprite

Notapor Krakatoa » Dom Nov 21, 2010 10:44 pm

Ok..

Acabo de descargar tu ejemplo de plataformas...

Dime si es correcto así, por favor, necesito un mapa mental. Crearé cuatro pilas,con:

Fondo con: Imagen
Personaje con: Imagen, ubicación, movimiento, colisiones.
Objetivo con: Imagen, ubicación aleatoria, colisiones.
Enemigos con:, Imagen, ubicación aleatoria, movimiento, colisiones.

Gracias
"El talento es algo corriente. No escasea la inteligencia, sino la constancia."
Avatar de Usuario
Krakatoa
 
Mensajes: 20
Registrado: Lun Sep 29, 2008 5:33 pm

Re: Posición aleatoria de un Sprite

Notapor hugoruscitti » Dom Nov 21, 2010 10:58 pm

Krakatoa escribió:¿A qué te refieres con la versión para pilas?. Si está al alcance de mis conocimientos... ¿por qué no?


Buenas, Pilas es un motor para hacer juegos que estamos
escribiendo varios integrantes del foro de losersjuegos, internamente
usamos mucho de pygame y otras bibliotecas.

Tienes mucha info de pilas en su web:

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

y en el subforo de pilas, aqui mismo en losersjuegos:

viewforum.php?f=21

Como estamos trabajando mucho en pilas, nos gustaria un monton
que tu juego nos de un impulso... por eso te comentaba...

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

Re: Posición aleatoria de un Sprite

Notapor Krakatoa » Lun Nov 22, 2010 10:56 am

Por supuesto, repartamos la idea, y lo poco que tenemos con Licencia GNU, ;-D, y aunque yo no estoy a la altura que colabore quien quiera.

Aquí dejo el material

Mi idea principal es esta:

Imagen

Pero se aceptan sugerencias... ;-P

Y esto sería un ejemplo de como funcionarían los enemigos:

Video

¿Qué te parece la idea?

Saludos.
"El talento es algo corriente. No escasea la inteligencia, sino la constancia."
Avatar de Usuario
Krakatoa
 
Mensajes: 20
Registrado: Lun Sep 29, 2008 5:33 pm

Re: Posición aleatoria de un Sprite

Notapor hugoruscitti » Lun Nov 22, 2010 8:02 pm

Buenisimo, me parece muy buena la idea del juego, además
al estar explicado con una imagen queda mucho mas
claro el objetivo de juego.

Para mostrar como sería implementar una versión del
juego usando pilas grabé un video donde realicé
varias pruebas:

http://www.youtube.com/watch?v=eItKBsixpxk

(Te recomiendo ver video directamente desde
el sitio de Youtube, porque aqui se ve mas pequeño)



Como se puede ver en el video, escribir el juego
en pilas es bastante divertido e interactivo. En la
única parte donde se pone un poquito difícil es en
el momento de crear clases para representar a los
objetos en movimiento. Aunque viendo tu código
de pygame, yo creo que no va a ser difícil para tí, se
ve que dominas las clases de python.

Por último, si te gusta la idea de investigar algo
mas de pilas contá conmigo como colaborador para
el desarrollo.

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

Re: Posición aleatoria de un Sprite

Notapor Krakatoa » Lun Nov 22, 2010 9:09 pm

¡¡Enorme!!... gran trabajo.

Voy a actualizar mi lenny para pilas, y voy probar a ver que sale... ;-P

Gracias por todo Hugo.

Saludos
"El talento es algo corriente. No escasea la inteligencia, sino la constancia."
Avatar de Usuario
Krakatoa
 
Mensajes: 20
Registrado: Lun Sep 29, 2008 5:33 pm

Re: Posición aleatoria de un Sprite

Notapor Krakatoa » Mié Nov 24, 2010 8:19 pm

Ya he instalado pilas, voy hacer unas pruebas... a ver que pasa.

Por cierto, ¿que IDE usas para python?, he visto que tiene autocompletado, y parece bastante liviano... ¡¡Me gusta!!

Saludos y gracias.
"El talento es algo corriente. No escasea la inteligencia, sino la constancia."
Avatar de Usuario
Krakatoa
 
Mensajes: 20
Registrado: Lun Sep 29, 2008 5:33 pm

Re: Posición aleatoria de un Sprite

Notapor kaiser » Mié Nov 24, 2010 11:49 pm

Yo diría que es IDLE. En Windows se te instala por defecto cuando instalas Python, pero en Linux a lo mejor te lo tienes que bajar manualmente. En cualquier caso existe un plug-in para Eclipse llamado PyDev. Eclipse es un IDE muy potente que tal vez resulte más adecuado para manejar proyectos grandes como Pilas ya que incorpora multitud de herramientas (incluido un gestor de proyectos) y es compatible con muchos lenguajes, lo que puede ser útil para trabajar a la vez con la versión python y C++ de Pilas.

Un saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: Posición aleatoria de un Sprite

Notapor hugoruscitti » Jue Nov 25, 2010 5:31 pm

kaiser escribió:Yo diría que es IDLE. En Windows se te instala por defecto cuando instalas Python, pero en Linux a lo mejor te lo tienes que bajar manualmente. En cualquier caso existe un plug-in para Eclipse llamado PyDev. Eclipse es un IDE muy potente que tal vez resulte más adecuado para manejar proyectos grandes como Pilas ya que incorpora multitud de herramientas (incluido un gestor de proyectos) y es compatible con muchos lenguajes, lo que puede ser útil para trabajar a la vez con la versión python y C++ de Pilas.

Un saludo!


IDLE es bastante bueno, aunque me gustaria recomendarte un IDE nuevo llamado Ninja IDE:

http://code.google.com/p/ninja-ide/

Lo uso con frecuencia y esta creciendo un monton...
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Posición aleatoria de un Sprite

Notapor kaiser » Vie Nov 26, 2010 12:43 am

Le he estado echando un vistazo y tiene muuuy buena pinta, además me motiva bastante el nombre xD. Me recuerda bastante a Eclipse pero con la ventaja de estar escrito en python (ventaja para los que somos "fanboys" de ese lenguaje xD) sin embargo se echa de menos un debugger ¿no? al menos no lo he visto entre las características ni en el vídeo y creo que es una herramienta fundamental en el desarrollo de software.
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: Posición aleatoria de un Sprite

Notapor Juanxo » Vie Nov 26, 2010 11:30 am

no estoy mu puesto, pero creo que no hay muchos debuggers (y menos gratis) para la mayoría de los lenguajes de script... Yo creo que tiene que ser bastante complicado crear depuradores para programas en los que todo vale
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Posición aleatoria de un Sprite

Notapor kaiser » Vie Nov 26, 2010 11:49 am

PyDev adapta el debugger de Eclipse para poder usarlo con python y hasta donde yo se funciona bastante bien, IDLE también incluye su propio intento de debugger que al menos permite pausar el código en puntos críticos de la ejecución y observar el valor de las variables que al final es para lo que más se utiliza el debugger, para poder correr el código poco a poco observando como evoluciona y así encontrar en que punto se produce el error.

Un saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: Posición aleatoria de un Sprite

Notapor shackra » Sab Ene 01, 2011 7:59 pm

hugoruscitti escribió:IDLE es bastante bueno, aunque me gustaria recomendarte un IDE nuevo llamado Ninja IDE:

http://code.google.com/p/ninja-ide/

Lo uso con frecuencia y esta creciendo un monton...


ahora sere un ferdiente usuario de Ninja-IDE xD, antes programa en Gedit! D: glol

EDITADO: sip, sere un ferdiente defensor y usuario de esta IDE xD comense a escribir codigo de python al azar y el trabajo que realiza lo hace y muy bien, ademas, en la pagina de inicio muestra un ninja muy divertido y eso me gusta <3 xD
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica


Volver a Artículos, traducciones y documentación

¿Quién está conectado?

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