【发布时间】:2017-04-08 03:00:52
【问题描述】:
import pygame
from pygame.locals import *
import os
import sys
#----------------------------------------------------------------------------------------------------------
ancho = 768
largo = 480
direccion = "imagenes"
vidas = 3
#----------------------------------------------------------------------------------------------------------
def cargar_img(nombre, direccion, alpha=False):
ruta = os.path.join(direccion, nombre)
try:
image = pygame.image.load(ruta)
except:
print("Error al cargar la Imagen, compruebe la ruta")
sys.exit(1)
if alpha is True:
image = image.convert_alpha()
else:
image = image.convert()
return image
#----------------------------------------------------------------------------------------------------------
class Pelota(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = cargar_img("bola.png", direccion, alpha=True)
self.rect = self.image.get_rect()
self.rect.centerx = ancho/2
self.rect.centery = largo/2
self.speed = [6,6]
def refrescar(self):
if self.rect.left < 0 or self.rect.right > ancho:
self.speed[0] = -self.speed[0]
if self.rect.top < 0 :
self.speed[1] = -self.speed[1]
if self.rect.bottom > largo :
self.rect.centerx = ancho/2
self.rect.centery = largo/2
global vidas
vidas = vidas -1
self.rect.move_ip((self.speed[0], self.speed[1]))
def colision(self, objeto):
if self.rect.colliderect(objeto.rect):
self.speed[1] = -self.speed[1]
#----------------------------------------------------------------------------------------------------------
class Barra(pygame.sprite.Sprite):
def __init__(self, y):
pygame.sprite.Sprite.__init__(self)
self.image = cargar_img("paleta.png", direccion, alpha = True)
self.rect = self.image.get_rect()
self.rect.centerx = 384
self.rect.centery = 460
def control(self):
if self.rect.right >= ancho:
self.rect.right = ancho
elif self.rect.left <= 0:
self.rect.left = 0
#--------------------------------------------------------------------------------------------------------
class Bloque(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = cargar_img("ladrillo.png", direccion, alpha = True)
self.rect = self.image.get_rect()
#----------------------------------------------------------------------------------------------------------
def main():
pygame.init()
pantalla = pygame.display.set_mode ((ancho, largo))
pygame.display.set_caption("Breakout")
#----------------------------------------------------------------------------------------------------------
fondo = cargar_img("fondo.jpg", direccion, alpha = False)
bola = Pelota()
barra= Barra(25)
ladrillo = Bloque()
reloj = pygame.time.Clock()
pygame.key.set_repeat(1,20)
#----------------------------------------------------------------------------------------------------------
while True:
reloj.tick(60)
bola.refrescar()
bola.colision(barra)
bola.colision(ladrillo)
barra.control()
#----------------------------------------------------------------------------------------------------------
pantalla.blit(fondo,(0,0))
pantalla.blit(bola.image, bola.rect)
pantalla.blit(barra.image, barra.rect)
pantalla.blit(ladrillo.image, ladrillo.rect)
pygame.display.flip()
#----------------------------------------------------------------------------------------------------------
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit(0)
elif event.type == pygame.KEYDOWN:
if event.key == K_LEFT:
barra.rect.centerx -= 20
elif event.key == K_RIGHT:
barra.rect.centerx += 20
elif event.key == K_ESCAPE:
sys.exit(0)
elif event.type == pygame.KEYUP:
if event.key == K_RIGHT:
barra.rect.centerx += 0
elif event.key == K_LEFT:
barra.rect.centerx += 0
#----------------------------------------------------------------------------------------------------------
if __name__ == "__main__":
main()
【问题讨论】:
-
描述问题(有问题,不在评论中)
-
用积木创建列表。绘制
while True中的每一块砖,检查每块砖的碰撞等。您可以使用pygame.sprite.Group()来保留砖块,轻松检查碰撞并轻松绘制它们。 -
你能给我举个例子吗?