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 :

Problème de hitboxs (sans sprites)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Par défaut Problème de hitboxs (sans sprites)
    Bonjour, voila, je suis en terminale et j'ai pris l'option ISN..

    Avec des amis on à donc crée un jeu. "Le joueur contrôle, grâce à la pression d'un bouton le héro. Celui-ci est dans un vaisseau spatial et dans l'espace. (Dans le jeu, c'est représenté par un genre de couloir vide en 2D / de profil). Dès que l'on appuie sur la touche « flèche du haut » le personnage change de position : soit le personnage monte au plafond, soit il descend (En gros, soit il a les pieds au sol, soit les pieds au plafond et la tête en bas). Il reste ainsi à la même hauteur tant que la touche n'est pas actionnée. (J’espère vraiment que c'est assez clair...)

    Or j'ai un problème: J’essaie de créer des collisions entre les caisses et le personnage. Mais je n'arrive pas, dans mon code, à différencier les caisses aux plafond et celles au sol pour faire disparaître le perso (Je n'arrive pas à gérer les Y, alors que pour le X, cela marche très bien.. mais du coup, seul, ça sert un peu à rien)

    De plus, maintenant, j'ai le problème " 'int' object has no attribute '__getitem__' " qui est venu.. J'ai cherché sur les internets mais pas moyens de comprendre comment ça marche...

    je met mon code complet plus bas en espérant avoir été assez clair et en espérant que quelqu'un puisse m'aider ... (J'ai mis des étoiles devant la partie où je suis bloqué pour vous aidez à trouver..)

    Sinon, merci d'avance pour l'aide que vous apporterez !!!!






    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
     
    #importation des bibliotheques nécessaires
    import random
    import pygame
    from pygame.locals import *
    pygame.init()
    horloge = pygame.time.Clock()
    from math import sqrt
     
    # Initialisation de la fenetre
    pygame.init()
     
    # Creation de la fenetre
    fenetre = pygame.display.set_mode((800,600))
     
    # Variable qui continue la boucle si = 1, stoppe si = 0
    continuer = 1
    affichage_jeu = True
    #Chargement et collage du fond
    fond = pygame.image.load("imagespatial.png").convert()
    fenetre.blit(fond, (0,0))
     
    #Chargement et collage du personnage
    perso = pygame.image.load("patate.png").convert_alpha()
    position_perso = [150,275]
    en_bas = True
     
    #Chargement et collage de l'alien
    perso2 = pygame.image.load("alien.png").convert_alpha()
    position_perso2 = [-40,200]
     
    #Chargement et collage du hublot
    vd_hublot = [-5,0.25]
    # XXX
    x_hublot_init = 850
    y_hublot_init = 225
    hublot = pygame.image.load("hublot.png").convert_alpha()
    #fenetre.blit(hublot, (int(x_hublot), int(y_hublot)))
     
    positions_hublots = [ [10,267.0], [210,257.0],  [410,247.0], [610,237.0], [810,227.0] ]
     
     
    #Chargement et collage de la caisse
    vd_caisse = [-5,0.25]
    caisse = pygame.image.load("caisse.png").convert_alpha()
    x_caisse_init = 850
    y_caisse_init_haut = 157
    y_caisse_init_bas =298
    #fenetre.blit(caisse, (int(x_caisse), int(y_caisse)))
     
     
    MAX_CAISSES=4
    positions_caisses = [ [180,200], [650, 230], [500, 235], [760,230] ]
    positions_caisses = list()
     
     
     
     
    # horloge pour ralentir
    horloge = pygame.time.Clock()
     
     
    fenetre.blit(perso,position_perso)
    fenetre.blit(perso2,position_perso2)
     
    #Rafraichissement de l'écran car l'image ne peut pas s'afficher autrement
    pygame.display.flip()
     
    score = 0
    #BOUCLE INFINIE
    continuer = 1
    while continuer:
     
        # 30 fps image par seconde
        horloge.tick(40)
     
        for event in pygame.event.get():    #Attente des événements
            if event.type == QUIT:    # (ALT F4 ou appuyer sur la croix) 
                continuer = 0
     
            if event.type == KEYDOWN:
                if event.key == K_UP: #Si "fleche du haut"
                    #On fait sauter le personnage pour le coller au plafond
                    perso = pygame.transform.rotate(perso, 180)
                    if en_bas :
                        position_perso[0] = position_perso[0]+30
                        position_perso[1] = position_perso[1]-65
                        en_bas = False
                    else :
                        position_perso[0] = position_perso[0]-30
                        position_perso[1] = position_perso[1]+65
                        en_bas = True
     
     
     
     # faut-il creer une caisse ?
        if random.random() > 0.95 :
     
            # verifier que la caisse n'est pas trop pres de la precedente...
            if len(positions_caisses) >0 :
                position_derniere_caisse = positions_caisses[-1]
                print position_derniere_caisse
                print - ( position_derniere_caisse[0] - x_caisse_init )
                if x_caisse_init - position_derniere_caisse[0] >  150 :
                    # faut-il la creer en haut ou en bas ?
                    if random.random() > 0.5 :
                        positions_caisses.append([x_caisse_init, y_caisse_init_haut])
                    else :
                        positions_caisses.append([x_caisse_init, y_caisse_init_bas])
            else :
                if random.random() > 0.5 :
                    positions_caisses.append([x_caisse_init, y_caisse_init_haut])
                else :
                    positions_caisses.append([x_caisse_init, y_caisse_init_bas])
     
     
     
     
     
     
        #Re_collage caisses
     
        # deplacer toutes les caisses de vd_caisse
        for i in range(len(positions_caisses)) :
     
            print positions_caisses
     
            positions_caisses[i][0] = positions_caisses[i][0] + vd_caisse[0]
            positions_caisses[i][1] = positions_caisses[i][1] + vd_caisse[1]
     
            #collisions 
            #print '***************************'
            #print position_perso[1]
            #print positions_caisses[i][1]
            #print sqrt(((position_perso[1]) - (positions_caisses[i][1]))**2)
            #print '***************************'
    *        if en_bas == False:
    *
    *                if (position_perso[0] +50 > positions_caisses[i][0]) and (position_perso[i][1] <  positions_caisses[i][1])  :
    *                        affichage_jeu = False
    *
    *        if en_bas == True:
    *
    *                if (position_perso[0] +50 > positions_caisses[i][0]) and (position_perso[i][1] < positions_caisses[i][1]) :
    *
    *                        affichage_jeu == False
    *
     
     
        # enlever la caisse qui sort de l'ecran
        if len(positions_caisses)>0 and positions_caisses[0][0] < -75 :
            positions_caisses.remove(positions_caisses[0])
            score = score + 1
     
     
     
         #Re_collage hublot
     
        for i in range(len(positions_hublots)) :
            positions_hublots[i][0] = positions_hublots[i][0] + vd_hublot[0]
            positions_hublots[i][1] = positions_hublots[i][1] + vd_hublot[1]
     
            if positions_hublots[i][0] < -250 :
                positions_hublots[i][0] = x_hublot_init
                positions_hublots[i][1] = y_hublot_init
     
     
     
     
     
        #Re_collage personnages
        fenetre.blit(fond,(0,0))
        for x,y in positions_hublots :
            fenetre.blit(hublot, (int(x), int(y)))
        fenetre.blit(perso2, position_perso2)
        for x,y in positions_caisses :
            fenetre.blit(caisse, (int(x), int(y)))
        if affichage_jeu:
            fenetre.blit(perso, position_perso)
     
        #affichage du score à l'écran
        print 'score : ', score
        font = pygame.font.Font(None, 36)
        text = font.render(str(score), 1,(180, 100, 20))
        textpos = text.get_rect()
        textpos.centerx = 730
        textpos.centery = 530
        fenetre.blit(text, textpos)
     
     
        #Rafraichissement
        pygame.display.flip()

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Par défaut
    Je me permet de Up mon topic du fait que je dois absolument rendre ce code (si possible complet hein..) demain matin..
    S'il vous plait !!

Discussions similaires

  1. Problème de requêtes sans requêtes imbriquées
    Par toddy_101 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/12/2006, 10h27
  2. Problème clavier/souris sans fil logitech
    Par arnaud_verlaine dans le forum Windows XP
    Réponses: 4
    Dernier message: 20/12/2006, 10h48
  3. problème d'installation sans lecteur de cdrom
    Par ouakammathieu dans le forum Ordinateurs
    Réponses: 6
    Dernier message: 04/12/2006, 20h55
  4. Réponses: 2
    Dernier message: 02/08/2006, 17h21
  5. problème avec les point sprites
    Par conrad dans le forum DirectX
    Réponses: 2
    Dernier message: 14/07/2005, 18h44

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