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

Programmation multimédia/Jeux Python Discussion :

Création d'un snake avec Pygame


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut Création d'un snake avec Pygame
    Bonjour je voudrais savoir si qulqu'un peut me dire comment faire pour que lorsque le bonhomme touche la pomme celle-ci disparait et apparait aléatoirement

    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
    import pygame
    from pygame.locals import *
    from random import randint
    SPEED = 3
     
    class Perso(object) :
        "Personnage"
        def __init__(self, screen) :
            self.screen = screen
            self.image = pygame.image.load("perso.png").convert_alpha()
            self.pos = self.image.get_rect()
            self.screen.blit(self.image, (0,0))
     
        def deplacement(self, direction) :
            "permet de bouger le perso"
            if direction == "droite" :
                self.pos = self.pos.move(SPEED,0)
            elif direction == "gauche" :
                self.pos = self.pos.move(-SPEED,0)
            elif direction == "haut" :
                self.pos = self.pos.move(0,-SPEED)
            elif direction == "bas" :
                self.pos = self.pos.move(0,SPEED)
     
     
        def __init__(self, screen) :
            self.screen = screen
            self.image = pygame.image.load("pomme.png").convert_alpha()
            self.pos = self.image
            self.screen.blit(self.image, (1,0))
     
     
     
     
    pygame.init()
    pygame.key.set_repeat(1,1)
     
    clock = pygame.time.Clock()
    size = width, height = 640,480
    screen = pygame.display.set_mode(size)
    bg = pygame.image.load("background.jpg").convert()
    dk = Perso(screen)
    pm = Pomme(screen)
    food = 0
     
    continuer = 1 #on initialise la variable continuer
    while continuer :
        for event in pygame.event.get() :
            if event.type == QUIT :
                continuer = False
            if event.type == KEYDOWN :
                if event.key == K_h :
                    # on teste la position suivante pour
                    # voir si il y a collision :
                    next_pos = dk.pos.move(0,SPEED)
                    if dk.pos.top >10 : # pas de while
                        dk.deplacement("haut")
                if event.key == K_b :
                    next_pos = dk.pos.move(0,SPEED)
                    if dk.pos.bottom<height:
                        dk.deplacement("bas")
                if event.key == K_d :
                    next_pos = dk.pos.move(SPEED,0)
                    if dk.pos.right<width :
                        dk.deplacement("droite")
                if event.key == K_g :
                    next_pos = dk.pos.move(SPEED,0)
                    if dk.pos.left>0:
                        dk.deplacement("gauche")
     
        if food == 0:                                             # si food = 0 ( qu'il n'y a pas de pomme )
            food += 1                                             # on ajoute 1 ( car on va faire apparaitre une pomme )
            x = randint(1,540)                                    # coordonées aléatoires x et y ( -100 psk taille image = 100 px )
            y = randint(1,380)
            pm.pos = (x,y)                                        # la pomme prend les coordonnées de ces valeurs aléatoires
        if dk.pos == pm.pos:
            print("caca")
     
    # Mise à jour de l'affichage :        
        screen.blit(bg, (0,0))
        screen.blit(dk.image, dk.pos)
        screen.blit(pm.image, pm.pos)
        pygame.display.update()
        clock.tick(4000)             
     
    pygame.quit()

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    pm.pos vaut un objet Rect dans ta classe, mais là tu l'écrases par un tuple.
    Ce serait donc qu'il faudrait utiliser.

    Ensuite :
    Ici tu compares 2 objets Rect (après modification de ce qui précède), la condition sera toujours fausse, à moins que la pomme ne soit exactement à la même position et de même dimension que le personnage (il me semble que c'est ça, voir la méthode __equal__ de Rect).

    Pour tester si ton personnage est entré en contact avec la pomme, tu peux utiliser la méthode colliderect de ton objet Rect.
    Si tu as besoin d'avoir un temps défini avant la réapparition de la pomme, il faut regarder dans le module time de pygame ce qui pourrait convenir.

    Note qu'il faudra faire attention à ne pas faire réapparaître la pomme là où se situe ton personnage.

    Ouch, 4000 frames par seconde, tu vas faire fumer ton processeur et/ou ta carte graphique ^^
    Bon je me doute que 4000 par secondes ça peut pas suivre niveau matos à moins d'avoir l'ordi de la mort qui déchire tout.
    Généralement 30 fps suffisent, plus (60, ..., 120) si on veut un meilleur temps de réactivité, fluidité, tout dépend du jeu en question, il faut trouver le bon équilibre.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    Je ne comprend pas ce que tu veux dire

Discussions similaires

  1. création automatique de table avec createdb??
    Par champion dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/09/2004, 09h01
  2. Réponses: 2
    Dernier message: 27/07/2004, 14h38
  3. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58
  4. création base de données avec easyphp
    Par Battosaiii dans le forum Débuter
    Réponses: 5
    Dernier message: 29/06/2004, 18h50
  5. Création d'une base avec IbConsole
    Par Lucien dans le forum Outils
    Réponses: 3
    Dernier message: 02/03/2004, 18h34

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