Partage
  • Partager sur Facebook
  • Partager sur Twitter

[URGENT] Jeu Pygame.

Faire tirer un personnage en mouvement

Sujet résolu
17 mai 2015 à 22:31:53

Bonjour,

J'ai un gros problème dans la réalisation d'un projet pour l'option ISN de terminale, je doit créer un jeu avec mes camarades de type space invader, le joueur controle un personnage dans l'espace et doit tirer sur des soucoupes volantes (une pour l'instant) qui se déplacent de manière aléatoire dans la partie supérieure de l'écran. Mon problème est le suivant: je cherche a faire tirer régulièrement le personnage du joueur que nous appelerons héro. le fait est que je n'arrive pas a faire partir le missile depuis la position du héro.

j'ai éssayé simplement de faire quelque chose dans le genre:

position_missile = position_perso


mais ceci colle litéralement le missile au héro...

voila mon code:

# -*- coding: utf8 -*-
import pygame
from pygame.locals import *
from hero import *
from mouvalea import *
from pygame.mixer import music
import time
#importation de tous les modules dont notre programme a besoin

pygame.init()
#initialisation de pygame

run = True
speed = [1,1]
tick1 = pygame.time.get_ticks()
cole = False
fenetre = pygame.display.set_mode((1024, 668))

#création de la variable horloge pour gerer la vitesse PNJ
horloge = pygame.time.Clock()

#appel de la musique du jeu
#pygame.mixer.music.load("music.ogg")

#initialisation du fond
fond = pygame.image.load("fondjeu.jpg").convert()
fenetre.blit(fond, (0,0))

#initialisation du mechant
mechant = pygame.image.load("vaisseaumechant.png").convert()
pos_mechant = mechant.get_rect(center = (150, 150))
mechant.set_colorkey((255,255,255))
fenetre.blit(mechant, pos_mechant)

vie = pygame.image.load("vie.png").convert()
pos_vie = [982, 0]

vie.set_colorkey((255,255,255))
fenetre.blit(vie, pos_vie)

vie1 = pygame.image.load("vie.png").convert()
pos_vie1 = [940, 0]
vie1.set_colorkey((255,255,255))
fenetre.blit(vie1, pos_vie1)

vie2 = pygame.image.load("vie.png").convert()
pos_vie2 = [898, 0]
vie2.set_colorkey((255,255,255))
fenetre.blit(vie2, pos_vie2)

#initialisation du héro
perso = pygame.image.load("hero.png").convert()
pos_perso = perso.get_rect(center = (550, 550))
perso.set_colorkey((255,255,255))
fenetre.blit(perso, pos_perso)

missile = pygame.image.load("missile.png").convert_alpha()
pos_missile1 = [500,500]
pos_missile2 = pos_mechant



pygame.display.flip()
print pos_perso
#pour pouvoir rester appuyer on lance ce module qui va répéter l'action toutes les 2 milisecondes
pygame.key.set_repeat(20,2)

def tirgentil (pos_missile1,pos_perso):




if pos_missile1[1] >= 0:
pos_missile1[1] -= 1
else:
cole = False

return pos_missile1



#la musique du jeu se met en marche
#pygame.mixer.music.play()
#la boucle principale du jeu
while run:
#a chaque tour de boucle on refixe les images aux nouvelles positions
pos_mechant = mouv_alea(speed, pos_mechant)

fenetre.blit(fond, (0,0))
fenetre.blit(mechant, pos_mechant)
fenetre.blit(perso, pos_perso)
fenetre.blit(vie, pos_vie)
fenetre.blit(vie1, pos_vie1)
fenetre.blit(vie2, pos_vie2)
if cole == True:
fenetre.blit(missile,pos_missile1)
#puis on met a jour la fenetre
pygame.display.flip()

#cette action permet de controler la vitesse du PNJ (un mouvement tous les 300 milisecondes
horloge.tick(200)

keyp = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key in (K_DOWN, K_UP, K_LEFT, K_RIGHT):
pos_perso = mouvement_hero(event.key, pos_perso)
if pygame.time.get_ticks()- tick1 > 1:
tick1 = pygame.time.get_ticks()
pos_missile1 = tirgentil(pos_missile1,pos_perso)
cole = True

if keyp[pygame.K_ESCAPE]:
pygame.quit()
run = False

Merci d'avance pour vos réponses.

PS: Mon projet est à rendre dans très peu de temps je pensais en avoir fini avec cette fonction mais je reste bloqué devant mon problème..

-
Edité par éNygmatik 17 mai 2015 à 23:02:44

  • Partager sur Facebook
  • Partager sur Twitter
18 mai 2015 à 14:29:45

Salut,

Avant la boucle principale tu met:

position_missile = position_perso


Puis ensuite tu rajoutes

position_missile.move(x,y)

dans la boucle avec les valeurs que tu veux dans x et y

  • Partager sur Facebook
  • Partager sur Twitter
18 mai 2015 à 21:38:10

Bonsoir,

Merci de votre réponse j'ai finalement trouvé la solution.

j'avais pensé a mettre un

position_missile.move(x,y)

mais le .move() de pygame n'a pas l'air de fonctionner et mon problème était finalement que je n'utilisais pas la fonction copy() des rects de pygame pour faire apparaitre le missile au bon endroit !

voila la ligne qui fonctionne:

pos_missile1 = pos_perso.copy()

si on met seulement

position_missile = position_perso

les deux rectangles sont comme "collés"



  • Partager sur Facebook
  • Partager sur Twitter