sábado, 17 de octubre de 2015

Variación rara del gato en carro (II)


# -*- 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