Collision pygame
Manjuve
-
Manjuve Messages postés 3 Statut Membre -
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
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
A voir également:
- Colliderect pygame
- Modulenotfounderror: no module named 'pygame' ✓ - Forum Python
- Pygame importer une police d'écriture ✓ - Forum Python
4 réponses
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) :
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()
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)