# -*- coding: latin-1 -*-
#Este juego instancia algunas ideas de las previas entradas de este blog.
#Se supone que el juego consiste en atrapar letras vocales, deambulando
#no tan libremente con un carrito dentro de un laberinto.
#El video de la ejecución (lo siento, sin editar), está en
#https://youtu.be/BOvuFYqT-sA
import pygame,os,time,random
from pygame.locals import *
H=480
W=640
fgrid=open('grid04.txt','rw')
eve=[]
for line in fgrid:
line=filter(lambda x: x!='\n',line)
eve.append(line)
l=[]
j=0
s=0
for i in eve:
# [k for k in i if k=='1']
s=0
for m in i:
l.append((j,s,m))
s=s+1
j=j+1
class Player(pygame.sprite.Sprite):
speed = 2
bounce = 24
images = []
frame, i= 0, 0
animcycle=12
posx, posy=41, 41
change_x, change_y=41, 41
#Ejemplo de vector patrón de movimiento
# boun1=[H/150,-H/150,0,0,0]
# boun2=[H/140,-H/150,0,0,0]
# boun3=[H/170,-H/170,0,0,0]
boun1=[0,0,0,0,0]
boun2=[0,0,0,0,0]
boun3=[0,0,0,0,0]
def __init__(self):
pygame.sprite.Sprite.__init__(self,self.containers)
self.image=self.images[0]
self.rect = self.image.get_rect()
self.facing=-1
self.origtopx=self.rect.top+41
self.origtopy=self.rect.left+41
def move(self,horver,direction):
tempo=15
self.rect = self.rect.clamp((0,0,640,480))
if horver==1:
if direction==-1:
self.i=self.i+1
if self.i % tempo==1:
self.image=self.images[0]
else:
self.image=self.images[4] #img5
self.facing=-1#self.facing
#Ejemplo de dilación y saltos...
self.rect.top=self.rect.top-self.boun1[self.i%5]
self.rect.move_ip(direction*self.speed,0)
if direction==1:
self.i=self.i+1
if self.i % tempo==1:
self.image=self.images[1]
else:
self.image=self.images[5] #img5
self.facing=1#-self.facing
# self.image=self.images[0]
self.rect.top=self.rect.top-self.boun2[self.i%5]
self.rect.move_ip(direction*self.speed,0)
if horver==-1:
if direction==-1:
self.i=self.i+1
if self.i % tempo==1:
self.image=self.images[2]
else:
self.image=self.images[6] #img5
self.rect.move_ip(0,direction*self.speed)
if direction==1:
self.i=self.i+1
if self.i % tempo==1:
self.image=self.images[3]
else:
self.image=self.images[7] #img5
self.rect.move_ip(0,direction*self.speed)
if horver==2: #To say...
self.rect.move_ip(direction*self.speed,direction*self.speed)
self.change_x=self.rect.left
self.change_y=self.rect.top
class Wall(pygame.sprite.Sprite):
def __init__(self,x,y,height,width):
pygame.sprite.Sprite.__init__(self,self.containers)
brickImgTmp=pygame.image.load('./DataImgs/brick.png')
brickImg=pygame.transform.scale(brickImgTmp,(height,width))
self.image = brickImg
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
class Wall2(pygame.sprite.Sprite):
def __init__(self,x,y,height,width,vowel):
pygame.sprite.Sprite.__init__(self,self.containers)
if vowel=='a':
brickImgTmp=pygame.image.load('./DataImgs/brickaGreen.png')
elif vowel=='e':
brickImgTmp=pygame.image.load('./DataImgs/bricke.png')
elif vowel=='i':
brickImgTmp=pygame.image.load('./DataImgs/bricki.png')
elif vowel=='o':
brickImgTmp=pygame.image.load('./DataImgs/brickoRed.png')
elif vowel=='u':
brickImgTmp=pygame.image.load('./DataImgs/brickuBlue.png')
brickImg=pygame.transform.scale(brickImgTmp,(height,width))
self.image = brickImg
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
def update(self):
r=random.randint(1,20)
if r==19:
self.rect.move_ip(0,1)
def game():
pygame.init()
clock=pygame.time.Clock()
disp=pygame.display.set_mode((640,480),0,32)
background= pygame.Surface((640,480))
imgTmp=pygame.image.load('./DataImgs/spriteCamioneta.png').convert_alpha()
img2Tmp=pygame.image.load('./DataImgs/spriteCamioneta2.png').convert_alpha()
img=pygame.transform.scale(imgTmp,(W/20,H/20))
img5=pygame.transform.scale(img2Tmp,(W/20,H/20))
img2 = pygame.transform.flip(img,1,0)
img3 = pygame.transform.rotate(img,-90)
img4 = pygame.transform.rotate(img,90)
img6 = pygame.transform.flip(img5,1,0)
img7 = pygame.transform.rotate(img5,-90)
img8 = pygame.transform.rotate(img5,90)
Player.images=[img,img2,img3,img4,img5,img6,img7,img8]
every = pygame.sprite.OrderedUpdates()
walls=pygame.sprite.Group()
# wall2s=pygame.sprite.Group()
Wall.containers=walls,every
wall2s=pygame.sprite.Group()
Wall2.containers=wall2s,every
Player.containers=every
player=Player()
final=pygame.Rect(80,40,40,40)
wall_list=[]
wall2_list=[]
emptyList=[]
for t in l:
if t[2]=='1':
wall_list.append(Wall(t[1]*40,t[0]*40,40,40))
elif t[2]=='2':
wall2_list.append(Wall2(t[1]*40,t[0]*40,40,40,'o'))
else:
emptyList.append(t)
print emptyList
wall3_list=[]
for t in emptyList:
wall3_list.append(Wall2(t[1]*40,t[0]*40,40,40,random.choice("aeiou")))
# wall2s=wall2_list
while True:
old_x=player.rect.topleft[0]
old_y=player.rect.topleft[1]
if final.contains(player): Wall2(80,120,40,40,'e')
# pygame.draw.rect(disp,Color('white'),(
# disp.blit(disp,final)
# Current coordinates (player):
for event in pygame.event.get():
if event.type==QUIT or \
(event.type==KEYDOWN and event.key==K_ESCAPE):
return
keystate=pygame.key.get_pressed()
if keystate[K_RIGHT]:
player.move(1,1)
if keystate[K_LEFT]:
player.move(1,-1)
if keystate[K_UP]:
player.move(-1,-1)
if keystate[K_DOWN]:
player.move(-1,1)
new_x=player.change_x
new_y=player.change_y
FACING=player.facing
# Put the player in the new spot
player.rect.topleft = (new_x,new_y)
# Did this update cause us to hit a wall?
collide = pygame.sprite.spritecollide(player, wall_list, False)
if collide:
# Whoops, hit a wall. Go back to the old position
player.rect.topleft=(old_x,old_y)
collide1 = pygame.sprite.spritecollide(player, wall2s, True)
if collide1: pass
# Whoops, hit a wall. Go back to the old position
# player.rect.topleft=(old_x,old_y)
every.clear(disp,background)
every.update()
dirty=every.draw(disp)
pygame.display.update(dirty)
clock.tick(40)
pygame.quit()
fgrid.close()
game()
No hay comentarios:
Publicar un comentario