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 :

Aide code python tableau a deux dimension


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Aide code python tableau a deux dimension
    Bonjour a tous je suiis debutant sur python j'ai besoin d'aide sur un projet, j'ai fait le debut mais je bloque un peu sur la fin


    on me demande de creer Créer une fonction deplacePersonnage qui prend deux arguments : la carte (carte), et les coordonnées du personnage (coordonnées_perso). Cette fonction :

    demande à l’utilisateur la direction vers laquelle déplacer le personnage (n=Nord, s=Sud, e=Est, o=Ouest) ou q (pour quitter le jeu). Si q est tapé, la fonction retournera -1000

    Le tableau de coordonnées coordonnees_perso sera réactualisé en fonction du déplacement du personnage:

    en tenant compte des obstacles du tableau : le personnage ne peut pas passer à travers un obstacle. Il reste sur place.

    le personnage ne peut pas aller au-delà d’un bord de la carte, il reste sur place

    dans tous les autres cas, le personnage se déplace dans la direction souhaitée par le joueur.

    la carte est actualisée suivant le type de case sur laquelle s’est arrêté le personnage :

    le sol : pas de changement sur cette case

    un obstacle, le personnage n’a pas pu aller sur cette case qui reste inchangée

    de la nourriture : la nourriture disparait (puisque le joueur la prend) et la case devient sol

    un prédateur : le prédateur reste, pas de changement sur cette case.

    la fonction retourne la valeur en terme de perte ou gain d’énergie de la case sur laquelle le joueur s’était arrêté ;

    pour le sol : suivant le sol sur lequel le personnage se déplace, il perd 1, 2 ou 3 points d’énergie, la fonction retourne donc -1, -2 ou -3.

    pour la nourriture: suivant la nourriture sur laquelle le personnage est tombé, il gagne 5, 10 ou 15 points d’énergie, la fonction retourne donc 5, 10 ou 15

    pour les prédateurs: suivant le prédateur sur lequel le personnage est tombé, il perd 5, 10 ou 15 points d’énergie, la fonction retourne donc -5, -10 ou -15

    si le personnage n’a pu se déplacer à cause d’un obstacle ou du bord, il n’y a ni gain ni perte d’énergie, et la fonction retourne 0

    dans le cas où le personnage est arrivé à la case maison, la valeur 1000 est retournée

    Déplacement
    En appelant les fonctions deplacePersonnage et afficheCarte, le joueur peut déplacer son personnage . La carte éventuellement mise à jour et avec la nouvelle position du joueur doit être réaffichée à chaque fois. Tant que le personnage n’a pas rejoint sa maison et que le personnage n’est pas mort (énergie tombé à 0), le joueur continuera à déplacer son personnage.

    Le jeu
    Un compteur d’énergie (initialement à 50) est incrémentée ou décrémenté au fur et à mesure des déplacements et actions du personnage.

    Complétez votre programme afin que :

    le compteur d’énergie soit réactualisé en fonction des évènements et affiché à chaque réactualisation de la carte

    le jeu se termine dans un des trois cas suivants :

    le joueur est arrivé à la maison (la fonction deplacePersonnage a retourné 1000). Dans ce cas, le joueur a gagné

    le joueur est passé à 0 point d’énergie. Dans ce cas, il a perdu

    le joueur a appuyé sur « q » pour quitter volontairement le jeu (la fonction deplacePersonnage a retourné -1000). Dans ce cas, le jeu se termine.
    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
    import random
     
     
     
    abscisse = 10                                           
    ordonnee = 20                                           
    grille=[]
     
     
     
    T=["S1","S2","S3","O1","O2","O3","N1","N2","N3","P1","P2","P3"]
    maison="M"
     
     
     
    for i in range (ordonnee):                              
        nouvelle_ligne=[]                                       
        for j in range (abscisse):                              
            a=T[random.randint(0,11)]
            nouvelle_ligne.append (a)                             
     
     
        grille.append (nouvelle_ligne)                 
     
    def afficheCartePourDebug(ordonnee,abscisse):                     
        for i in range (ordonnee):                                  
            for j in range (abscisse):                                      
                print(str(grille[i][j]),end="\t")                                   
            print()                                                               
     
     
    grille[19][9]="M"
    grille[1][1]="X" 
    def afficheCarte(grille):
     
     
     
        for i in range (ordonnee):                                  
            for j in range (abscisse):                                      
                if grille[i][j]=="N1":
                    grille[i][j]="*"
                elif grille[i][j]=="N2":
                    grille[i][j]="**"
                elif grille[i][j]=="N3":
                    grille[i][j]="***"
                elif grille[i][j]=="S1":
                    grille[i][j]="+"
                elif grille[i][j]=="S2":
                    grille[i][j]="++"
                elif grille[i][j]=="S3":
                    grille[i][j]="+++"
                elif grille[i][j]=="O1":
                    grille[i][j]="0"
                elif grille[i][j]=="O2":
                    grille[i][j]="00"
                elif grille[i][j]=="O3":
                    grille[i][j]="000"
     
     
     
                print(str(grille[i][j]),end="\t")                                 
            print()                                                               
     
     
     
    afficheCarte(grille)

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Bonjour

    1) Vous expliquer asse bien ce que vous devez faire, par contre pas vraiment là ou est votre problème
    2) Maintenant coté code, je l'ai exécuté. Votre affichage est juste ultra ... merdique. On y comprend rien parce que les cases ne sont pas alignés. Pourquoi ne pas garder la représentation qui est dans la variable T ? Au moins là on sait que ça démarre par une lettre, qui code le type de case, puis un chiffre pour le nombre de points (que ce soit pour de la nourriture ou une proie ou autre). Et si vous voulez vraiment faire un affichage qui soit différents de la donnée stockée, alors ce n'est pas vraiment une bonne idée d'écraser les données de départ pour les mettre dans la forme affichage, car si vous avez à les remanipuler après (ce qui est le cas), et bien elle ne sont donc plus sous la forme que vous voulez.
    En fait la fonction afficheCartePourDebug, fait déjà très bien le job (à part qu'en paramètre elle devrait prendre grille, et pas ordonner et abscisses)...


    Enlever donc toute cette cosmétique d'abord. Ca fait grossir votre code inutilement, alors que celui n'est pas encore fonctionnel. Donc chaque chose en son temps, la cosmétique ca vient à la fin.
    Proposer nous qqch pour faire déplacer votre bonhomme maintenant. 1 seul et unique déplacement pour commencer, en capturant l'évolution du score lié à ce déplacement, que vous pouvez imposé meme dans un premier temps sans le demandé à l'utilisateur.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par papadiakhate Voir le message
    j'ai fait le debut mais je bloque un peu sur la fin
    Pas qu'un peu. Je pige rien à ce code !!! Il y a des actions, puis des fonctions définies, puis encore des actions... Un code ça se structure. On évalue de quoi on va avoir besoin (une fonction qui dessine la grille, une fonction qui déplace le perso, etc) puis on écrit les fonctions puis on les assemble. Comme des légos.
    Ensuite il y a tous ces if grille[i][j]=="N1": grille[i][j]="*". Pourquoi changer la valeur des cases de la grille? Pour l'affichage? Là tu pars droit dans le mur (de la grille!!!). Parce que tu changes le codage interne des choses tu ne pourras plus les réutiliser. Tu ne pourras plus détecter "N1" car tu n'auras plus "N1". Ok tu pourras détecter "*" mais dans ce cas pourquoi il y avait "N1" au début... En plus la fonction destinée à afficher la grille (donc à être appelée chaque fois qu'on veut afficher la grille à l'écran) fera alors un travail inutile (tous ces tests) puisque les "N1" auront disparu.

    Il te faut faire une dissociation entre la "représentation interne" de ton jeu et son "affichage externe". Un jeu d'échecs par exemple tu vois un bel alignement de cases blanches/noires mais en interne il y a juste un tableau de nombres allant de 1 à 64. Parce que c'est plus facile et plus rapide de traiter un nombre (pour déplacer un cavalier suffit de faire juste +6/-6 ou +10/-10 ou +15/-15 ou +17/-17 que if pos == "C3": pos="D5").
    Ce n'est pas trop tard pour bien refaire ce début de m... ce qui te permettra alors de faire facilement la fin.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/03/2006, 17h25
  2. Un string dans un tableau de deux dimensions...
    Par FinalSpirit dans le forum C++
    Réponses: 5
    Dernier message: 15/01/2006, 14h29
  3. [PERL] Trier un tableau a deux dimensions
    Par piregwan dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2005, 22h29
  4. Réponses: 6
    Dernier message: 26/11/2005, 19h55
  5. Réponses: 13
    Dernier message: 13/10/2005, 16h03

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