Problème avec mon jeu Pygame
Meziane
-
Phil_1857 Messages postés 1956 Statut Membre -
Phil_1857 Messages postés 1956 Statut Membre -
Bonjour, je cherche à créer un jeu avec Pygame utilisant plusieurs classes pour les différents objets, j'ai donc trouvé le code redondant et j'ai décidé de le simplifier en créant une super-classe Object mais cela ne fonctionne pas, voilà le code :
import pygame, random, sys
def quit():
pygame.quit()
sys.exit()
def e(location):
return 'C:\\Users\\Meziane\\Desktop\\space\\'+location
pygame.init()
screen = pygame.display.set_mode((640,640))
pygame.display.set_caption("Space")
clock = pygame.time.Clock()
score = 0
ammo = 0
menu = 0
count2 = 0
count=0
maxcount = 10
bg = pygame.image.load(e('BG.png')).convert_alpha()
vectorx = 0
class Object(pygame.sprite.Sprite):
def __init__(self,x,y,img):
super().__init__()
self.sprite = pygame.image.load(e(img)).convert_alpha()
self.rect = self.sprite.get_rect(center = (x,y))
self.mask = pygame.mask.from_surface(self.sprite)
class Asteroid(pygame.sprite.Sprite):
def __init__(self,x,y):
super().__init__(x,y,'asteroid.png')
class Coin(Object):
def __init__(self,x,y):
super().__init__(x,y,'Coin.png')
class Player(Object):
def __init__(self,x,y):
super().__init__(x,y,'shiep.png')
class Text:
def __init__(self,text,x,y,font,w,color,t):
self.font = pygame.font.Font(font,w)
self.text = self.font.render(text,t,color).convert_alpha()
self.rect = self.text.get_rect(midleft = (x, y))
score_text = Text(str(score),50,25,None,50,'White',True)
shiep = Player(0,590)
l = []
c = []
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
if menu == 0:
if count < maxcount:
count+=1
else:
count=0
maxcount = random.randint(10,25)
if count2 < 60:
count2+=1
else:
count2=0
ammo +=1
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_LEFT] and vectorx > -15: vectorx -= 3
if keys_pressed[pygame.K_RIGHT]and vectorx <15: vectorx += 3
if vectorx > 0: vectorx -=1
if vectorx < 0: vectorx +=1
shiep.rect.x += vectorx
if shiep.rect.right <= 0: shiep.rect.left = 639
if shiep.rect.left >= 640: shiep.rect.right = 0
screen.blit(bg, (0,0))
screen.blit(shiep.sprite, shiep.rect)
if count == 5: l.append(Asteroid(random.randint(0,640), -30))
if random.randint(0,60) == 5: c.append(Coin(random.randint(0,640), -30))
for i in l:
i.rect.y += 15
screen.blit(i.sprite, i.rect)
if i.rect.y >= 700: l.remove(i)
if pygame.sprite.collide_mask(shiep, i): quit()
for i in c:
i.rect.y += 15
screen.blit(i.sprite, i.rect)
if i.rect.y >= 700: c.remove(i)
if pygame.sprite.collide_mask(shiep, i):
c.remove(i)
score += 100
score_text = Text("Score : "+str(score),10,25,None,50,'White',True)
screen.blit(score_text.text, score_text.rect)
ammo_text = Text("Balles : "+str(ammo),450,25,None,50,'White',True)
screen.blit(ammo_text.text, ammo_text.rect)
score += 1
elif menu == 1:
pass
pygame.display.update()
clock.tick(60)
Vu que vous ne possedez pas les fichiers nécéssaires, je vous donne l'erreur qu'on m'a donné :
Traceback (most recent call last):
File "c:\Users\Meziane\Desktop\space\main.py", line 99, in <module>
if count == 5: l.append(Asteroid(random.randint(0,640), -30))
File "c:\Users\Meziane\Desktop\space\main.py", line 40, in __init__
super().__init__(x,y,'asteroid.png')
File "C:\Users\Meziane\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pygame\sprite.py", line 116, in __init__
self.add(*groups)
File "C:\Users\Meziane\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pygame\sprite.py", line 134, in add
self.add(*group)
TypeError: pygame.sprite.Sprite.add() argument after * must be an iterable, not int
Merci de votre aide ^^
A voir également:
- Problème avec mon jeu Pygame
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu logo - Télécharger - Jeux vidéo
- Jeu google - Guide
2 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour,
es-tu certain de ta ligne 38?
la ligne 38 est la ligne 37 dans mon code je pense qu'il y a du avoir un decalement de ligne
Es-tu certain de la déclaration de "class Asteroid"?