Bonjour,
Je suis une extrême débutante. Je le précise car mon code va en désespérer plus d'un... Pour expliquer nous devons créer un jeu 2D sur pygame avec la version 2017.2.3 de python. Nous n'avons eu que 8h de cours sur python, nous avons donc appris a dessiner un rectangle, un carré, un rond... l'exercice du partiel est donc extrêmement difficile pour moi. J'essaie de fouiller les forums et tutos mais pour un novice c'est tout de même difficile.
Je cherche à créer un petit jeu. Mon personnage (Peach) doit récupérer les dollars sur son chemin afin de pouvoir acheter le château. Le perso marche donc et attrape les dollars pour arriver à la fin au château (point d'arrivée). (Sous la forme d'un jeu mario)
Je ne parviens pas à donner une position aux dollars et au chateau afin qu'ils soient positionnés par rapport au fond et non par rapport à la fenêtre. Je crois qu'on utilise des float parfois mais je ne sais pas si ça fonctionne.
Idéalement j'aimerai réussir à faire sauter peach, faire disparaitre les dollar quand elle les attrape et ajouter un compteur. Je voudrais aussi que lorsqu'elle arrive au chateau, si elle à tout les billets un message "Well Done" s'affiche ou sinon pouvoir recommencer le jeu. (Si vous avez des idées pour m'aider et que vous avez pitié d'une étudiante qui est notée au semestre sur un jeu qui dépasse ces compétences je suis prenante ^^)
voici mon code :
def load_image(name):
image = pygame.image.load(name)
return image
WHITE=(255,255,255)
BLACK=(0,0,0)
BAS = 0
HAUT = 8
DROITE = 6
GAUCHE = 4
pygame.init()
pygame.display.set_caption('Fenetre')
pygame.key.set_repeat(50, 50)
ecran = pygame.display.set_mode((700, 550))
taille_sprite = 50
class Fond(pygame.sprite.Sprite):
def __init__(self):
super(Fond, self).__init__()
self.image = pygame.image.load("monderose.jpg")
self.image.set_colorkey(WHITE)
self.rect = self.image.get_rect()
def update(self):
if self.direction==1:
self.rect.x -= 5
elif self.direction == 2:
self.rect.x += 5
- chateau arrivee
class Chateau(pygame.sprite.Sprite):
def __init__(self):
super(Chateau, self).__init__()
self.image = pygame.image.load("chateau.png")
self.rect = self.image.get_rect()
self.rect.x=100
self.rect.y=450
class Dollar(pygame.sprite.Sprite):
def __init__(self):
super(Dollar, self).__init__()
self.image = pygame.image.load("dollar.png")
self.rect = self.image.get_rect()
#liste_coord_dollars_pixels = [(18*taille_sprite,1*taille_sprite),(6*taille_sprite,6*taille_sprite),
# (7*taille_sprite,11*taille_sprite),(20*taille_sprite,11*taille_sprite),
# (12*taille_sprite,16*taille_sprite),(1*taille_sprite,22*taille_sprite),(6*taille_sprite,22*taille_sprite),
# (30*taille_sprite,16*taille_sprite),(17*taille_sprite,23*taille_sprite),(9*taille_sprite,25*taille_sprite)]
# liste_coord_dollars_cases = [(550,400),(800,400),(120,400),(140,300),(220,400),(300,300),(540,300),(560,400),(800,400),(870,400)]
class Peach(pygame.sprite.Sprite):
def __init__(self):
super(Peach,self).__init__()
self.images = []
self.images.append(load_image('0b.png'))
self.images.append(load_image('0d.png'))
self.images.append(load_image('0ds.png'))
self.images.append(load_image('0g.png'))
self.images.append(load_image('0gs.png'))
self.index = 0
self.image = self.images[self.index]
self.rect = self.image.get_rect()
self.direction = BAS
def update(self):
for element in self.images:
if self.direction == 1:
self.index = 1 + (self.index + 1) % 3
self.image = self.images[self.index]
self.actif = 1
self.tourne = 0
if self.tourne == 0:
self.image = pygame.transform.flip(self.image, False, False)
self.rect.x += 0.5
if self.direction == 2:
for i in range(2,5):
i = i+1
i=i%5
self.index = 1+(self.index+1)%3
self.image = self.images[self.index]
self.rect.x -= 0
self.actif =1
self.tourne = 1
if self.tourne == 1:
self.image = pygame.transform.flip(self.image, True, False)
if self.direction == 0:
self.index = 0
self.image = self.images[self.index]
self.rect.x -= 0
self.actif = 0
if self.tourne == 1:
self.image = pygame.transform.flip(self.image, True, False)
if self.tourne == 0:
self.image = pygame.transform.flip(self.image, False, False)
#if self.direction == 3:
# self.rect.y += 5
if self.rect.x == 0:
self.rect.x = 10
if self.direction == 3:
self.rect.y =+ 5
liste_sprites=pygame.sprite.Group()
monsprite=Fond()
monsprite1=Dollar()
monsprite2=Chateau()
monsprite3=Peach()
Peachs=pygame.sprite.Group()
Peachs.add(monsprite)
Peachs.add(monsprite1)
Peachs.add(monsprite2)
Peachs.add(monsprite3)
monsprite.rect.x=-200
monsprite.rect.y=0
monsprite.change = 0
monsprite.direction = 0
monsprite.tourne =0
monsprite.actif =0
monsprite1.rect.x=400
monsprite1.rect.y=140
monsprite2.rect.x=500
monsprite2.rect.y=180
monsprite3.rect.x=300
monsprite3.rect.y=405
monsprite3.change = 0
monsprite3.direction = 0
monsprite3.tourne =0
monsprite3.actif =0
clock = pygame.time.Clock()
clock.tick(60)
while True:
Peachs.update()
Peachs.draw(ecran)
pygame.display.flip()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
touches = pygame.key.get_pressed()
if touches[K_RIGHT]:
monsprite.direction = 1
monsprite3.direction = 1
if touches[K_LEFT]:
monsprite.direction = 2
monsprite3.direction = 2
if touches[K_UP]:
monsprite.direction = 3
elif event.type == KEYUP:
monsprite.direction = 0
monsprite3.direction = 0
#i = len(liste_coord_dollars_cases)
#while i: # equivalent a i != 0
# if (monsprite3.rect.x == liste_coord_dollars_cases[i - 1]):
# print("+1")
# i -= 1
pygame.display.update()