Salut à tous !

J'avais commencé à coder un Snake avec PyGame en code fonctionnel, mais j'ai été choqué par le nombre de variables globales que je me voyais contraint d'utiliser, et j'ai donc commencé à transposer mon code en code orienté objet.

Je croyais avoir fini, mais je me suis retrouvé devant un beau plantage et un message d'erreur (mis en évidence avec IDLE) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
input() take exactly 1 argument (2 given)
Euh... non, je n'en ai donné qu'un... Bon, je rajoute une deuxième possibilité d'argument dans la fonction ("abc", [1], None, nil, etc...) et là ça met :

[CODE]Snake object is not iterable[CODE]

Argh ! Malheur et damnation, j'ai cherché avec passion, sans trouver la solution... ( !)

Je vous donne donc mon code, en espérant que vous trouviez le problème.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import pygame, sys,os
from pygame.locals import * 
 
#----------------------------------CLASSES---------------------------------#
 
class Snake(object):
	x, y = 76, 76
	isUp, isDown, isRight, isLeft = False, False, True, False
	lastDir = 'right'
	last_time = 0
 
	def __init__(self):
		pygame.init() 
 
		window = pygame.display.set_mode((400, 400), HWSURFACE | DOUBLEBUF)
		pygame.display.set_caption('PySnake') 
		screen = pygame.display.get_surface() 
 
		tete_url = os.path.join("tete.bmp") 
		bloc_url = os.path.join("bloc.bmp") 
		tete = pygame.image.load(tete_url) 
		bloc = pygame.image.load(bloc_url) 
 
		pygame.key.set_repeat(10, 10) 
 
		self.blit
 
	def input(events):
		time = pygame.time.get_ticks() 
 
		for event in events: 
			if event.type == QUIT: 
				sys.exit(0) 
			elif event.type == KEYDOWN:
				if event.key == K_RIGHT and lastDir != 'left':
					isUp, isDown, isRight, isLeft = False, False, True, False
					lastDir = 'right'
				elif event.key == K_LEFT and lastDir != 'right':
					isUp, isDown, isRight, isLeft = False, False, False, True
					lastDir = 'left'
				elif event.key == K_UP and lastDir != 'down':
					isUp, isDown, isRight, isLeft = True, False, False, False
					lastDir = 'up'
				elif event.key == K_DOWN and lastDir != 'up':
					isUp, isDown, isRight, isLeft = False, True, False, False
					lastDir = 'down'
 
		if time - last_time >= 75: 
			if isUp: y -= 10
			if isDown: y += 10
			if isRight: x += 10
			if isLeft : x -= 10
			last_time = time 
 
	def borders_verify(self):
		global x, y
		if x >= 400 - 10: x -= 10
		elif x <= 0: x += 10
		elif y >= 400 - 10: y -= 10
		elif y <= 0: y += 10
 
	def blit(self):
		screen.fill((0,0,0)) 
		borders_verify() 
		screen.blit(tete, (x,y)) 
 
		pygame.display.flip() 
 
#----------------------------MAIN--------------------------------#
 
snake = Snake()
 
while True: 
	snake.input(pygame.event.get()) 
	snake.borders_verify()
	snake.blit()
Merci d'avance !