Et oui, j'ai encore des probl�mes avec mon jeu de memory(probl�me pr�c�dent sur le m�me sujet). je vous remercie d'avance pour votre patience et je jure que j'ai fait des recherches sur google mon ami avant de poster ici.
Le jeu n'est pas fini: il me manque un menu d'accueil, le remplacement des messages sur console par des messages sonores mais �a c'est de la finition.
Je vous envoie deux codes: le ficher carte.py ( pas de probl�me lorsque je le teste) et le fichier memory.py ( celui o� j'ai un souci)
Le probl�me: je lance mon memory. Je retourne deux cartes. Si ce ne sont pas les m�mes, il ya un pause de 2 secondes puis les deux cartes redisparaissent.
Si je vais lentement, tout marche.
Si je clique vite, j'ai une erreur que je ne comprends pas:
ReactionAuClic \\NETWORKSPACE2\OpenShare\raf\jeux python\memory\memory.py 65
ValueError: list.remove(x): x not in list
concernant la ligne: self.cartes.remove(carte_cliqu�e)
il me dit donc que l'objet carte_cliqu�e n'est pas dans ma liste et qu'il ne peut la retirer de la liste.
Mais pourquoi cette erreur ne survient que si je vais trop vite?
Autre surprise pour moi: j'ai pass� le programme sur un petit portbale tactile �quip� de windows 8: si je clique � la souris lentement, le programme marche.
Si je clique avec le doigt, j'obtiens la m�me erreur que si j'�tais all� trop vite.
J'explique mon but final: faire un jeu de memory sur ecran tactile pour ma fille de bient�t 3 ans.
remarque: le souci est que vous ne pouvez tester le programme que si vous disposez d'un dossier data avec au moins 6 fichiers nomm�s: carte1.png,carte2.png,etc....
Merci d'avance pour votre patience, vos r�ponses:
le fichier carte.py:(sans probl�me)
le fichier � probl�me: memory.pyCode:
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 # Créé par rafoim, le 30/12/2013 en Python 3.2 import pygame import os from pygame.locals import * pygame.init() def load_image(name, colorkey=None): fullname = os.path.join('data', name) try: image = pygame.image.load(fullname) except (pygame.error): print ("Impossible de charger l'image :", name) raise (SystemExit) image = image.convert() if colorkey is not None: if colorkey is -1: colorkey = image.get_at((0,0)) image.set_colorkey(colorkey, RLEACCEL) return image class Carte(): def __init__(self,chemin_image_cachée,chemin_image_visible,rectangle): self.chemin=chemin_image_visible self.surface_visible=load_image(chemin_image_visible) self.surface_cachée=load_image(chemin_image_cachée) self.rectangle=rectangle self.visible=True self.Retourner() def Retourner(self): screen = pygame.display.get_surface() if self.visible==False: screen.blit(self.surface_visible,self.rectangle) self.visible=True else: screen.blit(self.surface_cachée,self.rectangle) self.visible=False pygame.display.update(self.rectangle) if __name__=="__main__": screen = pygame.display.set_mode((1300, 700)) fond=load_image("fond.png") screen.blit(fond,(0,0)) pygame.display.flip() rectangle=Rect(100,50,300,200) carte1=Carte("carte0.png","carte1.png",rectangle) continuer=1 while continuer: for event in pygame.event.get(): if event.type==QUIT: continuer=0 if event.type==MOUSEBUTTONDOWN: if carte1.rectangle.collidepoint(event.pos): carte1.Retourner() pygame.quit()
Code:
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 # Créé par rafoim, le 30/12/2013 en Python 3.2 from random import randint import pygame from pygame.locals import * from carte import * def TirageSansRemise(liste,nombre): # à partir d'une liste donnée, on renvoie une liste extraite de n éléments où n est le nombre sans répétition l1=liste l2=[] for i in range(nombre): pos=randint(0,len(l1)-1) l2.append(l1[pos]) l1.remove(l1[pos]) return l2 def ListePositions(largeur=280,hauteur=200,largeur_totale=1300,hauteur_totale=700,NbLignes= 3,NbColonnes=4): espace_horizontal=(largeur_totale-largeur*NbColonnes)//(NbColonnes+1) espace_vertical=(hauteur_totale-hauteur*NbLignes)//(NbLignes+1) rectangles=[] for i in range(NbLignes): #i est l'indice de ligne for j in range(NbColonnes): abscisse_coin= (j+1)*espace_vertical+j*largeur ordonnée_coin= (i+1)*espace_vertical+i*hauteur rectangle=Rect(abscisse_coin,ordonnée_coin,largeur,hauteur) rectangles.append(rectangle) return rectangles class Memory(): def __init__(self,liste,NbLignes=3,NbColonnes=4): #on dit que pour l'instant, il n'y a pas de carte déjà retournée self.premiere_carte_retournée=False self.premiere_carte=None # On tire 6 cartes dans la liste l=TirageSansRemise(liste,6) # On double la liste l=l*2 # On mélange les cartes l=TirageSansRemise(l,12) #On calcule la liste des positions liste_rectangles=ListePositions() # On initialise les cartes ce qui déclenche aussi l'affichage self.cartes=[] NbImages=NbColonnes*NbLignes for i in range(NbImages): chemin1="carte0.png" chemin2=l[i] rect=liste_rectangles[i] carte=Carte(chemin1,chemin2,rect) self.cartes.append(carte) def TestDeVictoire(self): if self.cartes==[]: print("tu as gagné la partie!!") pygame.time.wait(6000) continuer=0 def ReactionAuClic(self,carte_cliquée): if self.premiere_carte_retournée: if carte_cliquée.chemin==self.premiere_carte.chemin: print("bravo") self.cartes.remove(self.premiere_carte) self.cartes.remove(carte_cliquée) self.TestDeVictoire() else: print("raté!!!") pygame.time.wait(2000) carte_cliquée.Retourner() self.premiere_carte.Retourner() self.premiere_carte_retournée=False else: self.premiere_carte=carte_cliquée self.premiere_carte_retournée=True print("il faut trouver l'autre carte") if __name__=="__main__": screen = pygame.display.set_mode((1300, 700)) fond=load_image("fond.png") screen.blit(fond,(0,0)) pygame.display.flip() liste_images=[] for i in range(1,11): chemin="carte"+str(i)+".png" liste_images.append(chemin) memo=Memory(liste_images) continuer=1 while continuer: for event in pygame.event.get(): if event.type==QUIT: continuer=0 if event.type==MOUSEBUTTONDOWN: for carte in memo.cartes: if carte.rectangle.collidepoint(event.pos): carte.Retourner() memo.ReactionAuClic(carte) pygame.quit()