Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Ruby

    31 octobre 2018 à 19:12:11

    Tu ne fais pas ce qui est demandé dans ennemis_en_vie. Tu es censé renvoyer la liste des ennemis encore vivant apparemment. Avec ça, ton jeu sera fini si cette liste est vide ou si le joueur est mort.

    PS : autant poster tout le code, ça permettra de donner des conseils dessus aussi.

    • Partager sur Facebook
    • Partager sur Twitter
    Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
      31 octobre 2018 à 21:07:01

      Quand tu dis une liste, tu veux dire un tableau contenant les instances de Ennemi ?

      Edit : j'ai supprimé mon code, ta réponse m'a apporté suffisemment d'indice pour que je me débrouille. Je tente de créer une variable "ennemis_en_vie" dans la class "Monde", d'y push/delete mes monstres s'ils sont en vie, et ça devrait marcher !
      Je serai de retour lundi, j'suis déçu de pas être arrivé à finir le jeu :(

      -
      Edité par Sumak 1 novembre 2018 à 12:27:02

      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2018 à 0:28:36

        Bonjour

        Je viens de finir les deux parties de ce cour et j'entame l'activité de créer le jeu de console textuel

        a mon plus grand regret je rencontre une erreur que j'arrive pas a comprendre d'ou sa viens (de plus mon anglais n'est pas expérimenté malheureusement)

        voici mon erreur 

        et voici mon code complet

        class  Personne
          attr_accessor  :nom , :points_de_vie , :en_vie
        
          def  initialize(nom)
            @nom  = nom
            @points_de_vie  =  100
            @en_vie  =  true
          end
        
          def  info
            if en_vie
            	puts  " # { @nom } ( # { @points_de_vie } / 100) "
            else
            	puts  " # { @nom } (vaincu) "
            end
          end
        
          def  attaque(personne)
            puts  " # { @nom } attaque # { personne.nom } ."
        
            if  self .class ==  Joueur
              puts  " # { @nom } possède # { degats_bonus } de bonus d'attaque. "
            end
        
            personne.subit_attaque (degats)
        
          end
        
          def  subit_attaque(degats_recus)
            @points_de_vie  -= degats_recus
            @en_vie  =  @points_de_vie  >  0
            puts  " # { @nom } subit # { degats_recus } points de dégâts! "
          end
        end
        
        class  Joueur < Personne
          attr_accessor  :degats_bonus
        
          def  initialize(nom)
            @degats_bonus  =  0
            super(nom)
          end
        
          def  degats
            1  +  aléatoire.rand(40) +  @degats_bonus
          end
        
          def  soin
            if  @points_de_vie  >=  100
              puts  " # { @nom } ne peut se soigner n'étant pas blessé (e). "
            else
              s =  1  +  aléatoire.rand(40)
              if (@points_de_vie  + s) >  100
                s =  100  -  @points_de_vie
                @points_de_vie  =  100
              else
                @points_de_vie  += s
              end
              puts  " # { @nom } un regargné # { s } points de vie ( # { @points_de_vie } / 100). "
            end
          end
        
          def  ameliorer_degats
            b =  5  +  aléatoire.rand(30)
            @degats_bonus  += b
            puts  " # { @nom } gagne # { b } points de bonus de dégât (pour un bonus total de # { @degats_bonus } ) " .
          end
        end
        
        class  Ennemi < Personne
          def  degats
            1  +  aléatoire.rand(10)
          end
        end
        
        class  Jeu
          def  self.actions_possibles(monde)
            puts  " ACTIONS POSSIBLES: "
            puts  " 0 - Se soigner "
            puts  " 1 - Améliorer son attaque "
            i =  2
            monde.ennemis.each do | ennemi |
              puts  " # { i } - Attaquer # { ennemi.info } "
              i = i +  1
            end
            puts  " 99 - Quitter "
          end
        
          def  self.est_fini(joueur, monde)
            if monde.ennemis_en_vie.size == 0 || ! joueur.en_vie
              vrai
            else
              faux
            end
          end
        end
        
        class  Monde
          attr_accessor  :ennemis
        
          def  ennemis_en_vie
            vivants = []
            @ennemis .each do | e |
              if e.en_vie
                vivants << e
              end
            end
            vivants
          end
        end
        
        monde = Monde.new
        monde.ennemis = [
          Ennemi.new(" Balrog "),
          Ennemi.new(" Goblin "),
          Ennemi.new(" Squelette ")
        ]
        
        joueur =  Joueur.new(" Jean-Michel Paladin ")
        
        puts  " \ n \ n Ainsi débutent les aventures de # { joueur.nom } \ n \ n "
        
        100 .times do | tour |
          puts  " \ n ------------------ Tour numéro # { tour } ------------------ "
        
          Jeu.actions_possibles(monde)
        
          puts  " \ n QUELLE ACTION FAIRE? "
          choix =  obtient.chomp.to_i
        
          if choix ==  0
            joueur.soin
          elsif choix ==  1
            joueur.ameliorer_degats
          elsif choix ==  99
            Pause
          else
            ennemi_a_attaquer = monde.ennemis [choix -  2 ]
            joueur.attaque(ennemi_a_attaquer)
          end
        
          puts  " \ n LES ENNEMIS RIPOSTENT! "
          
          monde.ennemis_en_vie.each do | ennemi |
          	ennemi.attaque (joueur)
          end
        
          puts  " \ n Etat du héro: # { joueur.info } \ n "
        
          pause  if  Jeu.est_fini(joueur, monde)
        		end
        
        puts  " \ n Game Over! \ n "
        
        if joueur.en_vie
          puts  " Vous avez gagné, # { joueur.info } ! "
        else
          puts  " Vous avez perdu! "
        end

        Merci de bien vouloir m'aider :)

        • Partager sur Facebook
        • Partager sur Twitter
          22 janvier 2019 à 20:48:13

          BoubekeurBENZAID a écrit:

          Bonjour

          Je viens de finir les deux parties de ce cour et j'entame l'activité de créer le jeu de console textuel

          a mon plus grand regret je rencontre une erreur que j'arrive pas a comprendre d'ou sa viens (de plus mon anglais n'est pas expérimenté malheureusement)

          voici mon erreur 

          Alors expecting keyword_end signifie que le code s'attend a un "end" a la fin de ton code :D

          c'est donc qu'il te manque un end, voilà tout

          • Partager sur Facebook
          • Partager sur Twitter
            30 janvier 2019 à 16:58:50

            Bonjour, 

            Je n'arrive à placer ma console dans le dossier qui contient mon fichier d'éditeur. 

            Lorsque j'utilise le "cd" j'ai un message d'erreur automatique.

            Pouvez-vous m'aider s'il vous plait ? 

            (Je suis sur mac)

            • Partager sur Facebook
            • Partager sur Twitter
              30 janvier 2019 à 17:07:14

              Bonjour,

              Quel message d'erreur obtiens-tu ?

              • Partager sur Facebook
              • Partager sur Twitter
              Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                5 février 2019 à 17:33:04

                Bonjour yo@n97one,

                Voici ce que ca m'affiche, tout le temps et j'ai tout essayé je ne comprends pas, 

                merci pour votre réponse

                • Partager sur Facebook
                • Partager sur Twitter
                  5 février 2019 à 17:44:01

                  Bah, tu `cd` dans un dossier qui n'existe pas . . .

                  Fait un `ls` pour voir vers ou tu peux aller.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Architecte logiciel - Software craftsmanship convaincu.

                    5 février 2019 à 17:52:48

                    J'ai fais un "cd" vers les documents, je pense que ca a fonctionné, seulement je n'ai pas de dossier qui s'y installe, est ce normal ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 février 2019 à 18:11:46

                      Fait un ls
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Architecte logiciel - Software craftsmanship convaincu.

                        5 février 2019 à 18:27:34

                        c'est fait, ensuite je fais "cd documents", ca fonctionne, seulement comment le dossier doit s'afficher dans mes documents ? ou alors c'est un document fictif ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 février 2019 à 18:37:44

                          Bonjour,

                          cd veut dire change directory, ça te permet de changer de répertoire, ls te permet de lister les fichiers et dossiers du dossier où te situe. Ce que tu veux faire, c'est aller dans le dossier où tu as créé le fichier ruby à l'aide de cd.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                            5 mars 2019 à 20:12:13

                            Bonjour, je suis actuellement au premier TP défi n°2 et je rencontre un problème avec mon code. 

                            Voici mon code

                            voyages = [
                            { ville: "Paris", duree: 10},
                            { ville: "New York", duree: 5},
                            { ville: "Berlin", duree: 2},
                            { ville: "Montréal", duree: 15},
                            ]
                            
                            voyages.each do
                            puts "Voyage à #{voyages[:ville]} de #{voyages[:duree]} jours"
                            end

                            Et voici ce qui résulte de l'exécution du code dans la console 

                            apprentissage/TP/voyages.rb:9:in `block in <main>': no implicit conversion of Symbol into Integer (TypeError)

                            Quelqu'un peut m'aider à trouver ce qui pose problème ? 

                            RESOLU ! 

                            Il suffisait d'ajouter |voyages| à la fin de la 8 ème ligne

                            -
                            Edité par QuentinPenninckx 5 mars 2019 à 20:37:33

                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 avril 2019 à 16:17:52

                              J'ai beaucoup de mal avec le dernier exercice. Il aurait plutôt fallu des exercices médians. Possible d'avoir accès à une correction/explication pas à pas?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 avril 2019 à 16:26:28

                                Salut,

                                On peut t'aider à le faire, poste ce que tu as déjà fait et on t'aidera. Effectivement, le tutoriel d'OC sur Ruby manque d'exemples et de pratique, et est plutôt léger.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                  6 juin 2019 à 15:52:50

                                  Bonjour, j'ai commencé ruby il y a peut de temps et je suis arrivé à l'exercice final j'ai un petit problème qui sera sûrrement réglé rapidement, mais je ne comprend pas du tout cette erreur si quelqu'un pourrais m'aider je serais ravi merci d'avance 

                                  voici mon code et l'erreur:

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 juin 2019 à 21:49:03

                                    Salut,

                                    Comme c'est écrit dans l'erreur subit_attaque attend un argument (le nombre de dégâts reçus) et tu lui en donnes 0.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                      7 juin 2019 à 14:38:11

                                      Salut Yoan

                                      Pourrais tu m'éclairé un peux plus car je comprend bien ce qu'on me demande, mais je comprend pas ce qu'il faut que je lui donne a dégats_reçus et je ne comprend pas non plus ce que je doit faire exactement sur cette méthode

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 juin 2019 à 14:59:31

                                        J'ai pas suivi le cours d'OC, mais il semble plutôt mal foutu sur ce point. De ce que je comprends après avoir vu passer plusieurs posts sur le sujet, tu peux gérer ça comme tu veux. La plupart des gens semblent le gérer en tirant un nombre de dégâts au hasard (entre un nombre minimum et un nombre maximum de dégâts). La méthode rand du module Random te permettra de tirer des nombres au hasard.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                          17 juin 2019 à 17:36:47

                                          Bonjour,

                                          Je démarre le TP du MOOC Ruby et j'ai un pb avec la ligne suivante :

                                          puts "#{i} - Attaquer #{ennemi.info}"

                                          J'ai initialisé la méthode info de la méthode suivante :

                                          def info

                                          puts " #{nom} : #{points_de_vie}"

                                          Le résultat à l'écran est l'affichage du nom et des points de vie avant l'affichage de "Attaquer".

                                          Ex :

                                          Balrog : 100

                                          2 - Attaquer

                                          Quelqu'un peut-il m'aider ?

                                          Par avance merci,

                                          Florence.

                                          -
                                          Edité par FLD 17 juin 2019 à 17:44:08

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Florence
                                            17 juin 2019 à 18:07:37

                                            Salut,

                                            C'est normal, dans info tu fais un appel à puts, cet appel à puts est réalisé avant celui où tu demandes à afficher « <nim> - Attaquer <infos> ». La solution est de faire info renvoyer une chaîne de caractères plutôt que l'afficher. On pourrait même faire mieux et définir une méthode to_s ce qui permettra d'écrire puts ennemi et d'avoir les infos.

                                            class Person
                                              attr_reader :name, :hp
                                            
                                              def initialize(name)
                                                @name = name
                                                @hp = 100
                                              end
                                            
                                              def alive?
                                                @hp &gt; 0
                                              end
                                              
                                              def to_s
                                                "#{@name} : #{@hp}/100 pv"
                                              end
                                            end
                                            
                                            p1 = Person.new("p1")
                                            p2 = Person.new("p2")
                                            puts p1
                                            puts p2
                                            
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                              18 juin 2019 à 11:28:56

                                              Super, merci beaucoup.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Florence
                                                10 juillet 2019 à 22:58:57

                                                Bonjour, j'ai fait le TP , mais je n'ai pas compris comment retourner que les ennemis en vie

                                                J'ai vu que quelqu'un a fait ça, quelque peux m'expliquer svp ?  :)  

                                                class Monde
                                                    attr_accessor :ennemis
                                                
                                                    def  ennemis_en_vie
                                                        # A faire:
                                                        # - Ne retourner que les ennemis en vie
                                                        vivants = []
                                                        @ennemis .each do | e |
                                                            if e.en_vie
                                                                vivants << e
                                                            end
                                                        end
                                                        vivants
                                                    end
                                                end
                                                



                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  10 juillet 2019 à 23:08:01

                                                  Salut,

                                                  On créee une liste vide vivants, on parcourt les ennemis, et on rajoute à vivants les ennemis vivants. Et à la fin on retourne vivants. En fait, un code qui suit plus le style de Ruby serait @ennemis.select(&amp;:en_vie). Note de plus, qu'en Ruby on préfère une indentation de deux espaces.

                                                  EDIT : éditeur d'OC totalement bugué, il faut remplacer &amp; par &.

                                                  -
                                                  Edité par yo@n97one 10 juillet 2019 à 23:13:13

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                                    11 juillet 2019 à 13:37:58

                                                    ok merci :) donc  @ennemis.select(&amp;:en_vie) ca fais la même chose ca retourne que les ennemis en vie super !

                                                    -
                                                    Edité par Wika.dev 11 juillet 2019 à 13:42:37

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      14 septembre 2023 à 16:30:03 - Message modéré pour le motif suivant : Message complètement hors sujet


                                                      MOOC Ruby

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown