10_2_slalom_v_d_molu
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/arcade.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/bottle.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/explosion.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/flowers.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/grass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 847 B  | 
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/jump.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/kolesar.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/mol.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										182
									
								
								10_2_slalom_v_d_molu/naloga.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,182 @@
 | 
			
		||||
import random
 | 
			
		||||
import pygame
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GameObject:
 | 
			
		||||
    def __init__(self, game, image: str):
 | 
			
		||||
        self.game = game
 | 
			
		||||
        self.image = pygame.image.load(image)
 | 
			
		||||
        image_rect = self.image.get_rect()
 | 
			
		||||
 | 
			
		||||
        self.x = 0
 | 
			
		||||
        self.y = 0
 | 
			
		||||
        self.w = image_rect.w
 | 
			
		||||
        self.h = image_rect.h
 | 
			
		||||
 | 
			
		||||
    def update(self):
 | 
			
		||||
        self.game.screen.blit(self.image, pygame.Rect(self.x, self.y, self.w, self.h))
 | 
			
		||||
 | 
			
		||||
    def check_collision(self, game_obj):
 | 
			
		||||
        return (
 | 
			
		||||
                self.x < game_obj.x + game_obj.w and
 | 
			
		||||
                self.x + self.w > game_obj.x and
 | 
			
		||||
                self.y < game_obj.y + game_obj.h and
 | 
			
		||||
                self.y + self.h > game_obj.y
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Player(GameObject):
 | 
			
		||||
    def __init__(self, game):
 | 
			
		||||
        super().__init__(game, "kolesar.png")
 | 
			
		||||
 | 
			
		||||
        self.x = self.game.screen.get_width() / 2 - self.w / 2
 | 
			
		||||
        self.y = self.game.screen.get_height() - self.h
 | 
			
		||||
 | 
			
		||||
        self.lives = 3
 | 
			
		||||
 | 
			
		||||
    def update(self):
 | 
			
		||||
        if pygame.K_LEFT in self.game.keys:
 | 
			
		||||
            self.x -= 1
 | 
			
		||||
        if pygame.K_RIGHT in self.game.keys:
 | 
			
		||||
            self.x += 1
 | 
			
		||||
 | 
			
		||||
        for obstacle in self.game.obstacles:
 | 
			
		||||
            if not self.check_collision(obstacle):
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            if obstacle.get_point:
 | 
			
		||||
                self.game.points += 1
 | 
			
		||||
                self.game.play_sound("jump.mp3")
 | 
			
		||||
            else:
 | 
			
		||||
                self.lives -= 1
 | 
			
		||||
                self.game.play_sound("explosion.mp3")
 | 
			
		||||
            obstacle.delete()
 | 
			
		||||
 | 
			
		||||
        if self.lives <= 0:
 | 
			
		||||
            self.game.loose()
 | 
			
		||||
 | 
			
		||||
        super().update()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Obstacle(GameObject):
 | 
			
		||||
    def __init__(self, game):
 | 
			
		||||
        obstacles = {"bottle.png": False, "flowers.png": False, "grass.png": False, "scooter.png": False,
 | 
			
		||||
                     "stones.png": False, "walker.png": False, "mol.png": True}
 | 
			
		||||
 | 
			
		||||
        image = random.choice(list(obstacles))
 | 
			
		||||
        self.get_point = obstacles[image]
 | 
			
		||||
 | 
			
		||||
        super().__init__(game, image)
 | 
			
		||||
 | 
			
		||||
        self.x = (self.game.screen.get_width() - self.w) * random.random()
 | 
			
		||||
        self.y = -self.h
 | 
			
		||||
 | 
			
		||||
        self.game.obstacles.append(self)
 | 
			
		||||
 | 
			
		||||
    def update(self):
 | 
			
		||||
        if self.y > self.game.screen.get_height():
 | 
			
		||||
            self.delete()
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self.y += 1 + self.game.get_level() / 10
 | 
			
		||||
        super().update()
 | 
			
		||||
 | 
			
		||||
    def delete(self):
 | 
			
		||||
        self.game.obstacles.remove(self)
 | 
			
		||||
        del self
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Game:
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        pygame.init()
 | 
			
		||||
        pygame.font.init()
 | 
			
		||||
        pygame.display.set_caption("Slalom v D-molu")
 | 
			
		||||
 | 
			
		||||
        self.screen = pygame.display.set_mode((800, 600))
 | 
			
		||||
        self.clock = pygame.time.Clock()
 | 
			
		||||
        self.font = pygame.font.SysFont("Consolas", 20)
 | 
			
		||||
 | 
			
		||||
        pygame.mixer.music.load("arcade.mp3")
 | 
			
		||||
        pygame.mixer.music.play(-1)
 | 
			
		||||
        pygame.mixer.music.set_volume(0.1)
 | 
			
		||||
 | 
			
		||||
        self.running = True
 | 
			
		||||
        self.lost = False
 | 
			
		||||
        self.keys = set()
 | 
			
		||||
        self.obstacles = []
 | 
			
		||||
 | 
			
		||||
        self.points = 0
 | 
			
		||||
        self.next_obstacle = 0
 | 
			
		||||
 | 
			
		||||
        self.player = Player(self)
 | 
			
		||||
 | 
			
		||||
        while self.running:
 | 
			
		||||
            self.update()
 | 
			
		||||
 | 
			
		||||
        pygame.quit()
 | 
			
		||||
 | 
			
		||||
    def get_level(self):
 | 
			
		||||
        return self.points // 5 + 1
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def play_sound(sound: str):
 | 
			
		||||
        channel = pygame.mixer.find_channel()
 | 
			
		||||
        channel.set_volume(0.1)
 | 
			
		||||
        channel.play(pygame.mixer.Sound(sound))
 | 
			
		||||
 | 
			
		||||
    def loose(self):
 | 
			
		||||
        self.lost = True
 | 
			
		||||
        pygame.mixer.music.stop()
 | 
			
		||||
        big_font = pygame.font.SysFont("Consolas", 40)
 | 
			
		||||
        you_lost = big_font.render("Izgubil si!", True, "white")
 | 
			
		||||
        self.screen.blit(
 | 
			
		||||
            you_lost,
 | 
			
		||||
            (self.screen.get_width() / 2 - you_lost.get_width() / 2,
 | 
			
		||||
             self.screen.get_height() / 2 - you_lost.get_height() / 2))
 | 
			
		||||
 | 
			
		||||
    def update(self):
 | 
			
		||||
        for event in pygame.event.get():
 | 
			
		||||
            match event.type:
 | 
			
		||||
                case pygame.QUIT:
 | 
			
		||||
                    self.running = False
 | 
			
		||||
                    break
 | 
			
		||||
                case pygame.KEYDOWN:
 | 
			
		||||
                    self.keys.add(event.key)
 | 
			
		||||
                    break
 | 
			
		||||
                case pygame.KEYUP:
 | 
			
		||||
                    self.keys.remove(event.key)
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
        if self.lost:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self.next_obstacle -= 1
 | 
			
		||||
        if self.next_obstacle <= 0:
 | 
			
		||||
            if self.get_level() >= 13:
 | 
			
		||||
                self.next_obstacle = 30
 | 
			
		||||
            else:
 | 
			
		||||
                self.next_obstacle = random.randrange(30, 160 - 10 * self.get_level())
 | 
			
		||||
 | 
			
		||||
            Obstacle(self)
 | 
			
		||||
 | 
			
		||||
        self.screen.fill("black")
 | 
			
		||||
 | 
			
		||||
        for obstacle in self.obstacles:
 | 
			
		||||
            obstacle.update()
 | 
			
		||||
 | 
			
		||||
        self.player.update()
 | 
			
		||||
 | 
			
		||||
        points = self.font.render(f'Točke: {self.points}', True, "white")
 | 
			
		||||
        self.screen.blit(points, (10, 10))
 | 
			
		||||
 | 
			
		||||
        level = self.font.render(f'Level: {self.get_level()}', True, "white")
 | 
			
		||||
        self.screen.blit(level, (self.screen.get_width() / 2 - level.get_width() / 2, 10))
 | 
			
		||||
 | 
			
		||||
        lives = self.font.render(f'Lives: {self.player.lives}', True, "white")
 | 
			
		||||
        self.screen.blit(lives, (self.screen.get_width() - lives.get_width() - 10, 10))
 | 
			
		||||
 | 
			
		||||
        pygame.display.flip()
 | 
			
		||||
        self.clock.tick(480)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Game()
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/scooter.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/stones.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 5.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								10_2_slalom_v_d_molu/walker.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.3 KiB  |