Annonce

Réduire
Aucune annonce.

Robot en python

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Robot en python

    Bonjour à tous,
    Ce challenge consiste à agir sur un robot virtuel.
    L'objectif étant de vous former aux matrices, au Python et aux Jeux vidéo.
    Oui tout ça !

    CODE SOURCE

    Code:
    #!/usr/bin/python
    """ +\_________________/+
        ||                 ||
        ||       1er       ||
        ||    CHALLENGE    ||
        ||      PYTHON     ||
        ||                 ||
        ||   Par Yarflam   ||
        +/=================\+
        ||      NIVEAU     ||
        ||  INTERMEDIAIRE  ||
        ||                 ||
        ||  -- MATRICE --  ||
        +\=================/+ """
    
    class challenge:
     def __init__(self):
       # FONCTION PRINCIPALE
       self.map=[[0,0,0,0,0],[0,0,0,0,0],[1,2,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
       self.robot={'life':20, 'x':2, 'y':2}
       print '1-> OK' if (self.exe(1)) and (self.robot['y'] == 1) else self.error()
       print '2-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
       print '3-> OK' if (self.exe(4)) and (self.robot['life'] == 100) else self.error()
       print '4-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
       print '5-> OK' if (self.exe(5)) and (self.map[1][1] == 3) else self.error()
     def error(self):
       # GESTIONNAIRE DES ERREURS
       exec("print '__erreur__'\nraw_input()\nquit()")
     def exe(self,i):
       """
    
       ** ZONE MODIFIABLE **
    
       """
       return 1
    
    test=challenge()
    print "\nBRAVO !"
    raw_input()
    OBJECTIFS

    L'objectif est de définir des règles pour qu'un utilisateur extérieur puisse prendre le contrôle du robot.

    Votre terrain de jeu sera la zone modifiable. N'oubliez pas d'enlever le commentaire pour plus de clarté.

    Le challenge se présente en deux matrices:
    self.map -> définition de l'ensemble de la carte (Dimension 5x5)
    self.robot -> propriété du robot 'life' / 'x' / 'y'

    Votre robot se trouve par défaut au milieu de la carte 'x=2' et 'y=2'.
    Le coin en haut à droite est 'x=4' et 'y=0', pour vous donnez un exemple de la dimension.
    Code:
    [[0,0,0,0,0],
     [0,0,0,0,0],
     [1,2,X,0,0],
     [0,0,0,0,0],
     [0,0,0,0,0]]
    Le X dans le schéma montre l'emplacement de votre robot - en réalité il ne se trouve pas dans la matrice pour vous faciliter la tâche.
    Le 1 présente une collision: un bloc infranchissable.
    Le 2 de la nourriture qui donne 100% des points de vies.
    Le 3 qui ne se trouve pas par défaut dans le challenge mais qui permet de répondre à 5ème vérification définit un objet (n'importe lequel) posé par le robot.

    Si vous avez compris l'univers, plus qu'à passer aux exercices.

    Code:
       print '1-> OK' if (self.exe(1)) and (self.robot['y'] == 1) else self.error()
       print '2-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
       print '3-> OK' if (self.exe(4)) and (self.robot['life'] == 100) else self.error()
       print '4-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
       print '5-> OK' if (self.exe(5)) and (self.map[1][1] == 3) else self.error()
    Ces lignes sont vos exercices.
    La fonction self.exe(*) indique à la machine la commande à exécuter.
    Petite aide pour la première ligne: '1' donnera l'ordre de déplacer le robot vers le haut.

    Ces étapes permettent de vérifier votre code source, mais sont indépendantes de l'objectif principale.

    Une fois la première étape terminé, la seconde suit. Et vous pouvez voir votre avancement avec les différents messages d'alertes préprogrammés '1-> OK'.

    FOIRE AUX QUESTIONS

    > Quel est l'objectif ?

    De programmer une interface utilisateur pour contrôler le robot. L'idée est de checker les différentes étapes de la vérification, mais en vous laissant libre à votre imagination.

    > Le X est au milieu ? Le robot ?

    Oui. Tout au milieu.
    Rien n'est généré aléatoirement.

    > Un robot ?

    Oui et il ne pense pas. Il se contrôle et possède une barre de vie.
    Le robot peut récupérer de l'énergie en se trouvant sur une case avec la valeur 2.
    Et il ne peut pas avancer sur une case avec la valeur 1.
    Essayez déjà d'implémenter ces règles dans votre code source.

    > Faut-il mettre à jour la grille ?

    Oui, le système doit être logique. Si vous pensez qu'ajouter un X pour symboliser votre personnage dans la matrice vous aides, faites-le !

    > Y a t-il une vie maximum ?

    Non. L'idée n'est pas créer un jeu mais d'apprendre et de checker les étapes pour valider votre compétence. Vous pouvez donner une vie maximum si vous le souhaitez.

    > Dois-je lire cette présentation en diagonale ?

    Non. Toutefois les réponses se trouvent dans le code source, vous pourriez vous en débrouiller avec un minimum de ... logique ! (faudra que je crée un tutoriel sur la logique)

    Des questions ?! Non, alors GO GO GO !!!
    Si vous galérez poster votre code source.

    Bonne chance !
    Dernière modification par Yarflam, 09 mars 2013, 23h06.
    ~ Yarflam ~

    ❉ L'Univers se dirige vers son ultime perfection ❉

  • #2
    Le but de l'exercice est de faire quoi ? Enfin j'ai pas trop compris le but.
    Tu nous donne ça, mais faut faire quoi avec enfait ?

    Code:
     print '1-> OK' if (self.exe(1)) and (self.robot['y'] == 1) else self.error()
       print '2-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
       print '3-> OK' if (self.exe(4)) and (self.robot['life'] == 100) else self.error()
       print '4-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
       print '5-> OK' if (self.exe(5)) and (self.map[1][1] == 3) else self.error()


    Suivre Hackademics: Twitter, Google+, Facebook.

    Commentaire


    • #3
      @_47

      Je me posais également la même question, donc +1

      Commentaire


      • #4
        Envoyé par _47 Voir le message
        Le but de l'exercice est de faire quoi ? Enfin j'ai pas trop compris le but.
        Tu nous donne ça, mais faut faire quoi avec enfait ?

        Code:
         print '1-> OK' if (self.exe(1)) and (self.robot['y'] == 1) else self.error()
           print '2-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
           print '3-> OK' if (self.exe(4)) and (self.robot['life'] == 100) else self.error()
           print '4-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
           print '5-> OK' if (self.exe(5)) and (self.map[1][1] == 3) else self.error()
        Cette liste est extraite du code source.
        Elle te permettra d'évaluer le problème et la réponse à adopté, à titre informatif !

        print 'L-> ok' est le message de confirmation
        if self.exe(N) est le problème posé N
        && (M == V) est la solution finale - M doit être égale à V

        Pour répondre à la solution (M == V), il faut coder dans la zone modifiable le bon traitement de N.

        As-tu compris la démarche à suivre ?
        Dernière modification par Yarflam, 09 mars 2013, 20h15.
        ~ Yarflam ~

        ❉ L'Univers se dirige vers son ultime perfection ❉

        Commentaire


        • #5
          As-tu compris la démarche à suivre ?
          Arf, en ce qui me concerne non, je pense que tu te calques trop sur ton code source, ce que je trouve bien dommage...

          Chacun pouvant avoir sa propre façon de coder...

          Par contre le principe étant le même pour tout le monde, on pourrait se cantonner juste à cela.

          Le but de l'exercice, je ne vois toujours pas, désolé

          Commentaire


          • #6
            Envoyé par fred Voir le message
            Arf, en ce qui me concerne non, je pense que tu te calques trop sur ton code source, ce que je trouve bien dommage...

            Chacun pouvant avoir sa propre façon de coder...

            Par contre le principe étant le même pour tout le monde, on pourrait se cantonner juste à cela.

            Le but de l'exercice, je ne vois toujours pas, désolé
            D'accord ... Je vais essayer d'être plus clair sur certain aspect.

            Le code source proposé permet simplement de vérifier les résultats attendus.
            Ce qui se passe dans la zone modifiable vous appartient.
            Le but n'est pas résoudre les étapes mais de proposer une solution qui y répondent, nuance.
            Lors-ce que le script s'exécute, il doit pouvoir confirmer votre code par 5 vérifications.
            Le code que vous programmerez entièrement sortie de votre imagination, doit donc être en "cohérence" avec les lignes de vérifications.

            Je ne sais pas trop quoi dire de plus. J'ai réutilisé le système de Checkio.
            Peut-être pas avec la même simplicité, je m'en excuse.

            ÉDIT: J'ai ré-édité mon message au tout début. Peut-être que vous cernerez plus le sujet.
            Dernière modification par Yarflam, 09 mars 2013, 22h15.
            ~ Yarflam ~

            ❉ L'Univers se dirige vers son ultime perfection ❉

            Commentaire


            • #7
              Ok je vais essayer d'expliquer ce que je ne comprend pas

              1) Le robot fait quoi dans cette grille, c'est quoi son but, quand le jeu est terminé?
              2) La grille est une création aléatoire?
              3) Est-ce que le robot bouge via l'utilisateur? Dans ce cas l'affichage de la grille doit être mis à jour?

              Pour l'instant je ne parle pas du code source (le tiens) qui ne serait sans doute pas compatible avec le mien, car je considère que c'est à toi de te calquer au miens pour vérifier qu'il est correct, mais juste au principe même du "jeu".

              Commentaire


              • #8
                En gros si j'ai bien compris, notre but c'est d'arriver à commander le robot pour qu'il fasse ceci ?
                Code:
                   print '1-> OK' if (self.exe(1)) and (self.robot['y'] == 1) else self.error()
                   print '2-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
                   print '3-> OK' if (self.exe(4)) and (self.robot['life'] == 100) else self.error()
                   print '4-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
                   print '5-> OK' if (self.exe(5)) and (self.map[1][1] == 3) else self.error()


                Suivre Hackademics: Twitter, Google+, Facebook.

                Commentaire


                • #9
                  Oui !

                  Voici la réponse basique qui fonctionne : (10 minutes top chrono)

                  Code:
                  #!/usr/bin/python
                  """ +\_________________/+
                      ||                 ||
                      ||       1er       ||
                      ||    CHALLENGE    ||
                      ||      PYTHON     ||
                      ||                 ||
                      ||   Par Yarflam   ||
                      +/=================\+
                      ||      NIVEAU     ||
                      ||  INTERMEDIAIRE  ||
                      ||                 ||
                      ||  -- MATRICE --  ||
                      +\=================/+ """
                  
                  class challenge:
                   def __init__(self):
                     # FONCTION PRINCIPALE
                     self.map=[[0,0,0,0,0],[0,0,0,0,0],[1,2,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
                     self.robot={'life':20, 'x':2, 'y':2}
                     print '1-> OK' if (self.exe(1)) and (self.robot['y'] == 1) else self.error()
                     print '2-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
                     print '3-> OK' if (self.exe(4)) and (self.robot['life'] == 100) else self.error()
                     print '4-> OK' if (self.exe(2)) and (self.robot['x'] == 1) else self.error()
                     print '5-> OK' if (self.exe(5)) and (self.map[1][1] == 3) else self.error()
                   def error(self):
                     # GESTIONNAIRE DES ERREURS
                     exec("print '__erreur__'\nraw_input()\nquit()")
                   def exe(self,i):
                     self.robot['y']=self.robot['y']-1 if (i==1) and (not self.map[self.robot['y']-1][self.robot['x']] == 1) else self.robot['y']
                     self.robot['y']=self.robot['y']+1 if (i==4) and (not self.map[self.robot['y']+1][self.robot['x']] == 1) else self.robot['y']
                     self.robot['x']=self.robot['x']-1 if (i==2) and (not self.map[self.robot['y']][self.robot['x']-1] == 1) else self.robot['x']
                     self.robot['x']=self.robot['x']+1 if (i==3) and (not self.map[self.robot['y']][self.robot['x']+1] == 1) else self.robot['x']
                     if (self.map[self.robot['y']][self.robot['x']] == 2):
                        self.map[self.robot['y']][self.robot['x']]=0;
                        self.robot['life']=self.robot['life']+80
                     if (i == 5): self.map[self.robot['y']-1][self.robot['x']]=3
                     return 1
                  
                  test=challenge()
                  print "\nBRAVO !"
                  raw_input()
                  Dernière modification par Yarflam, 09 mars 2013, 23h22.
                  ~ Yarflam ~

                  ❉ L'Univers se dirige vers son ultime perfection ❉

                  Commentaire

                  Chargement...
                  X