Beispiel #1
0
    def __init__(self, tile, source, game):
        super(Character, self).__init__(source=source, pos=(Tile.get_tile(tile).x, Tile.get_tile(tile).y))
        self.speed_x, self.speed_y = CHAR_SPEED_X, CHAR_SPEED_Y
        self.deacc = CHAR_DEACCELERATION
        self.velocity_x = 0
        self.velocity_y = 0
        self.tile = tile
        self.game = game
        self.moving = False

        self.game.add_widget(self)
Beispiel #2
0
    def move(self, direction):

        if direction == 12:
            tile_difference = Tile.V
            speed = self.speed_y
        elif direction == 3:
            tile_difference = Tile.H
            speed = self.speed_x
        elif direction == 6:
            tile_difference = -Tile.V
            speed = -self.speed_y
        elif direction == 9:
            tile_difference = -Tile.H
            speed = -self.speed_x
        else:
            raise ValueError("Incorrect direction in Box.move()")

        target_tile = Tile.get_tile(self.tile + tile_difference)

        if target_tile.walkable:

            for box in self.game.boxes:
                if box.tile == self.tile + tile_difference:
                    return False

            if direction in (6, 12): self.velocity_y = speed
            if direction in (9, 3): self.velocity_x = speed

            self.tile += tile_difference
            return True

        return False
Beispiel #3
0
    def get_surrounding_tiles(base_node):
        
        array =(
            (base_node.number + N),
            (base_node.number + NE),
            (base_node.number + E),
            (base_node.number + SE),
            (base_node.number + S),
            (base_node.number + SW),
            (base_node.number + W),
            (base_node.number + NW),
            )

        tiles = []

        onn = base_node.number 
        diagonals = [onn + NE, onn + NW, onn + SE, onn + SW]

        for tile_number in array:

            surrounding_tile = Tile.get_tile(tile_number)
            
            if tile_number not in range(1, Tile.total_tiles + 1):
                continue

            if surrounding_tile.walkable and surrounding_tile not in closed_list:
                # tiles.append(surrounding_tile) # Diagonal movement
                tiles = blocky(tiles, diagonals, surrounding_tile)

        return tiles
Beispiel #4
0
    def __init__(self, level):
        super(Game, self).__init__()
        self.level = Level.load_level(level)
        self.background = Sprite(source='img/background.PNG')
        self.size = self.background.size
        self.player = None
        self.boxes = []

        # Initiate the game by creating tiles
        Tile.make_tiles(self.size, self.level)

        # Add bg widget first to not cover other sprites
        self.add_widget(self.background)

        # Add proper widgets for every non-empty tile in the Tile.List
        for tile in Tile.List:
            if tile.type != 'empty':
                if Tile.get_tile(tile.number - Tile.V).walkable:
                    self.add_widget(Sprite(
                        source=Tile.image_files[tile.type],
                        pos=(tile.x, tile.y)), index=2)
                else:
                    self.add_widget(Sprite(
                        source=Tile.image_files[tile.type + '_edge'],
                        pos=(tile.x, tile.y - SPRITE_EDGE_OFFSET)))

        for tile in self.level.boxspawn:
            self.boxes.append(Box(tile, self))

        self.player = Player(self.level.playerspawn, self)

        self.fps_lab = Label(
            text='FPS: ' + str(Clock.get_rfps()),
            pos=(2, self.height - 110),
            font_name=APP_FONT,
            font_size=18,
            color=(240, 240, 240, 0.8))

        self.add_widget(self.fps_lab)

        self.add_widget(Label(
            text="Level {}".format(self.level.level),
            pos=(0, self.height - 80),
            font_name=APP_FONT,
            font_size=18,
            color=(240, 240, 240, 0.8)))

        # Schedule an interval for the game update function
        Clock.schedule_interval(self.update, 1.0/60.0)
Beispiel #5
0
    def spawn(total_frames, FPS):
        if total_frames % (FPS) == 0:

            if total_frames % (FPS * 6) == 0:

                r = randint(0, 2)
                sounds = [pygame.mixer.Sound('audio/zs1.ogg'),
                          pygame.mixer.Sound('audio/zs2.ogg'),
                          pygame.mixer.Sound('audio/zs3.ogg')]
                sound = sounds[ r ]
                # TURNED OFF SOUND FOR DEBUGGING
                # sound.play()

            r = randint(0, len(Zombie.spawn_tiles) - 1)
            tile_num = Zombie.spawn_tiles[r]
            spawn_node = Tile.get_tile(tile_num)


            Zombie(spawn_node.x, spawn_node.y)
