Exemplo n.º 1
0
    def __init__(self, game, x, y, hp):
        self.groups = game.enemy_list, game.sprite_list
        pg.sprite.Sprite.__init__(self, self.groups)
        self.layer = ENEMY_LAYER

        self.game = game
        self.rot = random.randint(0, 360)
        self.image = pg.transform.rotate(self.game.enemy_img, self.rot)
        self.rect = self.image.get_rect()
        self.width = self.rect.width

        self.pos = vec(x, y)
        self.vel = vec(0, 0)
        self.acc = vec(0, 0)

        self.avoid_wall = vec(0, 0)
        self.avoid_enemy = vec(0, 0)
        self.hp = hp
        self.chase = False
        self.speed = ENEMY_SPEED

        self.damage = ENEMY_DAMAGE
        self.hitbox = ENEMY_HITBOX
        self.hitbox.center = self.pos

        self.wait_count = 0
        self.animation = self.game.enemy_idle
        self.animation_count = 0
Exemplo n.º 2
0
 def __init__(self, pos, damage):
     super().__init__()
     self.rect = pg.Rect(0, 0, 5, 5)
     self.rect.center = pos
     self.speed = 20
     self.damage = damage
     self.pos = vec()
     self.pos.xy = pos
     self.vel = vec()
     self.vel.xy = 0, 0
     self.target_sprite = None
