From 6eb0739bf9d30922705a59bcc2ad72c4a30d9e74 Mon Sep 17 00:00:00 2001
From: to <tgueuret@live.fr>
Date: Sat, 1 Jun 2024 21:00:30 +0200
Subject: [PATCH] almost done
---
snake/snake_template.py | 134 +++++++++++++++++++++++++++++-----------
1 file changed, 99 insertions(+), 35 deletions(-)
diff --git a/snake/snake_template.py b/snake/snake_template.py
index 9813891..90e951b 100644
--- a/snake/snake_template.py
+++ b/snake/snake_template.py
@@ -1,96 +1,160 @@
-## RUBIKA - SNAKE GAME
+# RUBIKA - SNAKE GAME
-#### IMPORTS ####
+# imports
import pygame
import random
-#### COLOUR DEFINITION ####
-
-white = (255, 255, 255)
-yellow = (255, 255, 102)
-black = (0, 0, 0)
-red = (213, 50, 80)
-green = (0, 255, 0)
-blue = (50, 153, 213)
+# colors
+blanc = (255, 255, 255)
+jaune = (255, 255, 102)
+noir = (0, 0, 0)
+rouge = (213, 50, 80)
+vert = (0, 255, 0)
+bleu = (50, 153, 213)
# Step 1: Defining the window's graphical variables
unite = 10
-largeur_zone = 60
-hauteur_zone = 40
-couleur_nourriture = red
-couleur_serpent = green
-couleur_fond = white
+largeur_zone = 60 * unite
+hauteur_zone = 40 * unite
+couleur_nourriture = rouge
+couleur_serpent = vert
+couleur_fond = blanc
# Step 2.3: Showing a square in the window
-def draw_square(x: int, y: int, colour: tuple):
- pygame.draw.rect()
+def dessiner_carre(x: int, y: int, colour: tuple):
+ pygame.draw.rect(
+ console,
+ colour,
+ [x, y, unite, unite]
+ )
+
# Step 4: Showing multiple squares from a list of positions and a colour
+def dessiner_liste_carres(liste_positions: list, couleur: tuple):
+ for position in liste_positions:
+ dessiner_carre(position[0], position[1], couleur)
+
# Step 3.1: Get a random number between 0 and max (excluded)
+def entier_aleatoire(valeur_max: int) -> int:
+ return random.randint(0, valeur_max-1)
+
# Step 3.2: Get random coordinates in the zone
+def position_aleatoire() -> tuple:
+ position_0 = entier_aleatoire(largeur_zone)
+ position_1 = entier_aleatoire(hauteur_zone)
+ return position_0, position_1
+
# Print a message at the top left of the screen in Comic Sans MS, size 20
-def print_message(message: str) :
- console.blit(pygame.font.SysFont("comicsansms", 20).render(message, True, white), [0, 0])
+def affiche_message(message: str):
+ console.blit(pygame.font.SysFont("comicsansms", 20).render(message, True, blanc), [0, 0])
+
# Step 7: Direction according to the pressed key
+def actualiser_direction(keys: pygame.key, direction_actuelle: tuple) -> tuple:
+ if keys[pygame.K_UP]:
+ print('key is "up"')
+ direction_future = (0, -1)
+ elif keys[pygame.K_DOWN]:
+ print('key is "down"')
+ direction_future = (0, 1)
+ elif keys[pygame.K_LEFT]:
+ print('key is "left"')
+ direction_future = (-1, 0)
+ elif keys[pygame.K_RIGHT]:
+ print('key is "right"')
+ direction_future = (1, 0)
+ else:
+ direction_future = direction_actuelle
+ print(f"no keys pressed, direction_future: {direction_future}")
+ return direction_future
+
# Step 9: Getting the new position in the current direction
+def nouvelle_position(serpent, direction_actuelle):
+ position = [serpent[-1][0] + direction_actuelle[0], serpent[-1][1] + direction_actuelle[1]]
+ return position
+
# Step 10: Checking is the position is in the game area
+def dans_zone(position):
+ x = position[0]
+ y = position[1]
+ if x < 0 or x >= largeur_zone:
+ return False
+ if y < 0 or y >= hauteur_zone:
+ return False
+ return True
+
# One game turn
-def game_turn(snake, end, direction, food):
+def tour_jeu(serpent, fin, direction_actuelle, pomme):
# Step 6.1: Show the food
+ dessiner_carre(pomme[0], pomme[1], couleur_nourriture)
# Step 6.2: Show the score
+ affiche_message(str(len(serpent)-1))
# Step 6.3: Show the snake
+ dessiner_liste_carres(serpent, couleur_serpent)
# Update display
pygame.display.update()
# Retrieve pressed keys
for event in pygame.event.get():
- # Step 8.1: × is pressed, exit the game
-
- # Step 8.2: a key is pressed, update direction
- print(event)
+ if event.type == pygame.QUIT:
+ fin = True
- # Step 11: If the snake is moving
+ keys = pygame.key.get_pressed()
+ direction_future = actualiser_direction(keys, direction_actuelle)
+ position_future = nouvelle_position(serpent, direction_future)
+ if dans_zone(position_future):
+ serpent.append(position_future)
+ if serpent[-1] == pomme:
+ pomme = position_aleatoire()
+ else:
+ serpent = serpent[1:]
+ return serpent, fin, direction_actuelle, pomme
- # Step 12: Is the snake eating?
-
- return snake, end, direction, food
# Initialisation of the game window ==> do not delete
pygame.init()
+
# Step 2.1: replace 100,100 by using the correct variables
console = pygame.display.set_mode((largeur_zone, hauteur_zone))
# Set window title
-pygame.display.set_caption("Snake by Rubika_BI1_Anim3D")
+pygame.display.set_caption("Snakeeeeee")
# Step 5: Game elements variables
-
+serpent = [[largeur_zone//2, hauteur_zone//2]]
+fin_jeu = False
+direction_serpent = (0, 0)
+position_pomme = position_aleatoire()
# the clock to make the time move
clock = pygame.time.Clock()
-tick = 1
+tick = 60
+print(f"Initialization done")
# Step 6.4: As long as the game is not over
-while False :
+while fin_jeu is False:
+
+ print(f"Looping")
+
# Step 2.2: colour the background
- console.fill()
+ console.fill(noir)
# Update the elements
- snake_positions, game_end, snake_direction, food_position = game_turn(snake_positions, game_end, snake_direction, food_position)
+ serpent, fin_jeu, direction_serpent, position_pomme = tour_jeu(serpent, fin_jeu, direction_serpent, position_pomme)
+ # snake_positions, game_end, snake_direction, food_position = game_turn(snake_positions, game_end, snake_direction, food_position)
clock.tick(tick)
# End of game
print("Game Over")
pygame.quit()
-quit()
\ No newline at end of file
+quit()
--
GitLab