IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Devoir sur PyGame Python


Sujet :

Python

Vue hybride

Guillaume68 Devoir sur PyGame Python 05/01/2020, 12h27
wiztricks Salut, Vous avez omis... 05/01/2020, 13h46
Guillaume68 Lorsque je lance le... 05/01/2020, 14h03
ABD-Z Effectivement, tu dois revoir... 05/01/2020, 15h35
Guillaume68 Je ne sais pas comment faire... 05/01/2020, 16h02
wiztricks Salut, L'indentation... 05/01/2020, 17h34
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2020
    Messages : 8
    Par défaut Devoir sur PyGame Python
    Bonjour à toutes et à tous, je viens chercher l'aide de quelqu'un car j'ai un devoirs a faire sur python. C'est un jeux sur Pygame appelé " Les envahisseurs de l'espace " et je rencontre quelques problèmes dans mes lignes de code. Le lien du script est http://phassenforder.free.fr/NSI/TP/Chapitre5.htm pour les plus curieux. Mon programme est:
    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
    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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
     #########################################
    # Programme écrit par Guillaume Serrano 1G4 #
    #########################################
    i=0
    import random
    def niveau(n):
    	"""Cette fonction génère des coordonnées de retangles aléatoirement"""
    	if n==1:
    		for i in range(100,500,50):
    			aliens.append(pygame.Rect(i,random.randint(100,200),31,24))
    import pygame,sys
    from pygame.locals import *
     
    pygame.init()
    pygame.font.init()
    fenetre_jeu=pygame.display.set_mode((450,560))    	# Taille fenêtre du jeu en pixels
    pygame.display.set_caption('SpaceInvader')          	# titre de la fenêtre
     
    #############################
    # Déclaration des variables #
    #############################
    tps_tir_alien =  i + random.randint(15,60)
    missiles_aliens=[]
    vitesse=1
    missiles=[(12,12)]
    deplace_missiles_aliens()
    def placer_aliens(image):
        """Cette fonction permet de placer les aliens dans la fenêtre de jeu"""
        for alien in aliens:
            fenetre_jeu.blit(image,alien)
    pygame.display.update()
    def detecte_collision():
    	for missile in missiles:
    		for alien in aliens:
    			if missile.colliderect(alien):
                    aliens.remove(alien)
                    missiles.remove(missile)
    def deplace_aliens(x,y):
    	for alien in aliens:
    		alien.left + = x
    		alien.top + = y
    pygame.display.update()
    def change_sens_aliens():
    	vitesse
    		if x>440 or y<10
    			vitesse=-vitesse
    			déplace aliens (0,10)
    			stop	(break)
    def ajouter_tir_alien()
    	choix=random.choice(aliens)
    	missiles_aliens.append(pygame.Rect(choix.left+12,choix.botom,6,16))
     
    Gauche = False
    Droite = False
    Texty = pygame.font.Font('SUPERPOI_R.TTF', 10)
    Obj_texte = Texty.render('les envahisseurs', 0, (0,0,255))
    clock = pygame.time.Clock()
    vaisseau = pygame.image.load('vaisseau.png')
    rectangle_vaisseau = pygame.Rect(20,500,31,32)
    img_aliens=[pygame.image.load('invader1.png'),pygame.image.load('invader2.png')]
    rectangle_vaisseau = pygame.Rect(20,500,31,32)
    aliens[]
     
     
    #####################################
    # Fonction de détection des Touches #
    #####################################
    def detecte_touches():
        global Gauche,Droite
     
        for event in pygame.event.get():
            if event.type==QUIT:		# Traite l'évènement fermer la fenêtre avec la souris
                    pygame.quit()
                    sys.exit()
            if event.type== KEYDOWN:	# Traiter les évènements du clavier
                if event.key==K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                if event.key==K_RIGHT:
                    Droite = True
                if event.key==K_LEFT:
                    Gauche = True
     
            if event.type== KEYUP:
                if event.key==K_RIGHT:
                    Droite = False
                if event.key==K_LEFT:
                    Gauche = False
                if event.key==K_SPACE:
                    missiles.append(pygame.Rect(rectangle_vaisseau.left+12,rectangle_vaisseau.top,6,16))
     
    def niveau(n):
        niveau(1)
    	if n = 2:
    		for y (100,250)50:
    			 for x (75,300)50:
    				aliens (x,y,31,24)
    #####################
    # BOUCLE PRINCIPALE #
    #####################
    if tps_tir_alien=i:
    	tps_tir_alien=i+random.randint(15,60)
    	ajouter_tir_alien()
    deplace_aliens(vitesse,0)
    niveau(2)
    detect_collision()
    i+=1
    placer_aliens(img_aliens[(i//15)%2])	# Changement d'image toutes les 0.5 secondes si FPS=30
    def deplace_missiles():
        """ Cette fonction permet de changer les coordonnées des missiles contenu dans la liste missiles"""
        for missile in missiles:				# pour chaque missiles existant
            missile.top=missile.top-10			# soustraire 10 à la coordonnée du point haut
            pygame.draw.rect(fenetre_jeu,0xFF0000,missile)	# dessinner un rectangle de couleur rouge
            if missile.top<=100:				# si le missiles arrive en haut de l'écran
                missiles.remove(missile)			# supprimer le missiles de la liste
    while True:
        fenetre_jeu.fill (0x00001A)		# Remplir l'arrieère plan avec la couleur RVB Bleu foncé
        fenetre_jeu.blit(Obj_texte,(50,20))			# Placer le texte
        fenetre_jeu.blit(vaisseau,rectangle_vaisseau)	# placer l'image
     
        detecte_touches()
     
        # Déplacement du vaisseau d'un pixel
        if Gauche and rectangle_vaisseau.left > 10 : rectangle_vaisseau.left -= 5
        if Droite and rectangle_vaisseau.right < 440 : rectangle_vaisseau.right += 5
     
        pygame.display.update()				# rafraichir l'affichage de la fenêtre jeu
        clock.tick(30)					# Vitesse du jeu : 30 FPS
    Merci d'avance a ceux qui me corrigeront

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Salut,

    Citation Envoyé par Guillaume68 Voir le message
    je rencontre quelques problèmes dans mes lignes de code.
    Vous avez omis de décrire ces problèmes.

    Ce qui veut dire recopier votre code et le lancer en espérant voir quelque chose qui risque d'être différent de ce qui vous amène ici ou de se farcir la lecture de votre code pour imaginer ce qu'il peut bien s'y passer...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2020
    Messages : 8
    Par défaut
    Lorsque je lance le programme, la ligne 36 "aliens.remove(alien)" s'affiche en rouge comme erreur de syntaxe. Je ne vois pas où est l'erreur ( je suis dans ma première année d'apprentissage de code :/).

  4. #4
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Guillaume68 Voir le message
    Lorsque je lance le programme, la ligne 36 "aliens.remove(alien)" s'affiche en rouge comme erreur de syntaxe. Je ne vois pas où est l'erreur ( je suis dans ma première année d'apprentissage de code :/).
    Effectivement, tu dois revoir ton code ligne 36.
    Regarde bien ta condition, son bloc n'est pas indenté, ce qui génère une erreur.

    EDIT : on indente avec une tabulation en Python

  5. #5
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2020
    Messages : 8
    Par défaut
    Je ne sais pas comment faire ça, j'étudie depuis septembre et je n'ai jamais vu ça ? Pourriez-vous me dire comment faire ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Salut,

    Citation Envoyé par Guillaume68 Voir le message
    Je ne sais pas comment faire ça, j'étudie depuis septembre et je n'ai jamais vu ça ? Pourriez-vous me dire comment faire ?
    L'indentation fait partie de la syntaxe de base du langage: ouvrez un tuto. c'est bien expliqué.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Guillaume68 Voir le message
    Je ne sais pas comment faire ça, j'étudie depuis septembre et je n'ai jamais vu ça ? Pourriez-vous me dire comment faire ?
    Qu'est-ce que tu n'as pas vu? Comment indenter avec une tabulation? Mais t'as quel âge?
    Bon... Indenter c'est mettre un espace pour que ça soit clair. Tu as remarqué qu'en Python il faut mettre un espacement pour rentrer dans un bloc if, while ou autre.
    Là tu comprends?
    En Python, cet espacement qu'on appelle indentation ce fait avec le bouton tabulation. Ça ressemble à ça : Nom : tab.png
Affichages : 457
Taille : 81,3 Ko

    Concernant ton code, suffit de mettre deux tabulations et c'est bon.
    Regarde bien la ligne 36, tu as un bloc if dans un bloc for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for alien in aliens:
    	if missile.colliderect(alien):
    aliens.remove(alien)
    missiles.remove(missile)
    aliens.remove(alien) et missiles.remove(missile)font partie du bloc if missile.colliderect(alien): donc il faudra indenter en appuyant sur tabulation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for alien in aliens:
    	if missile.colliderect(alien):
                 aliens.remove(alien)
                 missiles.remove(missile)
    ATTENTION, ne copie colle pas mon code, je l'ai fait avec des espaces, ce qui n'est pas bon en Python.



    En tout cas revois bien tes cours des python, renseigne toi en ligne et en anglais, c'est mieux.



    PS : mets plus d'espace entre les fonctions, ça c'est si tu comprends ce qu'est une fonction

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/10/2009, 08h54
  2. Réponses: 0
    Dernier message: 16/10/2009, 08h54
  3. exo devoirs sur semaphore
    Par azer355 dans le forum Linux
    Réponses: 1
    Dernier message: 06/06/2008, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo