From 59fdf0ab04401e43090b64a4086544a5d5ffce17 Mon Sep 17 00:00:00 2001 From: Gabriel Eirea Date: Thu, 13 Jan 2011 14:50:47 +0000 Subject: Added talking logic --- diff --git a/AnimatedSprite.py b/AnimatedSprite.py index 0eaab83..48a5236 100644 --- a/AnimatedSprite.py +++ b/AnimatedSprite.py @@ -49,7 +49,6 @@ class AnimatedSprite(pygame.sprite.Sprite): def render(self, screen): screen.blit(self.image, (self.x, self.y)) -# pygame.draw.rect(screen,(0,0,0),(self.x+15, self.y+38, 38, 38),1) def do_move(self, grid): pass @@ -60,6 +59,13 @@ class AnimatedSprite(pygame.sprite.Sprite): def update_move(self,move): self.move = move + def upper_left_tile(self): + return ( (self.x+34)/50, (self.y+16)/50 ) + + def draw_rect(self, screen): + pygame.draw.rect(screen,(0,0,0),(self.x+15, self.y+38, 38, 38),1) + + if __name__ == "__main__": diff --git a/AnimatedSprite.pyc b/AnimatedSprite.pyc index 75fc1cf..df3ae63 100644 --- a/AnimatedSprite.pyc +++ b/AnimatedSprite.pyc Binary files differ diff --git a/DerechosSprites.py b/DerechosSprites.py index 48f26f8..92e0341 100644 --- a/DerechosSprites.py +++ b/DerechosSprites.py @@ -1,13 +1,15 @@ import pygame import os import random +import math from AnimatedSprite import AnimatedSprite STOP = 0 LEFT = 1 RIGHT = 2 UP = 3 -DOWN =4 +DOWN = 4 +TALKING = 5 class MainSprite(AnimatedSprite): """ @@ -73,6 +75,8 @@ class MainSprite(AnimatedSprite): self.y += 6 - (self.y+84)%50 -1 else: self.y = 900-78 + elif self.move == TALKING: + pass class BoySprite(AnimatedSprite): @@ -175,6 +179,8 @@ class BoySprite(AnimatedSprite): if rn > 98: self.move = random.randint(1,4) self.startup_frame() + elif self.move == TALKING: + pass def startup_frame(self): if self.move == UP: @@ -186,6 +192,19 @@ class BoySprite(AnimatedSprite): elif self.move == RIGHT: self._frame = 24 + def draw_talking_range(self, screen): + pygame.draw.arc(screen, (200, 0, 0), (self.x+9, self.y, 48, 48), + -math.pi/4, math.pi/4, 2) + pygame.draw.arc(screen, (200, 0, 0), (self.x+9, self.y, 48, 48), + math.pi/4*3, math.pi/4*5, 2) + + def draw_talking(self, screen): + pygame.draw.arc(screen, (0, 0, 200), (self.x+9, self.y, 48, 48), + -math.pi/4, math.pi/4, 2) + pygame.draw.arc(screen, (0, 0, 200), (self.x+9, self.y, 48, 48), + math.pi/4*3, math.pi/4*5, 2) + + def draw_grid(grid,screen): for yi in range(18): @@ -218,7 +237,7 @@ if __name__ == "__main__": bg_image = pygame.image.load(os.path.join('images', 'derechos-plaza-fondo.jpg')).convert_alpha() - sps = [0, 1, 0, 2, 0, 1, 0, 3, # up + fms = [0, 1, 0, 2, 0, 1, 0, 3, # up 4, 5, 4, 6, 4, 5, 4, 7, # down 8, 9, 8, 10, 8, 9, 8, 11, # left 15, 13, 15, 14, 15, 13, 15, 12] # right @@ -235,8 +254,8 @@ if __name__ == "__main__": 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - sp = MainSprite(images, sps, nf, dxs, dys, 50, 400, 10) - sp2 = BoySprite(images, sps, nf, dxs, dys, 50, 400, 10) + sp = MainSprite(images, fms, nf, dxs, dys, 30, 370, 10) + sp2 = BoySprite(images, fms, nf, dxs, dys, 150, 470, 10) grid = [[0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1], [0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0], @@ -257,8 +276,9 @@ if __name__ == "__main__": [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1], [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1]] - playing = True + talking_range = False + talking = False while playing: for event in pygame.event.get(): @@ -267,37 +287,85 @@ if __name__ == "__main__": elif event.type == pygame.MOUSEBUTTONDOWN: pass elif event.type == pygame.KEYDOWN: - if event.key == pygame.K_UP: + if event.key == pygame.K_UP and not talking: sp.update_move(UP) sp.update_frame(0) - if event.key == pygame.K_DOWN: + elif event.key == pygame.K_DOWN and not talking: sp.update_move(DOWN) sp.update_frame(8) - if event.key == pygame.K_LEFT: + elif event.key == pygame.K_LEFT and not talking: sp.update_move(LEFT) sp.update_frame(16) - if event.key == pygame.K_RIGHT: + elif event.key == pygame.K_RIGHT and not talking: sp.update_move(RIGHT) sp.update_frame(24) + elif event.key == pygame.K_SPACE and talking_range: + if not talking: + talking = True + sp.update_move(TALKING) + sp2.update_move(TALKING) + print("Talking...") + else: + talking = False + sp.update_move(STOP) + sp2.update_move(STOP) + print("Not talking...") elif event.type == pygame.KEYUP: - if event.key == pygame.K_UP: - sp.update_move(0) - sp.update_frame(0) - if event.key == pygame.K_DOWN: - sp.update_move(0) - sp.update_frame(8) - if event.key == pygame.K_LEFT: - sp.update_move(0) - sp.update_frame(16) - if event.key == pygame.K_RIGHT: - sp.update_move(0) - sp.update_frame(24) + keys_pressed = pygame.key.get_pressed() + if event.key == pygame.K_UP and not talking: + if keys_pressed[pygame.K_LEFT]: + sp.update_move(LEFT) + sp.update_frame(16) + elif keys_pressed[pygame.K_RIGHT]: + sp.update_move(RIGHT) + sp.update_frame(24) + elif keys_pressed[pygame.K_DOWN]: + sp.update_move(DOWN) + sp.update_frame(8) + else: + sp.update_move(0) + sp.update_frame(0) + elif event.key == pygame.K_DOWN and not talking: + if keys_pressed[pygame.K_LEFT]: + sp.update_move(LEFT) + sp.update_frame(16) + elif keys_pressed[pygame.K_RIGHT]: + sp.update_move(RIGHT) + sp.update_frame(24) + elif keys_pressed[pygame.K_UP]: + sp.update_move(UP) + sp.update_frame(0) + else: + sp.update_move(0) + sp.update_frame(8) + elif event.key == pygame.K_LEFT and not talking: + if keys_pressed[pygame.K_UP]: + sp.update_move(UP) + sp.update_frame(0) + elif keys_pressed[pygame.K_DOWN]: + sp.update_move(DOWN) + sp.update_frame(8) + elif keys_pressed[pygame.K_RIGHT]: + sp.update_move(RIGHT) + sp.update_frame(24) + else: + sp.update_move(0) + sp.update_frame(16) + elif event.key == pygame.K_RIGHT and not talking: + if keys_pressed[pygame.K_UP]: + sp.update_move(UP) + sp.update_frame(0) + elif keys_pressed[pygame.K_DOWN]: + sp.update_move(DOWN) + sp.update_frame(8) + elif keys_pressed[pygame.K_LEFT]: + sp.update_move(LEFT) + sp.update_frame(16) + else: + sp.update_move(0) + sp.update_frame(24) -# sp.domove(grid) -# sp2.ai(grid) - screen.blit(bg_image, (0, 0)) - # draw_grid(grid,screen) time_passed = clock.tick(20) @@ -305,8 +373,26 @@ if __name__ == "__main__": sp.update(time_passed, grid) sp2.update(time_passed, grid) - sp.render(screen) - sp2.render(screen) + (ulx, uly) = sp.upper_left_tile() + (ulx2, uly2) = sp2.upper_left_tile() + + if ulx-ulx2 >= -1 and ulx-ulx2 <=1 \ + and uly-uly2 >= -1 and uly-uly2<=1: + talking_range = True + else: + talking_range = False + + if sp.y < sp2.y: + sp.render(screen) + sp2.render(screen) + else: + sp2.render(screen) + sp.render(screen) + + if talking_range and not talking: + sp2.draw_talking_range(screen) + elif talking: + sp2.draw_talking(screen) pygame.display.flip() -- cgit v0.9.1