Exemplo n.º 3
0
 def remove_enemy(cls, index, enemies, enemies_start_pos):
     # reposition for enemyes
     enemies[index].grid_pos = vec(enemies_start_pos[index])
     # form grid to pixel
     enemies[index].pix_pos = enemies[index].from_grid_to_pix_pos(
         enemies[index].grid_pos)
     enemies[index].direction = NEUTRAL
    def __init__(self, width=400, height=300):
        self.width = width
        self.height = height
        self.cap = cv.VideoCapture()
        self.cap.open(0)
        self.frame = None
        pygame.init()
        self.screen = pygame.display.set_mode((width, height))
        self.clock = pygame.time.Clock()
        self.player = Player(vec(self.width // 2, self.height - 20))
        self.ball = Ball(vec(self.width // 2 - 25, self.height // 2), 10.)
        self.bricks = self.generate_bricks()

        self.key_down = {}
        self.state = None
        self.set_state("standby")
Exemplo n.º 5
0
 def __init__(self, x, y, height, width):
     self.x, self.y = x, y
     # no image to draw, just used for rect dimensions
     self.rect = Rect(x, y + height, width, height)
     self.rect.x = x
     self.rect.y = y
     self.origin = vec(self.x, self.y)
Exemplo n.º 6
0
 def update_vel(self):
     # Update the velocity and position
     target = vec()
     target.xy = self.target_sprite.rect.center
     desired = (target - self.pos)
     desired.normalize_ip()
     desired *= self.speed
     self.vel = desired
Exemplo n.º 7
0
 def remove_life(self, player, player_start_pos, enemies,
                 enemies_start_pos):
     player.lives -= 1
     if (player.lives == 0):
         return "game over"
     else:
         player.grid_pos = vec(player_start_pos)
         # form grid to pixel
         player.pix_pos = player.from_grid_to_pix_pos(player.grid_pos)
         player.direction = NEUTRAL
         #reposition for enemyes
         for index, enemy in enumerate(enemies):
             enemy.grid_pos = vec(enemies_start_pos[index])
             # form grid to pixel
             enemy.pix_pos = enemy.from_grid_to_pix_pos(enemy.grid_pos)
             enemy.direction = NEUTRAL
         return 'playing'
Exemplo n.º 8
0
 def reset(self, player, enemies, player_start_pos, enemies_start_pos,
           screen):
     player.lives = 3
     player.current_score = 0
     player.grid_pos = vec(player_start_pos)
     # form grid to pixel
     player.pix_pos = player.from_grid_to_pix_pos(player.grid_pos)
     player.direction = NEUTRAL
     for index, enemy in enumerate(enemies):
         enemy.grid_pos = vec(enemies_start_pos[index])
         # form grid to pixel
         enemy.pix_pos = enemy.from_grid_to_pix_pos(enemy.grid_pos)
         enemy.direction = NEUTRAL
     self.coins = []
     # redraws coins
     _, coins, biscuits, _, _ = Utils.read_layout(screen)
     state = 'playing'
     return state, coins, biscuits
Exemplo n.º 9
0
    def move(self, vx, vy):
        self.vel = vec(vx, vy)
        self.pos += self.vel * self.game.dt

        ##undo if results in a wall collision
        if (self.wall_collision()):
            self.pos -= self.vel * self.game.dt

        self.rect.center = self.pos
        self.hitbox.center = self.pos
Exemplo n.º 10
0
    def __init__(self, game, x, y):
        self.groups = game.sprite_list
        pg.sprite.Sprite.__init__(self, self.groups)
        self.layer = WALL_LAYER

        self.game = game
        self.image = self.game.floor_img
        self.rect = self.image.get_rect()

        self.pos = vec(x + TILE_SIZE / 2, y + TILE_SIZE / 2)
        self.rect.center = self.pos
Exemplo n.º 11
0
    def __init__(self, game, x, y, angle):
        self.groups = game.bullet_list, game.sprite_list
        pg.sprite.Sprite.__init__(self, self.groups)
        self.layer = BULLET_LAYER

        self.game = game
        self.angle = angle
        self.image = pg.Surface([4, 4])
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.speed_magnitude = BULLET_SPEED
        self.damage = BULLET_DAMAGE

        self.pos = vec(x, y)
        self.orig_pos = vec(x, y)
        self.rect.center = self.pos

        self.vel = vec(self.speed_magnitude * cos(self.angle),
                       self.speed_magnitude * sin(self.angle))
        self.vel.normalize()
        self.vel *= BULLET_SPEED
Exemplo n.º 12
0
    def move(self):
        self.rot = (self.game.player.pos - self.pos).angle_to(vec(1, 0))
        self.image = pg.transform.rotate(self.animation[self.animation_count],
                                         self.rot)
        self.rect = self.image.get_rect()

        self.acc = vec(1, 0).rotate(-self.rot)
        self.avoid_enemies()
        self.avoid_walls()
        if self.acc.length() > 0:
            self.acc.scale_to_length(self.speed)
        self.acc -= 2 * self.vel
        self.vel += self.acc * self.game.dt
        self.pos += self.vel * self.game.dt + 0.5 * self.acc * self.game.dt**2

        if (self.wall_collision()):
            self.pos -= self.vel * self.game.dt + 0.5 * self.acc * self.game.dt**2
            self.vel *= -WALL_BOUNCE

        self.rect.center = self.pos
        self.hitbox.center = self.pos
Exemplo n.º 13
0
    def __init__(self, game, x, y, list):
        self.groups = game.sprite_list
        pg.sprite.Sprite.__init__(self, self.groups)

        self.game = game
        self.pos = vec(x, y)
        self.list = list

        self.image = self.list[0]
        self.rect = self.image.get_rect()
        self.rect.center = self.pos
        self.current = 0
Exemplo n.º 14
0
    def __init__(self, game, x, y):
        self.groups = game.sprite_list
        pg.sprite.Sprite.__init__(self, self.groups)
        self.layer = PLAYER_LAYER

        self.pos = vec(x, y)
        self.vel = vec(0, 0)
        self.rot = 0

        self.game = game
        self.image = self.game.player_img
        self.rect = self.image.get_rect()
        self.width = self.rect.width
        self.game = game
        self.rect.center = self.pos

        self.hitbox = PLAYER_HITBOX
        self.hp = PLAYER_HP
        self.hitbox.center = self.pos

        self.hit_vel = vec(0, 0)
        self.hit_count = 0
        self.hit = False
Exemplo n.º 15
0
 def read_layout(self, background):
     walls = []
     coins = []
     biscuits = []
     enemies_start_pos = []
     with open('../media/wall.txt', 'r') as file:
         for height, line in enumerate(file):
             for width, char in enumerate(line):
                 if char == '1':
                     walls.append(vec(width, height))
                 elif char == 'C':
                     coins.append(vec(width, height))
                 elif char == 'P':
                     player_start_pos = [width, height]
                 elif char == 'R':
                     biscuits.append(vec(width, height))
                 elif char in ['2', '3', '4', '5']:
                     enemies_start_pos.append([width, height])
                 elif char == 'B':
                     pygame.draw.rect(
                         background, BLACK,
                         (width * CELL_W, height * CELL_H, CELL_W, CELL_H))
     return walls, coins, biscuits, player_start_pos, enemies_start_pos
Exemplo n.º 16
0
    def __init__(self, game, x, y, rate, cap, range, hp, delay):
        self.groups = game.spawner_list, game.sprite_list
        pg.sprite.Sprite.__init__(self, self.groups)
        self.layer = WALL_LAYER
        self.game = game

        self.pos = vec(x, y + TILE_SIZE)

        self.image = self.game.spawner_img
        self.rect = self.image.get_rect()
        self.rect.bottomleft = self.pos
        self.width = self.rect.width
        self.hitbox = SPAWNER_HITBOX
        self.hitbox.center = self.rect.center

        self.rate = rate  ##how many seconds to pass between spawns
        self.count = 0
        self.cap = cap  #zombies per spawn
        self.range = range  ##radius of eligible spawn locations
        self.delay = delay  ##ticks to wait until first spawn

        self.hp = hp
Exemplo n.º 17
0
    def spawn_enemies(self):
        self.enemies_spawned = 0

        num_tries = 0
        while (self.enemies_spawned < self.cap):
            r1 = random.randint(-self.range, self.range)
            r2 = random.randint(-self.range, self.range)
            spawn_pos = vec(r1, r2) + self.rect.center

            too_close = False
            for sprite in self.game.sprite_list:
                dist = spawn_pos - sprite.pos
                if abs(dist.length()) < SPAWNER_BUFFER:
                    too_close = True
                    break
            if not too_close:
                enemy = Enemy(self.game, (spawn_pos[0]), (spawn_pos[1]),
                              ENEMY_HP)
                self.enemies_spawned += 1

            num_tries += 1
            if num_tries > SPAWN_ATTEMPTS:
                break
 def __init__(self, ball):
     super().__init__(vec(ball.rect.center), ball.r)
 def __init__(self, pos, r):
     self.r = r
     self.rect = pygame.Rect(pos.elementwise() - r, (r * 2, r * 2))
     self.vel = vec(0, -BALL_SPEED)
Exemplo n.º 20
0
 def from_grid_to_pix_pos(self, grid_pos):
     return vec(((grid_pos.x-1)%CELL_W)*CELL_W + TOP_BOTTOM_BUFFER+CELL_W //4,
                ((grid_pos.y-1)%CELL_H)*CELL_H + TOP_BOTTOM_BUFFER+CELL_H //4)