commit 7201c19bc9ac54632bee1262c22ed373f7821a97 Author: vargadavid Date: Thu Jan 19 22:01:46 2023 +0100 Snake game v1 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..f80dfc8 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +VD_snake.py \ No newline at end of file diff --git a/.idea/VD snake.iml b/.idea/VD snake.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/.idea/VD snake.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..dc9ea49 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..50e4335 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Felhasználói dokumentáció vd snake game.docx b/Felhasználói dokumentáció vd snake game.docx new file mode 100644 index 0000000..1aee20e Binary files /dev/null and b/Felhasználói dokumentáció vd snake game.docx differ diff --git a/VD_snake.py b/VD_snake.py new file mode 100644 index 0000000..df7be28 --- /dev/null +++ b/VD_snake.py @@ -0,0 +1,204 @@ + +import pygame +from pygame.locals import * +import time +import random + +SIZE = 40 +BACKGROUND_COLOR = (110, 110, 5) + +#alma létrehozása +class Apple: + def __init__(self, parent_screen): + self.parent_screen = parent_screen + self.image = pygame.image.load("resources/apple.jpg").convert() + self.x = 120 + self.y = 120 + + def draw(self): + self.parent_screen.blit(self.image, (self.x, self.y)) + pygame.display.flip() + #alma elhelyezése + def move(self): + self.x = random.randint(1,24)*SIZE + self.y = random.randint(1,19)*SIZE +#kígyó és mozgásának definiálása +class Snake: + def __init__(self, parent_screen): + self.parent_screen = parent_screen + self.image = pygame.image.load("resources/block.jpg").convert() + self.direction = 'down' + + self.length = 1 + self.x = [40] + self.y = [40] + + def move_left(self): + self.direction = 'left' + + def move_right(self): + self.direction = 'right' + + def move_up(self): + self.direction = 'up' + + def move_down(self): + self.direction = 'down' + + # kígyó mozgásának a logikája + def walk(self): + # tesnek a mozgása + for i in range(self.length-1,0,-1): + self.x[i] = self.x[i-1] + self.y[i] = self.y[i-1] + + # fej mozgása + if self.direction == 'left': + self.x[0] -= SIZE + if self.direction == 'right': + self.x[0] += SIZE + if self.direction == 'up': + self.y[0] -= SIZE + if self.direction == 'down': + self.y[0] += SIZE + + self.draw() + + def draw(self): + for i in range(self.length): + self.parent_screen.blit(self.image, (self.x[i], self.y[i])) + + pygame.display.flip() +#kígyó hosszabbítása + def increase_length(self): + self.length += 1 + self.x.append(-1) + self.y.append(-1) +#játékablak létrehozása +class Game: + def __init__(self): + pygame.init() + pygame.display.set_caption("Snake játék") + + pygame.mixer.init() + self.play_background_music() + + self.surface = pygame.display.set_mode((1000, 800)) + self.snake = Snake(self.surface) + self.snake.draw() + self.apple = Apple(self.surface) + self.apple.draw() +#háttérzene + def play_background_music(self): + pygame.mixer.music.load('resources/bg_music_1.mp3') + pygame.mixer.music.play(-1, 0) +#hangok + def play_sound(self, sound_name): + if sound_name == "crash": + sound = pygame.mixer.Sound("resources/crash.mp3") + elif sound_name == 'ding': + sound = pygame.mixer.Sound("resources/ding.mp3") + + pygame.mixer.Sound.play(sound) + + +#újrakezdés definiálása + def reset(self): + self.snake = Snake(self.surface) + self.apple = Apple(self.surface) + +# űtközés definiálása + def is_collision(self, x1, y1, x2, y2): + if x1 >= x2 and x1 < x2 + SIZE: + if y1 >= y2 and y1 < y2 + SIZE: + return True + return False +#háttérkép + def render_background(self): + bg = pygame.image.load("resources/background.jpg") + self.surface.blit(bg, (0,0)) +#játékmenet + def play(self): + self.render_background() + self.snake.walk() + self.apple.draw() + self.display_score() + pygame.display.flip() + + # a kígyó megeszik egy almát + for i in range(self.snake.length): + if self.is_collision(self.snake.x[i], self.snake.y[i], self.apple.x, self.apple.y): + self.play_sound("ding") + self.snake.increase_length() + self.apple.move() + + # a kígyó ütkőzik magával + for i in range(3, self.snake.length): + if self.is_collision(self.snake.x[0], self.snake.y[0], self.snake.x[i], self.snake.y[i]): + self.play_sound('crash') + raise "Collision Occurred" + + # a kígyó nekimegy a pálya szélének + if not (0 <= self.snake.x[0] <= 1000 and 0 <= self.snake.y[0] <= 800): + self.play_sound('crash') + raise "Hit the boundry error" +#Pontok kiírattatása + def display_score(self): + font = pygame.font.SysFont('arial',30) + score = font.render(f"Pont: {self.snake.length}",True,(200,200,200)) + self.surface.blit(score,(850,10)) +#játék vége + def show_game_over(self): + self.render_background() + font = pygame.font.SysFont('arial', 30) + line1 = font.render(f"Vesztettél! Elért pontok: {self.snake.length}", True, (255, 255, 255)) + self.surface.blit(line1, (200, 300)) + line2 = font.render("Az újrakezdéshez nyomd meg a Enter-t és a kilépéshez az Escape-t", True, (255, 255, 255)) + self.surface.blit(line2, (200, 350)) + pygame.mixer.music.pause() + pygame.display.flip() +#újrakezdés + def run(self): + running = True + pause = False + + while running: + for event in pygame.event.get(): + if event.type == KEYDOWN: + if event.key == K_ESCAPE: + running = False + + if event.key == K_RETURN: + pygame.mixer.music.unpause() + pause = False + + if not pause: + if event.key == K_LEFT: + self.snake.move_left() + + if event.key == K_RIGHT: + self.snake.move_right() + + if event.key == K_UP: + self.snake.move_up() + + if event.key == K_DOWN: + self.snake.move_down() + + elif event.type == QUIT: + running = False + try: + + if not pause: + self.play() + + except Exception as e: + self.show_game_over() + pause = True + self.reset() + + time.sleep(.1) + +if __name__ == '__main__': + game = Game() + game.run() \ No newline at end of file diff --git a/resources/apple.jpg b/resources/apple.jpg new file mode 100644 index 0000000..8f3c968 Binary files /dev/null and b/resources/apple.jpg differ diff --git a/resources/background.jpg b/resources/background.jpg new file mode 100644 index 0000000..57adbcb Binary files /dev/null and b/resources/background.jpg differ diff --git a/resources/bg_music_1.mp3 b/resources/bg_music_1.mp3 new file mode 100644 index 0000000..bdbc4a8 Binary files /dev/null and b/resources/bg_music_1.mp3 differ diff --git a/resources/block.jpg b/resources/block.jpg new file mode 100644 index 0000000..fe12a0b Binary files /dev/null and b/resources/block.jpg differ diff --git a/resources/crash.mp3 b/resources/crash.mp3 new file mode 100644 index 0000000..602cd81 Binary files /dev/null and b/resources/crash.mp3 differ diff --git a/resources/ding.mp3 b/resources/ding.mp3 new file mode 100644 index 0000000..8361550 Binary files /dev/null and b/resources/ding.mp3 differ