Collision pygame

Manjuve -  
Manjuve Messages postés 3 Statut Membre -
Bonjour, je commence en pygame et je me suis lancé le défi de coder un petit jeu (snake) par moi-même sachant que j'en ai déjà codé plusieurs en suivant des tutos. Pour les collisions j'ai trouvé la fonction colliderect que j'avais déjà utilisée auparavant mais quand j'exécut le programme j'obtiens l'erreur suivante : NameError: name 'food' is not defined


voici mon code :


import pygame
import random
import time
import sys

from pygame.constants import K_DOWN, K_LEFT, K_RIGHT, K_UP
pygame.init()

NB_COL = 10
NB_ROW = 15
CELL_SIZE = 40
screen = pygame.display.set_mode(size=(NB_COL * CELL_SIZE, NB_ROW * CELL_SIZE))
timer = pygame.time.Clock()
game_on = True

def grid():
for i in range (NB_COL):
for j in range (NB_ROW):
rect = pygame.Rect(i*CELL_SIZE, j*CELL_SIZE, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(screen, pygame.Color("black"), rect, width = 1)
def food_move():
x = random.randrange(0,360,40)
y = random.randrange(0,560,40)
global food
food = pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
food = pygame.draw.rect(screen, pygame.Color("green"), food)

def snake_move():
x = 40
y = 40
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x-=40
elif event.key == pygame.K_RIGHT:
x+=40
elif event.key == pygame.K_UP:
y-=40
elif event.key == pygame.K_DOWN:
y +=40
global snake
snake = pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(screen, pygame.Color("red"), snake)


while game_on:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill(pygame.Color("white"))
grid()
if food.colliderect(snake) == -1:
food_move()
snake_move()
pygame.display.update()
timer.tick(60)
Pouvez vous m'aider svp?
P-S Je débute sur le forum donc si ma question n'est pas claire n'hésitez pas à le dire


Configuration: Windows / Chrome 92.0.4515.107

4 réponses

Phil_1857 Messages postés 1956 Statut Membre 168
 
Bonjour,


L'indentation étant importante en Python, merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()
0
Manjuve Messages postés 3 Statut Membre
 
import pygame
import random
import time
import sys

from pygame.constants import K_DOWN, K_LEFT, K_RIGHT, K_UP
pygame.init()

NB_COL = 10
NB_ROW = 15
CELL_SIZE = 40
screen = pygame.display.set_mode(size=(NB_COL * CELL_SIZE, NB_ROW * CELL_SIZE))
timer = pygame.time.Clock()
game_on = True

def grid():
    for i in range (NB_COL):
        for j in  range (NB_ROW):
            rect = pygame.Rect(i*CELL_SIZE, j*CELL_SIZE, CELL_SIZE, CELL_SIZE)
            pygame.draw.rect(screen, pygame.Color("black"), rect, width = 1)
def food_move():
    x = random.randrange(0,360,40)
    y = random.randrange(0,560,40)
    global food
    food = pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
    food = pygame.draw.rect(screen, pygame.Color("green"), food)

def snake_move():
    x = 40
    y = 40
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            x-=40
        elif event.key == pygame.K_RIGHT:
            x+=40
        elif event.key == pygame.K_UP:
            y-=40
        elif event.key == pygame.K_DOWN:
            y +=40   
    global snake
    snake = pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
    pygame.draw.rect(screen, pygame.Color("red"), snake)


while game_on:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    screen.fill(pygame.Color("white"))
    grid()
    if food.colliderect(snake) == -1:
        food_move()
    snake_move()
    pygame.display.update()
    timer.tick(60)
0
yg_be Messages postés 24281 Date d'inscription   Statut Contributeur Dernière intervention   1 585
 
le message d'erreur mentionne-t-il un numéro de ligne?
es-tu certain que la variable foot a déjà une valeur au moment où tu exécutes cette ligne?
0
Manjuve Messages postés 3 Statut Membre > yg_be Messages postés 24281 Date d'inscription   Statut Contributeur Dernière intervention  
 
ligne 52, et oui effectivement la variable n'a pas encore de valeur
0
Phil_1857 Messages postés 1956 Statut Membre 168
 
A la ligne 52 food est inconnue

Elle est initialisée juste après dans la fonction food_move() ... trop tard
0
Manjuve Messages postés 3 Statut Membre
 
ah oui merci!
0