From 3746998fff5e9fcf7812b6bf7a8b66adf5026048 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Wed, 21 Mar 2018 09:10:42 +0300 Subject: [PATCH] ISN correction du snake --- ISN/pygame/fig/snake_corr.png | Bin 0 -> 7945 bytes ISN/pygame/snake_corr.py | 178 +++++++++++++++++-- ISN/pygame/snake_expl.pdf | Bin 0 -> 21393 bytes ISN/pygame/snake_expl.svg | 311 ++++++++++++++++++++++++++++++++++ 4 files changed, 479 insertions(+), 10 deletions(-) create mode 100644 ISN/pygame/fig/snake_corr.png create mode 100644 ISN/pygame/snake_expl.pdf create mode 100644 ISN/pygame/snake_expl.svg diff --git a/ISN/pygame/fig/snake_corr.png b/ISN/pygame/fig/snake_corr.png new file mode 100644 index 0000000000000000000000000000000000000000..b497537b6fb9e3a08a352869ec362aee6af9bf12 GIT binary patch literal 7945 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 Y^)Ak8<&>*(f05SLHP$Km`NrM<0}yTp_y7O^ literal 0 HcmV?d00001 diff --git a/ISN/pygame/snake_corr.py b/ISN/pygame/snake_corr.py index 6c728ff..000ae5f 100644 --- a/ISN/pygame/snake_corr.py +++ b/ISN/pygame/snake_corr.py @@ -1,22 +1,180 @@ -import pygame +""" + Snake pour l'ISN +""" + +import pygame +from random import randint + +def draw_grid(): + """ Dessine la grille """ + for i in range(COLUMN+1): + pygame.draw.line(screen, WHITE, (i*CELLSIZE, 0), (i*CELLSIZE, ROW*CELLSIZE)) + for i in range(ROW+1): + pygame.draw.line(screen, WHITE, (0, i*CELLSIZE), (COLUMN*CELLSIZE, i*CELLSIZE)) + +def draw_snake(snake): + """ Dessine le serpent """ + for i, j in snake: + top_left = (i * CELLSIZE, j * CELLSIZE) + pygame.draw.rect(screen, GREEN, (*top_left, CELLSIZE, CELLSIZE)) + +def draw_cherry(cherry): + """ Dessine les cherry (bonus) """ + center = (int((cherry[0] + 0.5) * CELLSIZE), int((cherry[1] + 0.5) * CELLSIZE)) + radius = int(0.5*CELLSIZE) + pygame.draw.circle(screen, RED, center, radius) + +def draw_right(score): + """ Dessine la partie droite de la fenête """ + width_right_bar = s_width - COLUMN*CELLSIZE + top_left_right_bar = (COLUMN*CELLSIZE, 0) + title = TITLEFONT.render("SNAKE", True, WHITE) + title_rect = title.get_rect() + title_rect.centerx = int(top_left_right_bar[0] + width_right_bar/2) + title_rect.centery = 50 + screen.blit(title, title_rect) + + score_text = "Score " + str(score) + score = TEXTFONT.render(score_text, True, WHITE) + score_rect = score.get_rect() + score_rect.centerx = int(top_left_right_bar[0] + width_right_bar/2) + score_rect.centery = 100 + screen.blit(score, score_rect) + +def random_place(row, col): + """ Retourne un lieu aléatoire sur la grille """ + return [randint(0, row-1), randint(0, col-1)] + +def move_snake(snake, snake_direction, growing): + """ Retourne la nouvelle position du snake + + Si growing est True, on ne supprime par le dernier élément de la queue pour que le serpent grandisse + + L'idée est de trouver les coordonnées de la nouvelle tête (new_head) puis de coller le corp du serpent (en supprimant la dernière partie si l'on veut que le serpent de grandisse pas. + + """ + new_head = [snake[0][0] + snake_direction[0], snake[0][1] + snake_direction[1]] + if growing: + return [new_head] + snake + else: + # [:-1] permet de dire que l'on veut la liste sauf le dernier élément. + return [new_head] + snake[:-1] + +def is_out(snake): + """ Retourne True si le snake est sorti de la grille """ + # le snake[0] est la tête du serpent. + return snake[0][0] > COLUMN or \ + snake[0][0] < 0 or \ + snake[0][1] > ROW or\ + snake[0][1] < 0 + +def is_eating_queue(snake): + """ Retourne True si le serpent se mort la queue """ + # On se demande si la tête du serpent est dans (in) la queue dans ce cas il se mort la queue + return snake[0] in snake[1:] + +def is_eating(snake, cherry): + """ Retroune True si le snake mange la cherry""" + return snake[0] == cherry + +# Call this function so the Pygame library can initialize itself pygame.init() -largeur = 600 -hauteur = 400 -windowSurface = pygame.display.set_mode((largeur, hauteur), 0,32) - +# --- Globals --- +# Colors +BLACK = (0, 0, 0) +GREEN = (0, 255, 0) +RED = (255, 0, 0) WHITE = (255, 255, 255) +# font +TITLEFONT = pygame.font.SysFont(None, 48) +TEXTFONT = pygame.font.SysFont(None, 30) + +# THE GRID +ROW = 20 +COLUMN = 20 + +# CELL +CELLSIZE = 20 + +# Create an 800x600 sized screen +s_width = COLUMN * CELLSIZE + 200 +s_height = ROW * CELLSIZE + 1 +screen = pygame.display.set_mode([s_width, s_height]) + +# Set the title of the window +pygame.display.set_caption('Snake') + +clock = pygame.time.Clock() + +# The snake +snake = [[5, 5], [4, 5], [3, 5]] +snake_direction = [1, 0] + +# The cherry +cherry = random_place(ROW, COLUMN) + +# The score +score = 0 +growing = False running = True while running: - - pygame.draw.line(windowSurface, WHITE, (0,10), (600,10)) - - pygame.display.update() - + # Event loop for event in pygame.event.get(): if event.type == pygame.QUIT: running = False + elif event.type == pygame.KEYUP: + # On empèche que le snake fasse demi tour + if event.key == pygame.K_UP: + if snake_direction != [0, 1]: + snake_direction = [0, -1] + elif event.key == pygame.K_DOWN: + if snake_direction != [0, -1]: + snake_direction = [0, 1] + elif event.key == pygame.K_LEFT: + if snake_direction != [1, 0]: + snake_direction = [-1, 0] + elif event.key == pygame.K_RIGHT: + if snake_direction != [-1, 0]: + snake_direction = [1, 0] + + # Move the snake + if growing: + snake = move_snake(snake, snake_direction, True) + growing = False + else: + snake = move_snake(snake, snake_direction, False) + + # Draw elements + screen.fill(BLACK) + draw_grid() + draw_right(score) + draw_snake(snake) + draw_cherry(cherry) + + # Flip screen + pygame.display.flip() + + if is_eating(snake, cherry): + score = score + 1 + growing = True + cherry = random_place(ROW, COLUMN) + + # loosing! + if is_out(snake) or is_eating_queue(snake): + screen.fill(BLACK) + text = TITLEFONT.render('You loose!!', True, BLACK,WHITE) + textRect = text.get_rect() + textRect.centerx = screen.get_rect().centerx + textRect.centery = screen.get_rect().centery + screen.blit(text, textRect) + pygame.display.flip() + pygame.time.wait(1000) + running = False + + # Pause + clock.tick(2) pygame.quit() diff --git a/ISN/pygame/snake_expl.pdf b/ISN/pygame/snake_expl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fc6dd0484580cf27c96d7cf0f8f133dcd216a0ee GIT binary patch literal 21393 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 literal 0 HcmV?d00001 diff --git a/ISN/pygame/snake_expl.svg b/ISN/pygame/snake_expl.svg new file mode 100644 index 0000000..b2e17e2 --- /dev/null +++ b/ISN/pygame/snake_expl.svg @@ -0,0 +1,311 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 012 + ROW + + + + 0 1 2 + COLUMN + + s_width + s_height + CELLSIZE + + + width_right_bar +