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()