Beispiel #6
0
    def move(self, angle):
        if not self.moving:

            self.moving = True

            if angle > 45 and angle < 135:
                direction = 12
                speed = self.speed_y
                tile_difference = Tile.V
            elif angle > 135 and angle < 225:
                direction = 9
                speed = -self.speed_x
                tile_difference = -Tile.H
            elif angle > 225 and angle < 315:
                direction = 6
                speed = -self.speed_y
                tile_difference = -Tile.V
            elif angle < 360:
                direction = 3
                speed = self.speed_x
                tile_difference = Tile.H
            else:
                raise ValueError("Incorrect angle in Player.move()")

            self.change_sprite(direction)
            target_tile = Tile.get_tile(self.tile + tile_difference)

            if target_tile.walkable:
                for box in self.game.boxes:
                    if box.tile == target_tile.number:
                        if box.move(direction):
                            if direction in (6, 12): self.velocity_y = speed
                            else: self.velocity_x = speed
                            self.tile += tile_difference
                        return

                if direction in (6, 12): self.velocity_y = speed
                else: self.velocity_x = speed
                self.tile += tile_difference
                return
Beispiel #7
0
def interaction(SCREEN):

    Mpos = pygame.mouse.get_pos()  # [x, y]
    Mx = int(Mpos[0] / Tile.size)
    My = int(Mpos[1] / Tile.size)
    tileNumber = (My * Tile.width) + (Mx + 1)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN or pygame.mouse.get_pressed(
        )[0]:
            if pygame.mouse.get_pressed()[0] or event.button == 1:
                for tile in Tile.List:
                    if abs(tile.x - Mpos[0]) < Tile.size and abs(
                            tile.y - Mpos[1]) < Tile.size:
                        tile.type = 'solid'
                        if tileNumber not in WALLS:
                            WALLS.append(tileNumber)
                        break
            elif pygame.mouse.get_pressed(
            )[2] or event.button == 3:  # 1 = LEFT
                tile = Tile.get_tile(tileNumber)
                if tileNumber in WALLS:
                    tile.type = 'empty'
                    WALLS.remove(tileNumber)
                else:
                    break

    keys = pygame.key.get_pressed()
    if keys[pygame.K_l]:
        print(WALLS)
        with open("obstacle_map.py", "w") as text_file:
            text_file.write('{}\n\t{}\n\t{}'.format(
                "def obstacles():", "obstacle_map = " + str(WALLS),
                "return obstacle_map"))
Beispiel #8
0
def userInteraction(screen, survivor):

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_e:

                survivor.current += 1
                survivor.current %= 3

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w]: # North
        future_tile_number = survivor.get_number() - Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('n')
                # survivor.y -= survivor.height                   

    if keys[pygame.K_s]: # South
        future_tile_number = survivor.get_number() + Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('s')
                # survivor.y += survivor.height 

    if keys[pygame.K_a]: # West
        future_tile_number = survivor.get_number() - Tile.H

        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)    
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('w')
                # survivor.x -= survivor.width 

    if keys[pygame.K_d]: # East
        future_tile_number = survivor.get_number() + Tile.H
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('e')
                # survivor.x += survivor.width 

    if keys[pygame.K_LEFT]:
        survivor.rotate('w')
        Bullet(survivor.centerx, survivor.centery, -10, 0, 'w', survivor.get_bullet_type() )

    elif keys[pygame.K_RIGHT]:
        survivor.rotate('e')
        Bullet(survivor.centerx, survivor.centery, 10, 0, 'e', survivor.get_bullet_type() )
    
    elif keys[pygame.K_UP]:
        survivor.rotate('n')
        Bullet(survivor.centerx, survivor.centery, 0, -10, 'n', survivor.get_bullet_type() )
    
    elif keys[pygame.K_DOWN]:
        survivor.rotate('s')
        Bullet(survivor.centerx, survivor.centery, 0, 10, 's', survivor.get_bullet_type() )
Beispiel #9
0
    def get_tile(self):

        return Tile.get_tile(self.get_number())
Beispiel #10
0
 def move_to_tile(self, tilenum):
     tile = Tile.get_tile(tilenum)
     self.x, self.y = tile.x, tile.y