Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1

    Inscrit en
    décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 10
    Points : -2
    Points
    -2

    Par défaut Script de recherche automatique de sprites

    Salut,

    J'ai suis entrain de faire mon TFE intutilé "Bananas Defender", c'est un Tower Defense dont le but est de protéger les bananes d'une invasion de Donkey Kong .

    Actuellement, j'ai finit de coder le système de génération de la map et je suis entrain de coder le système de création automatique de Donkey Kong et les faire automatiquement aller vers les bananes .

    Voici ma class DK qui est on va dire l'IA des Donkey Kong

    Code :
    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
    class DK:
     
    	#Classe permettant de générer les ennemis qui sont des Donkey Kong
     
    	def __init__(self, structure_niveau, png, niveau):
    		#Sprites du personnage
    		self.donkey = pygame.image.load(png).convert_alpha()
    		#Position du personnage en cases et en pixels
    		self.case_x = 0
    		self.case_y = 0
    		self.x = 0
    		self.y = 0
    		#Niveau dans lequel le personnage se trouve 
    		self.niveau = niveau
     
    	def rechercher(self,case_x,case_y):	
    			#Si un Donkey Kong arrive à la banane, on return 'end'
    			if structure_niveau[self.case_y][self.case_x+1] == 'd':
    				self.game = 'end'
    				return self.game
    			#Sinon on recherche le "way" obstacle sur la ligne
    			if structure_niveau[case_y][case_x+1] == 'w':
    				#Déplacement d'une vers la droite si c'est un "way"
    				self.case_x += 1
    				#Calcul de la position de de la case "way" pour Donkey Kong
    				self.x = case_x * 40
    				self.y = case_y * 40
    				self.new_pos = "(+self.x+,+self.y+)"
    				return self.new_pos					
     
    			#Si elle n'est pas sur la même ligne, on regarde si elle est sur la colone
    			elif structure_niveau[self.case_y+1][self.case_x] == 'w':
    				self.case_y += 1
    				self.x = case_x * 40
    				self.y = case_y * 40
    				self.new_pos = "(+self.x+,+self.y+)"
    				return self.new_pos

    Et voila comment j'esseye de générer mes 10 Donkey Kong

    Code :
    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
     
     
    #Combien d'ennemis 
    		nb_ennemis = 10
    		liste_ennemis = []
    		#Création de Donkey Kong
    		donkey = DK(structure_niveau, "image/dk.png", choix)
     
    		for event in pygame.event.get():
     
    			cpt_ennemis = 0
    			while (cpt_ennemis < nb_ennemis) :
     
    				#Affichages aux nouvelles positions
    				niveau.afficher(fenetre)
     
    				#Position par défault de Donkey Kong
    				"""image_dk = pygame.image.load(dkpng).convert()
    				fenetre.blit(image_dk,(0,0))"""
     
    				pygame.display.flip()
    				pygame.time.Clock().tick(1)
    				#Lancement de Donkey Kong
     
    				i = 0
    				x = 0
    				y = 0
    				o = 0
     
    				donkeyseek = donkey.rechercher(0,0)
     
    				liste_ennemis.append(donkey)
    				liste_ennemis.append[i](donkeyseek)
     
    				while liste_ennemis[i][o] != "end":
     
     
    					fenetre.blit(image_dk,donkey.rechercher(x,y))
    					pygame.display.flip()
     
    					new_pos = liste_ennemis[i][o]
    					liste_ennemis[i][o] = liste_ennemis[i][donkey.rechercher[new_pos]]
     
     
     
     
    				if liste_ennemis[i][o] == "end":
    					continuer_accueil = 0
    					continuer_jeu = 0
    					continuer = 0
    Voici mon erreur :
    liste_ennemis.append[i](donkeyseek)
    TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'

    Merci d'avance pour vos réponse

  2. #2
    Membre émérite
    Avatar de afranck64
    Homme Profil pro Franck Awounang N.
    Étudiant
    Inscrit en
    janvier 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Nom : Homme Franck Awounang N.
    Âge : 23
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2009
    Messages : 590
    Points : 923
    Points
    923

    Par défaut

    À la ligne 33, dans le code pour les 10 DK. Quelle est l'action souhaitée par ce code
    Code :
    				liste_ennemis.append[i](donkeyseek)
    car je vois que juste avant, le ".append" a été correctement utilisé.
    Et que les éléments de liste_ennemis ne sont pas des fonctions alors le est mal.

    les représentations de positions m'inquiètent un peu:
    Code :
    1
    2
    self.new_pos = "(+self.x+,+self.y+)"
    ...self.new_pos = "(+self.x+,+self.y+)"
    vu les <+> de part et d'autre, c'est pas pour se servir d'un éval (ce qui serait également une mauvaise idée).
    Pourquoi ne pas se servir de tuples ou listes?
    Code :
    selt.new_pos = (self.x, self.y)
    et là, c'est le même soucis: un <None>, liste/tuple vide ne ferait il pas l'affaire?
    Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tuto, Web, ...)
    - Tests déjà effectués

  3. #3

    Inscrit en
    décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 10
    Points : -2
    Points
    -2

    Par défaut

    Merci pour ta réponse

    Pour le moment je cherche a créer un Donkey Kong chaque seconde à la position (0,0) .Une fois crée, il cherche sa prochaine position grâce à la classe DK.rechercher (avec comme paramètre sa position actuel) afin de savoir si le sprite où il doit aller est en dessous de lui ou à sa droite .
    Mais une des autres difficultés est d’instancier les 10 Donkey Kong en même temps .

    Voila ce que je cherche à faire, et la j'ai un peu du mal a trouver la solution pour faire cela .

    Sinon pour le reste des erreurs voila ce que j'ai corrigé

    Code :
    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
    	def rechercher(self,case_x,case_y):	
    			#Si un Donkey Kong arrive à la banane, on return 'end'
    			if structure_niveau[self.case_y][self.case_x+1] == 'd':
    				return None
    			#Sinon on recherche le "way" obstacle sur la ligne
    			if structure_niveau[case_y][case_x+1] == 'w':
    				#Déplacement d'une vers la droite si c'est un "way"
    				self.case_x += 1
    				#Calcul de la position de de la case "way" pour Donkey Kong
    				self.x = case_x * 40
    				self.y = case_y * 40
    				def rechercher(self,case_x,case_y):	
    			#Si un Donkey Kong arrive à la banane, on return 'end'
    			if structure_niveau[self.case_y][self.case_x+1] == 'd':
    				return None
    			#Sinon on recherche le "way" obstacle sur la ligne
    			if structure_niveau[case_y][case_x+1] == 'w':
    				#Déplacement d'une vers la droite si c'est un "way"
    				self.case_x += 1
    				#Calcul de la position de de la case "way" pour Donkey Kong
    				self.x = case_x * 40
    				self.y = case_y * 40
    				self.new_pos = "(+self.x+,+self.y+)"
    				return self.new_pos					
     
    			#Si elle n'est pas sur la même ligne, on regarde si elle est sur la colone
    			elif structure_niveau[self.case_y+1][self.case_x] == 'w':
    				self.case_y += 1
    				self.x = case_x * 40
    				self.y = case_y * 40
    				self.new_pos = (self.x,self.y)
    				return self.new_pos				
    	self.new_pos = "(+self.x+,+self.y+)"
    				return self.new_pos					
     
    			#Si elle n'est pas sur la même ligne, on regarde si elle est sur la colone
    			elif structure_niveau[self.case_y+1][self.case_x] == 'w':
    				self.case_y += 1
    				self.x = case_x * 40
    				self.y = case_y * 40
    				self.new_pos = (self.x,self.y)
    				return self.new_pos

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •