Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2024-03-10T15:24:26+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Javaquarium, message #2542472024-03-10T15:24:26+01:00kaise3/@kaise3https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=7#p254247<p>Watch online Mangal Lakshmi in colors Tv. Mangal Lakshmi explores the unique bond between the two sisters, delving into their joys, challenges, and the unbreakable connection that ties them together. Set against the vibrant backdrop of Colors TV, the show is set to take viewers on a journey that celebrates the intricacies of sisterhood. Follow for Desi Serials <a href="https://mangallakshmi.net/">https://mangallakshmi.net/</a></p>Javaquarium, message #2519182023-09-03T02:37:59+02:00maraboutsafari/@maraboutsafarihttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=7#p251918<p>FAIRE REVENIR SON EX, RETOUR D’AFFECTION, RETOUR D’AFFECTION RAPIDE, RETOUR D’AFFECTION EN 72H</p>
<p>Votre partenaire ne veut plus de vous et vous laisse tomber…
Vous êtes largué(e) et vous fondez en larmes Pourtant, ce n’est pas la fin du monde, même si vous avez cette impression en ce moment
Pour ceux qui souhaitent reconquérir son ex grâce au maraboutage, la première étape à faire sera de trouver un bon et vrai marabout africain.
En effet, avec le besoin accru des gens en termes de maraboutage, il n’est pas rare que des profiteurs, ne connaissant rien du milieu, surgissent pour vous dérober votre portefeuille. C’est pourquoi, afin de garantir les résultats en matière de retour affectif, assurez-vous de vous adresser à un vrai sage doté de pouvoirs et de dons maraboutiques.
Avant de vous confier à quelconque marabout, prenez le temps de vous renseigner.
Si vous recherchez un vrai marabout qui pourra vous aider dans votre quête, le medium sérieux compétent SAFARI Tidiane, entre autres, dispose des dons nécessaire pour vous faire vivre le vrai retour affectif par magie blanche.</p>
<p>Contactez Maître Marabout SAFARI Tidiane par:
Tel/WhatsApp : 00229 63 39 25 31
E-Mail : maitremaraboutsafari @ gmail.com
Site web: <a href="http://www.maitre-marabout-africain-safari-france.fr/">http://www.maitre-marabout-africain-safari-france.fr/</a></p>Javaquarium, message #2503362023-05-08T13:53:07+02:00gymer01/@gymer01https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=7#p250336<p>Javaquarium is a virtual aquarium simulation game written in the Java programming language. It allows users to create and customize their own aquariums, add fish and other creatures, and watch them interact with the environment. The game is a popular example of object-oriented programming principles and GUI programming in Java<a href="https://mygymadvisor.com/">.</a></p>Javaquarium, message #2496262023-03-18T17:46:04+01:00cli345/@cli345https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=7#p249626<p>Bonjour tout le monde <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>
<p>J’ai fait, dans mon <a href="https://github.com/cl4cnam/funcSug">langage</a>, une variante de l’exercice jusqu’au point 3.2 : <a href="https://github.com/cl4cnam/aquarium">aquarium</a></p>
<ul>
<li>À la place d’afficher en console, je montre le résultat visuellement. Un tour correspond à un rafraichissement d’écran (J’ai, du coup, changé des constantes indiquées dans l’énoncé).</li>
<li>À la place de choisir un poisson au hasard, c’est la vitesse du poisson qui est choisie aléatoirement au départ et les reproductions et les morsures se font lors des "collisions". Par contre, les nouveaux-nés apparaissent en un lieu aléatoire.</li>
<li>Le résultat dépend de la taille de la zone client du navigateur.</li>
<li>Les poissons carnivores ont une couleur dans les rouge-orange, les autre dans les bleus. Les femelles sont arrondies par rapport aux mâles.</li>
<li>Les algues sont vertes. Leur taille est fixe (elle ne dépend pas de leur point de vie).</li>
</ul>Javaquarium, message #2487082023-01-29T13:14:44+01:00kirksutton/@kirksuttonhttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=7#p248708<p>As a result, I find the phrase "he only has one opportunity" to be unclear<a href="https://mybankinginformation.com/does-grocery-outlet-take-ebt-cards-2/">. </a>Is it because a fish of its species may be picked at random by the number?</p>Javaquarium, message #2484202023-01-16T14:39:56+01:00zaidsab213/@zaidsab213https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p248420<p>When a fish is not hungry, it will visit another fish (at random). When two fish of the same race and opposite sex breed, a third fish of the same race and unknown sex is born> > > > <a href="https://techemirate.com/survey-medallia-com-sephora-usa/">. </a>Each turn only allows him one try.</p>Javaquarium, message #2452442022-09-06T22:13:52+02:00Benco11/@Benco11https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p245244<p>Salut, voici <a href="https://github.com/Benco11-developement/JavaQuarium">mon implémentation en Java 17</a> que j’ai réalisée en deux semaines durant ces dernières vacances. </p>
<p>Si vous avez des remarques particulières, je suis preneur <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"> . Normalement le README est assez détaillé (et y’a même un logo <img src="/static/smileys/svg/waw.svg" alt=":waw:" class="smiley"> )</p>
<p>J’ai utilisé la preview du pattern matching (que sur un bout de code).</p>
<p>Merci d’avance pour vos retours <img src="/static/smileys/svg/bounce.svg" alt=":bounce:" class="smiley"> </p>Javaquarium, message #2446302022-08-10T14:00:19+02:00mailbnade03/@mailbnade03https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p244630<p>Java 8 a introduit les interfaces avec implémentation par défaut. Ça pourrait être intéressant également dans ce genre de cas, mais ça reste "Stateless" (contrairement aux Traits Groovy), à voir donc si c’est juste pour décrire un comportement générique ça peut passer, si c’est un comportement "à état", ça ne sera pas la panacée.</p>Javaquarium, message #2425132022-04-29T21:23:04+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p242513<p>ah oui , je me penche sur une version en python <img src="/static/smileys/svg/hihi.svg" alt="^^" class="smiley"> , c’est que le nom javaquarium(java|quarium) m’a embrouillé <img src="/static/smileys/svg/hihi.svg" alt="^^" class="smiley">
et en faite j’avais déjà fait l' exercice d’oc qui disait de le faire en java donc je l’avais fait d’avance </p>Javaquarium, message #2425112022-04-29T20:48:49+02:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p242511<figure><blockquote>
<p>voila mon code pour javaquarium : <a href="https://github.com/antoineB24/javaquarium">javaquarium-github</a> desole si il n’y a pas de commentaire ou de readme.md</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p242507">LePythonHacker</a></figcaption></figure>
<p>Au vu de ton pseudo je m’attendais à un code en Python et en fait pas du tout !</p>Javaquarium, message #2425092022-04-29T19:53:25+02:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p242509<p>(Salut ! Déterrer ne pose pas de problème tant que c’est des sujets comme ça qui rassemblent toutes les tentatives au même endroit. C’est juste à éviter dans un contexte de poser une autre question après le fil de quelqu’un, mais ici c’est totalement légitime <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"> )</p>Javaquarium, message #2425072022-04-29T19:37:54+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p242507<p>je suis nouveau sur zds , je ne sais pas si il a une date limite pour poster un poste comme sur oc donc ne m’en voudrez pas si je déterre le sujet <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"> et ne le fermez pas a cause de moi , voila mon code pour javaquarium : <a href="https://github.com/antoineB24/javaquarium">javaquarium-github</a> desole si il n’y a pas de commentaire ou de readme.md</p>Javaquarium, message #2409672022-02-16T08:58:28+01:00tinasinghg02/@tinasinghg02https://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p240967<p>Much appreciation to you for your sharing. Accept you’ll contribute extra quality presents on the current page. Much appreciation to you!
<a href="http://www.bangaloreescortagency.co.in/">http://www.bangaloreescortagency.co.in/</a>
<a href="http://www.bangaloreescortservice.net/">http://www.bangaloreescortservice.net/</a>
<a href="http://www.pujaescort.in/">http://www.pujaescort.in/</a>
<a href="http://www.pihugupta.co.in/">http://www.pihugupta.co.in/</a>
<a href="http://www.oyoescorts.in/">http://www.oyoescorts.in/</a>
<a href="http://www.bangalorevipescortservice.com/">http://www.bangalorevipescortservice.com/</a></p>Javaquarium, message #2372202021-09-02T17:57:54+02:00Wizix/@Wizixhttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p237220<p>Bonjour,
Je me permet de déterrer ce sujet pour vous présenter ma version en Ada, langage que j’apprends dans le cadre de mon premier emploi. <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>
<p>Vous trouverez l’exercice implémenté jusqu’à la question 3.3 incluse sur <a href="https://github.com/louis-etne/ada-Adaquarium">ce dépôt Github</a>. Je suis preneur de tout retour pour l’améliorer.</p>Javaquarium, message #2363392021-07-29T15:24:40+02:00Romana/@Romanahttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p236339<p>Bonjour,
Je suis débutant en Java et j’ai peur que ce projet soit un peu trop compliqué pour débuter, auriez-vous d’autres exemples de projets à faire avant pour être sûr de maîtriser les bases ?
Merci !</p>Javaquarium, message #2297432020-12-27T21:01:45+01:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p229743<p>Bonjour,</p>
<p>Ça faisait un moment que je voulais comprendre et essayer l’ECS. J’ai donc fait le Javaquarium. Je l’ai fait en Python, parce que c’est le langage que je maitrise le mieux.</p>
<p>J’ai fait la partie 2, je veux bien vos retours :</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-body"><div class="hljs-code-div hljs-code-python"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span><span data-count="34"></span><span data-count="35"></span><span data-count="36"></span><span data-count="37"></span><span data-count="38"></span><span data-count="39"></span><span data-count="40"></span><span data-count="41"></span><span data-count="42"></span><span data-count="43"></span><span data-count="44"></span><span data-count="45"></span><span data-count="46"></span><span data-count="47"></span><span data-count="48"></span><span data-count="49"></span><span data-count="50"></span><span data-count="51"></span><span data-count="52"></span><span data-count="53"></span><span data-count="54"></span><span data-count="55"></span><span data-count="56"></span><span data-count="57"></span><span data-count="58"></span><span data-count="59"></span><span data-count="60"></span><span data-count="61"></span><span data-count="62"></span><span data-count="63"></span><span data-count="64"></span><span data-count="65"></span><span data-count="66"></span><span data-count="67"></span><span data-count="68"></span><span data-count="69"></span><span data-count="70"></span><span data-count="71"></span><span data-count="72"></span><span data-count="73"></span><span data-count="74"></span><span data-count="75"></span><span data-count="76"></span><span data-count="77"></span><span data-count="78"></span><span data-count="79"></span><span data-count="80"></span><span data-count="81"></span><span data-count="82"></span><span data-count="83"></span><span data-count="84"></span><span data-count="85"></span><span data-count="86"></span><span data-count="87"></span><span data-count="88"></span><span data-count="89"></span><span data-count="90"></span><span data-count="91"></span><span data-count="92"></span><span data-count="93"></span><span data-count="94"></span><span data-count="95"></span><span data-count="96"></span><span data-count="97"></span><span data-count="98"></span><span data-count="99"></span><span data-count="100"></span><span data-count="101"></span><span data-count="102"></span><span data-count="103"></span><span data-count="104"></span><span data-count="105"></span><span data-count="106"></span><span data-count="107"></span><span data-count="108"></span><span data-count="109"></span><span data-count="110"></span><span data-count="111"></span><span data-count="112"></span><span data-count="113"></span><span data-count="114"></span><span data-count="115"></span><span data-count="116"></span><span data-count="117"></span><span data-count="118"></span><span data-count="119"></span><span data-count="120"></span><span data-count="121"></span><span data-count="122"></span></div><pre><code class="hljs language-python"><span class="hljs-keyword">import</span> random
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Carnivore</span>():</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self</span>):</span>
<span class="hljs-keyword">pass</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">cherche_repas</span>(<span class="hljs-params">self, mangeur, poissons</span>):</span>
<span class="hljs-keyword">if</span> len(poissons) == <span class="hljs-number">1</span>:
<span class="hljs-keyword">raise</span> ValueError
mangé = random.choice(poissons)
<span class="hljs-keyword">while</span> mangé == mangeur:
mangé = random.choice(poissons)
<span class="hljs-keyword">return</span> mangé
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">mange</span>(<span class="hljs-params">self, mangeur, mangé</span>):</span>
mangé.vie.change_vie(<span class="hljs-number">-4</span>)
mangeur.vie.change_vie(<span class="hljs-number">5</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Herbivore</span>():</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self</span>):</span>
<span class="hljs-keyword">pass</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">cherche_repas</span>(<span class="hljs-params">self, algues</span>):</span>
<span class="hljs-keyword">return</span> random.choice(algues)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">mange</span>(<span class="hljs-params">self, mangeur, algue</span>):</span>
algue.vie.change_vie(<span class="hljs-number">-2</span>)
mangeur.vie.change_vie(<span class="hljs-number">3</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Vivant</span>():</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self, vie=<span class="hljs-number">10</span></span>):</span>
self.vie = vie
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">change_vie</span>(<span class="hljs-params">self, quantite</span>):</span>
self.vie += quantite
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">est_vivant</span>(<span class="hljs-params">self</span>):</span>
<span class="hljs-keyword">return</span> self.vie > <span class="hljs-number">0</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Poisson</span>:</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self, nom, sexe, race=<span class="hljs-string">""</span></span>):</span>
self.nom = nom
self.sexe = sexe
self.race = race
<span class="hljs-keyword">if</span> race <span class="hljs-keyword">in</span> [<span class="hljs-string">"mérou"</span>, <span class="hljs-string">"thon"</span>, <span class="hljs-string">"poisson-clown"</span>]:
self.repas = Carnivore()
<span class="hljs-keyword">else</span>:
self.repas = Herbivore()
self.vie = Vivant()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">affiche</span>(<span class="hljs-params">self</span>):</span>
print(<span class="hljs-string">f"Le poisson <span class="hljs-subst">{self.nom}</span> est un <span class="hljs-subst">{self.sexe}</span>, de race <span class="hljs-subst">{self.race}</span>, avec <span class="hljs-subst">{self.vie.vie}</span> points de vie."</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">mange</span>(<span class="hljs-params">self, truc</span>):</span>
self.repas.mange(truc)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">update</span>(<span class="hljs-params">self</span>):</span>
self.vie.change_vie(<span class="hljs-number">-1</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Algue</span>:</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self</span>):</span>
self.vie = Vivant()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">update</span>(<span class="hljs-params">self</span>):</span>
self.vie.change_vie(<span class="hljs-number">1</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Aquarium</span>():</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self</span>):</span>
self.poissons = []
self.algues = []
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">ajoute_poisson</span>(<span class="hljs-params">self, poisson</span>):</span>
self.poissons.append(poisson)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">ajoute_algue</span>(<span class="hljs-params">self, algue</span>):</span>
self.algues.append(algue)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">update</span>(<span class="hljs-params">self</span>):</span>
trucs_en_vie = self.poissons + self.algues
<span class="hljs-comment"># Phase de croissance des algues et faim des poissons</span>
<span class="hljs-keyword">for</span> truc <span class="hljs-keyword">in</span> trucs_en_vie:
truc.update()
print(<span class="hljs-string">"Tous les poissons perdent un point de vie, toutes les algues en gagnent deux."</span>)
<span class="hljs-comment"># Ménage des morts</span>
<span class="hljs-keyword">for</span> poisson <span class="hljs-keyword">in</span> self.poissons:
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> poisson.vie.est_vivant():
self.poissons.remove(poisson)
random.shuffle(self.poissons)
<span class="hljs-comment"># Recherche de repas</span>
<span class="hljs-keyword">for</span> poisson <span class="hljs-keyword">in</span> self.poissons:
<span class="hljs-keyword">if</span> poisson.vie.vie > <span class="hljs-number">5</span>:
<span class="hljs-keyword">continue</span>
<span class="hljs-keyword">if</span> isinstance(poisson.repas, Carnivore):
<span class="hljs-keyword">try</span>:
mangé = poisson.repas.cherche_repas(poisson, self.poissons)
<span class="hljs-keyword">except</span> ValueError:
<span class="hljs-keyword">pass</span>
<span class="hljs-keyword">else</span>:
poisson.repas.mange(poisson, mangé)
print(<span class="hljs-string">f"<span class="hljs-subst">{poisson.nom}</span> a mangé <span class="hljs-subst">{mangé.nom}</span>."</span>)
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> mangé.vie.est_vivant():
self.poissons.remove(mangé)
print(<span class="hljs-string">f"<span class="hljs-subst">{mangé.nom}</span> est mort. :("</span>)
<span class="hljs-keyword">elif</span> isinstance(poisson.repas, Herbivore):
mangé = poisson.repas.cherche_repas(self.algues)
poisson.repas.mange(poisson, mangé)
print(<span class="hljs-string">f"<span class="hljs-subst">{poisson.nom}</span> a mangé une algue."</span>)
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> mangé.vie.est_vivant():
self.algue.remove(mangé)
print(<span class="hljs-string">"Une algue est morte."</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">affiche</span>(<span class="hljs-params">self</span>):</span>
<span class="hljs-keyword">for</span> poisson <span class="hljs-keyword">in</span> self.poissons:
poisson.affiche()
print(<span class="hljs-string">f"Il y a <span class="hljs-subst">{len(self.algues)}</span> algue<span class="hljs-subst">{<span class="hljs-string">'s'</span> <span class="hljs-keyword">if</span> len(self.algues) >= <span class="hljs-number">2</span> <span class="hljs-keyword">else</span> <span class="hljs-string">''</span>}</span> dans l'aquarium. Elles ont comme vie :"</span>)
<span class="hljs-keyword">for</span> algue <span class="hljs-keyword">in</span> self.algues:
print(<span class="hljs-string">f"<span class="hljs-subst">{algue.vie.vie}</span>"</span>)
</code></pre></div></div></div>
<p>Et le code pour tester :</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-body"><div class="hljs-code-div hljs-code-python"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span></div><pre><code class="hljs language-python">aqua = Aquarium()
poisson1 = Poisson(<span class="hljs-string">"Albert"</span>, <span class="hljs-string">"H"</span>, <span class="hljs-string">"mérou"</span>)
poisson2 = Poisson(<span class="hljs-string">"Jeannette"</span>, <span class="hljs-string">"F"</span>, <span class="hljs-string">"bar"</span>)
poisson3 = Poisson(<span class="hljs-string">"Gontrand"</span>, <span class="hljs-string">"H"</span>, <span class="hljs-string">"bar"</span>)
poisson4 = Poisson(<span class="hljs-string">"Gudrune"</span>, <span class="hljs-string">"F"</span>, <span class="hljs-string">"mérou"</span>)
aqua.ajoute_poisson(poisson1)
aqua.ajoute_poisson(poisson2)
aqua.ajoute_poisson(poisson3)
aqua.ajoute_poisson(poisson4)
aqua.ajoute_algue(Algue())
aqua.ajoute_algue(Algue())
aqua.ajoute_algue(Algue())
aqua.affiche()
<span class="hljs-keyword">for</span> t <span class="hljs-keyword">in</span> range(<span class="hljs-number">50</span>):
aqua.update()
aqua.affiche()
</code></pre></div></div></div>
<p>L’idée de l’ECS, si j’ai bien compris, c’est d’éviter l’héritage, permettre une composition arbitraire de caractéristique en donnant aux classes une instance d’une autre classe, qui contient la logique.</p>
<p>Donc l'<em>Entity</em>, c’est Albert le poisson, le <em>Component</em>, c’est mon aquarium, et mon <em>System</em>, ce sont mes sous-classes <strong>Carnivore</strong>, <strong>Vivant</strong>…</p>
<p>Si c’est bien ça, je crains d’avoir violé le principe dans la recherche des repas. Deux remarques / questions au passage : </p>
<ul>
<li>J’ai facilement tendance à faire de la duplication de code avec de principe de programmation. Sur le produit final, <em>ça va</em>, mais dans les étapes intermédiaires, ça arrive facilement. Typiquement, entre les végétariens et carnivores.</li>
<li>J’ai l’impression que le décès des poissons et algues ne peut se gérer que tout en haut, dans l’aquarium. C’est normal et OK, ou c’est une erreur de programmation de ma part ?</li>
</ul>Javaquarium, message #1654892017-11-01T01:40:50+01:00GaaH/@GaaHhttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p165489<p>Salut,</p>
<p>J’ai tenté l’exercice en R avec des classes S3, ce qui s’est avéré peu pratique puisque ce genre de classe empêche la modification d’un objet. Du coup, a chaque fois qu’une opération modifiant l’aquarium est effectué, la totalité de l’aquarium est recopié puis l’ancienne version est écrasée. Utiliser des classe de type ReferenceClass, qui fonctionnent de la même façon qu’en Java, C# ou C++, aurait sans doute été plus simple (et oui, car en R il y a plusieurs style de programmation objet).</p>
<p>Je me suis arrêté à la partie 3.2 (La reproduction), la suite arrivera peut être, peut être pas. Quoi qu’il en soit vous pouvez trouver le code <a href="https://bitbucket.org/gcaillaut/raquarium">ici</a> sous la forme d’un package R. Vous pouvez l’installer avec <code>devtools::install_bitbucket("gcaillaut/raquarium")</code> après avoir préalablement installé le package <em>devtools</em> avec <code>install.packages("devtools")</code>.</p>
<p>Il y a un example d’aquarium que vous pouvez charger avec <code>data(sample_aquarium)</code>, si vous voulez créez le votre, il y a un exemple de script de création dans le dossure data-raw/.</p>
<p>Un exemple d’utilisation ressemblerait à ça :</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="kn">library</span><span class="p">(</span>Raquarium<span class="p">)</span>
data<span class="p">(</span>sample_aquarium<span class="p">)</span>
step0 <span class="o"><-</span> sample_aquarium
step1 <span class="o"><-</span> next_step<span class="p">(</span>step0<span class="p">)</span>
step2 <span class="o"><-</span> next_step<span class="p">(</span>step1<span class="p">)</span>
<span class="c1"># ...</span>
<span class="c1"># stepN <- next_step(stepN-1)</span>
<span class="c1"># Si on veut sauvegarder un aquarium</span>
<span class="kp">save</span><span class="p">(</span>step2<span class="p">,</span> file <span class="o">=</span> <span class="s">"step2.Rda"</span><span class="p">)</span> <span class="c1"># Créer un fichier step2.Rda</span>
<span class="kp">load</span><span class="p">(</span><span class="s">"step2.Rda"</span><span class="p">)</span> <span class="c1"># Pour charger le fichier step2.Rda (construit la variable step2)</span>
</pre></div>
</td></tr></table></div>Javaquarium, message #1626022017-09-18T18:57:06+02:00AlexandreDeMoura/@AlexandreDeMourahttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p162602<p>Salut, une idée de projet pour entrainer l’OOP un peu plus léger que le Javaquarium pour me faire la main avant de passer au Javaquarium ? </p>Javaquarium, message #1390072017-01-18T22:42:25+01:00Ricocotam/@Ricocotamhttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p139007<p>Ce pourrait être assez drôle de voir s’il est possible de trouver des équilibres dans cette population ^^. J’avais essayé de générer un modèle de Lotka-Voltera mais sans grand succès (faut dire que ma lib d’algo génétique était foireuse)</p>Javaquarium, message #1388862017-01-17T17:28:29+01:00fromvega/@fromvegahttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p138886<p>Voici <a href="https://github.com/HoustonWeHaveABug/Vegarium">ma version en Ruby</a>, c’est mon tout premier programme "sérieux" dans ce langage que je découvre depuis fin 2016 <img alt=":)" src="/static/smileys/smile.png"></p>
<p>Normalement toutes les étapes sont implémentées, avec quelques petits écarts cependant:</p>
<p>4.2/4.3 La sortie sur console est effectuée dans un format identique à celui du chargement, donc je n’ai pas prévu l’enregistrement dans un fichier séparé, la sortie console si elle est redirigée dans un fichier peut être réutilisée directement en entrée pour charger les êtres vivants</p>
<p>4.4 Au lieu d’être à part en entête, le tour initial est précisé pour chaque être vivant (c’est un attribut de la classe LivingBeing).</p>
<p>Quelques précisions supplémentaires:</p>
<ul>
<li>
<p>Les espèces sont également chargées depuis un fichier, on peut donc en définir autant qu’on veut (animaux ou végétaux) avec des propriétés différentes (en terme de points de vie, longévité, valeur nutritive, etc).</p>
</li>
<li>
<p>J’ai rajouté également la gestion des omnivores (pour le fun et ça ne coûtait vraiment pas beaucoup plus cher à coder), donc au lieu d’avoir 7 comportements différents il y en a 10.</p>
</li>
<li>
<p>Le fichier public.txt contient un résumé des classes avec leurs attributs et méthodes publiques. Pour résumer il y 10 classes pour les espèces (classe de base Species) et 10 pour les êtres vivants (classe de base LivingBeing), j’utilise les mixins Ruby pour implémenter les différents comportements.</p>
</li>
<li>
<p>La correspondance entre la classe de l’espèce et la classe de l’être vivant et faite grâce une table de correspondance consultée lors du chargement des êtres vivants.</p>
</li>
<li>
<p>Un numéro séquentiel est utilisé pour nommer les nouveaux-nés</p>
</li>
</ul>
<p>Un exemple de sortie pour un tour de simulation</p>
<div class="spoiler">
<p>#<br>
# START OF TURN 7 - EVENTS<br>
# Sepi 3 (Grouper, F) dies of starvation<br>
#<br>
# TURN 7 - EVENTS<br>
# Tissol (Bass, M) attacks One Green Alga<br>
# Rieuse 3 (Flounder, M) attacks One Red Alga<br>
# Rieuse 4 (Flounder, F) attacks One Red Alga<br>
# Enfant de Boheme (Murena, M) attacks Sepa (Grouper, M)<br>
# 254 (Tuna, M) attacks One Red Alga<br>
# 258 (Flounder, M) reproduces with Pleureuse 2 (Flounder, F)<br>
# Their child is 260 (Flounder, F)<br>
# Auguste (Clownfish, M) attacks Sepa 1 (Grouper, M)<br>
# Amine 1 (Bass, F) attacks One Green Alga<br>
# Eve 3 (Shark, F) attacks Diem 2 (Carp, M)<br>
# Amine 2 (Bass, F) attacks One Green Alga<br>
# Eve 4 (Shark, F) attacks Edonnay 4 (Tuna, M)<br>
# Amine 3 (Bass, F) attacks One Red Alga<br>
# Amine 4 (Bass, F) attacks One Green Alga<br>
# Edonnay 3 (Tuna, M) reproduces with Tonelle 6 (Tuna, F)<br>
# Their child is 261 (Tuna, F)<br>
# Amine 7 (Bass, F) attacks One Green Alga<br>
# Diem 1 (Carp, M) attacks One Red Alga<br>
# La Muette 1 (Carp, F) attacks One Red Alga<br>
# Edonnay 5 (Tuna, M) reproduces with 248 (Tuna, F)<br>
# Their child is 262 (Tuna, F)<br>
# Amine 9 (Bass, F) attacks One Red Alga<br>
# Tonelle 2 (Tuna, F) attacks One Green Alga<br>
# Sepi (Grouper, F) attacks Edonnay 2 (Tuna, M)<br>
# La Muette 2 (Carp, F) attacks One Red Alga<br>
# Edonnay 6 (Tuna, M) attacks One Red Alga<br>
# Adam de la mer 4 (Shark, M) attacks Pleureuse (Flounder, M)<br>
# La Muette 3 (Carp, F) attacks One Green Alga<br>
# Edonnay 7 (Tuna, M) attacks One Red Alga<br>
# La Muette (Carp, F) attacks One Red Alga<br>
# La Muette 4 (Carp, F) attacks One Green Alga<br>
# Sepa 4 (Grouper, M) attacks One Red Alga<br>
# Ouille (Murena, M) attacks Sepi (Grouper, F)<br>
# Diem 6 (Carp, M) attacks One Red Alga<br>
# La Muette 6 (Carp, F) attacks One Red Alga<br>
# La Muette 7 (Carp, F) attacks One Red Alga<br>
# Sepa 5 (Grouper, M) attacks One Green Alga<br>
# Diem 8 (Carp, M) attacks One Red Alga<br>
# La Muette 8 (Carp, F) attacks One Green Alga<br>
# Diem 9 (Carp, M) attacks One Green Alga<br>
# Samba 3 (Piranha, F) attacks La Muette 6 (Carp, F)<br>
# Tissol 1 (Bass, M) attacks One Green Alga<br>
# La Muette 9 (Carp, F) attacks One Green Alga<br>
# Sepa 7 (Grouper, M) attacks One Green Alga<br>
# 247 (Flounder, M) attacks One Red Alga<br>
# Tissol 2 (Bass, M) attacks One Green Alga<br>
# Samba 5 (Piranha, F) attacks Tonelle 2 (Tuna, F)<br>
# Pleureuse 1 (Flounder, F) attacks One Red Alga<br>
# Tissol 4 (Bass, M) attacks One Red Alga<br>
# Tissol 5 (Bass, M) attacks One Green Alga<br>
# Pleureuse 3 (Flounder, F) attacks One Red Alga<br>
# Tissol 6 (Bass, M) attacks One Red Alga<br>
# Pleureuse 4 (Flounder, F) attacks One Green Alga<br>
# Diem (Carp, M) attacks One Green Alga<br>
# Tissol 7 (Bass, M) attacks One Red Alga<br>
# Tissol 8 (Bass, M) attacks One Green Alga<br>
# Rieuse 2 (Flounder, F) attacks One Red Alga<br>
# Sepi 2 (Grouper, F) attacks One Red Alga<br>
# 260 (Flounder, F) attacks One Red Alga<br>
#<br>
# END OF TURN 7 - STATE<br>
#<br>
# ANIMALS<br>
#<br>
# Species, Value, Initial turn, Age, Name, Sex<br>
Carp, 10, 4, 4, 251, M<br>
Bass, 11, 1, 7, Tissol 9, M<br>
Bass, 5, 1, 7, Tissol, M<br>
Flounder, 11, 1, 7, Rieuse 3, M<br>
Tuna, 12, 4, 4, 252, F<br>
Flounder, 11, 1, 7, Rieuse 4, F<br>
Murena, 9, 1, 7, Enfant de Boheme, M<br>
Grouper, 9, 1, 7, Sepi 4, F<br>
Piranha, 11, 4, 4, 253, F<br>
Tuna, 10, 4, 4, 254, M<br>
Grouper, 9, 1, 7, Sepi 5, F<br>
Murena, 1, 1, 7, Ouille 1, F<br>
Grouper, 13, 5, 3, 255, M<br>
Grouper, 9, 1, 7, Sepi 6, F<br>
Murena, 8, 1, 7, Ouille 2, M<br>
Shark, 10, 1, 7, Adam de la mer, M<br>
Flounder, 12, 6, 2, 256, F<br>
Grouper, 11, 1, 7, Sepi 7, F<br>
Murena, 8, 6, 2, 257, F<br>
Flounder, 10, 6, 2, 258, M<br>
Clownfish, 12, 1, 7, Auguste, M<br>
Clownfish, 9, 1, 7, Bozo 3, M<br>
Carp, 10, 6, 2, 259, F<br>
Clownfish, 10, 1, 7, Bozo, M<br>
Flounder, 5, 1, 7, Pleureuse, M<br>
Shark, 8, 1, 7, Eve 1, F<br>
Grouper, 1, 1, 7, Sepa, M<br>
Shark, 11, 1, 7, Eve 2, F<br>
Bass, 13, 1, 7, Amine 1, F<br>
Shark, 9, 1, 7, Eve 3, F<br>
Bass, 13, 1, 7, Amine 2, F<br>
Shark, 11, 1, 7, Eve 4, F<br>
Bass, 11, 1, 7, Amine 3, F<br>
Shark, 10, 1, 7, Eve 5, F<br>
Tuna, 9, 1, 7, Edonnay, M<br>
Bass, 13, 1, 7, Amine 4, F<br>
Tuna, 11, 1, 7, Edonnay 1, M<br>
Bass, 11, 1, 7, Amine 5, F<br>
Piranha, 9, 1, 7, Samba, F<br>
Tuna, 7, 1, 7, Edonnay 2, M<br>
Bass, 11, 1, 7, Amine 6, F<br>
Tuna, 8, 1, 7, Tonelle, F<br>
Tuna, 11, 1, 7, Edonnay 3, M<br>
Bass, 13, 1, 7, Amine 7, F<br>
Shark, 12, 1, 7, Adam de la mer 1, M<br>
Carp, 11, 1, 7, Diem 1, M<br>
Tuna, 3, 1, 7, Edonnay 4, M<br>
Bass, 11, 1, 7, Amine 8, F<br>
Shark, 9, 1, 7, Adam de la mer 2, M<br>
Tuna, 11, 1, 7, Tonelle 1, F<br>
Bass, 11, 1, 7, Amine, F<br>
Carp, 3, 1, 7, Diem 2, M<br>
Carp, 7, 1, 7, La Muette 1, F<br>
Tuna, 11, 1, 7, Edonnay 5, M<br>
Bass, 11, 1, 7, Amine 9, F<br>
Shark, 9, 1, 7, Adam de la mer 3, M<br>
Tuna, 3, 1, 7, Tonelle 2, F<br>
Grouper, 4, 1, 7, Sepi, F<br>
Carp, 11, 1, 7, La Muette 2, F<br>
Grouper, 9, 1, 7, 240, M<br>
Tuna, 9, 1, 7, Edonnay 6, M<br>
Grouper, 7, 1, 7, Sepa 1, M<br>
Shark, 15, 1, 7, Adam de la mer 4, M<br>
Tuna, 9, 1, 7, Tonelle 3, F<br>
Carp, 11, 1, 7, Diem 3, M<br>
Carp, 13, 1, 7, La Muette 3, F<br>
Tuna, 9, 1, 7, 241, F<br>
Tuna, 5, 1, 7, Edonnay 7, M<br>
Carp, 11, 1, 7, La Muette, F<br>
Shark, 9, 1, 7, Adam de la mer 5, M<br>
Tuna, 10, 1, 7, Tonelle 4, F<br>
Carp, 11, 1, 7, Diem 4, M<br>
Carp, 11, 1, 7, La Muette 4, F<br>
Tuna, 9, 1, 7, 242, M<br>
Tuna, 13, 1, 7, Tonelle 5, F<br>
Murena, 8, 1, 7, Enfant de Boheme 1, M<br>
Flounder, 11, 1, 7, Rieuse, F<br>
Carp, 11, 1, 7, La Muette 5, F<br>
Flounder, 12, 2, 6, 243, M<br>
Tuna, 9, 1, 7, Tonelle 6, F<br>
Grouper, 9, 1, 7, Sepa 4, M<br>
Murena, 9, 1, 7, Enfant de Boheme 2, M<br>
Murena, 12, 1, 7, Ouille, M<br>
Carp, 7, 1, 7, Diem 6, M<br>
Carp, 5, 1, 7, La Muette 6, F<br>
Bass, 10, 2, 6, 244, M<br>
Tuna, 13, 1, 7, Tonelle 7, F<br>
Carp, 11, 1, 7, Diem 7, M<br>
Piranha, 12, 1, 7, Samba 1, F<br>
Carp, 11, 1, 7, La Muette 7, F<br>
Grouper, 11, 1, 7, Sepa 5, M<br>
Shark, 11, 2, 6, 245, F<br>
Carp, 7, 1, 7, Diem 8, M<br>
Carp, 13, 1, 7, La Muette 8, F<br>
Clownfish, 11, 1, 7, Auguste 1, M<br>
Grouper, 11, 1, 7, Sepa 6, M<br>
Carp, 12, 2, 6, 246, F<br>
Carp, 13, 1, 7, Diem 9, M<br>
Piranha, 5, 1, 7, Samba 3, F<br>
Bass, 13, 1, 7, Tissol 1, M<br>
Carp, 13, 1, 7, La Muette 9, F<br>
Clownfish, 9, 1, 7, Auguste 2, M<br>
Grouper, 12, 1, 7, Sepa 7, M<br>
Flounder, 11, 3, 5, 247, M<br>
Piranha, 9, 1, 7, Samba 4, F<br>
Piranha, 13, 1, 7, Do Brasil 2, M<br>
Bass, 9, 1, 7, Tissol 2, M<br>
Clownfish, 9, 1, 7, Auguste 3, M<br>
Tuna, 13, 3, 5, 248, F<br>
Piranha, 14, 1, 7, Samba 5, F<br>
Piranha, 10, 1, 7, Do Brasil 3, M<br>
Flounder, 11, 1, 7, Pleureuse 1, F<br>
Shark, 8, 4, 4, 249, M<br>
Piranha, 9, 1, 7, Do Brasil 4, M<br>
Bass, 11, 1, 7, Tissol 4, M<br>
Flounder, 11, 1, 7, Pleureuse 2, F<br>
Piranha, 9, 1, 7, Do Brasil 5, M<br>
Bass, 13, 1, 7, Tissol 5, M<br>
Flounder, 11, 1, 7, Pleureuse 3, F<br>
Bass, 5, 1, 7, Tissol 6, M<br>
Flounder, 13, 1, 7, Pleureuse 4, F<br>
Carp, 13, 1, 7, Diem, M<br>
Bass, 9, 1, 7, Tissol 7, M<br>
Flounder, 11, 1, 7, Rieuse 1, F<br>
Grouper, 9, 1, 7, Sepi 1, F<br>
Tuna, 11, 4, 4, 250, F<br>
Bass, 13, 1, 7, Tissol 8, M<br>
Flounder, 11, 1, 7, Rieuse 2, F<br>
Grouper, 9, 1, 7, Sepi 2, F<br>
Flounder, 11, 7, 1, 260, F<br>
Tuna, 9, 7, 1, 261, F<br>
Tuna, 9, 7, 1, 262, F<br>
#<br>
# Animals count 132<br>
#<br>
# VEGETALS<br>
#<br>
# Species, Value, Initial turn, Age, Quantity<br>
Red Alga, 9, 1, 7, 5<br>
Red Alga, 13, 1, 7, 27<br>
Green Alga, 15, 1, 7, 34<br>
Green Alga, 11, 1, 7, 15<br>
Green Alga, 17, 1, 7, 39<br>
Green Alga, 7, 1, 7, 3<br>
Red Alga, 5, 1, 7, 1<br>
Red Alga, 17, 1, 7, 44<br>
Red Alga, 11, 1, 7, 13<br>
Green Alga, 13, 1, 7, 22<br>
Green Alga, 9, 1, 7, 5<br>
Red Alga, 15, 1, 7, 27<br>
Green Alga, 5, 1, 7, 2<br>
Red Alga, 7, 1, 7, 3<br>
#<br>
# Vegetals count 240 </p>
</div>
<p>J’ai remarqué comme d’autres que les hermaphrodites opportunistes se multipliaient très vite, a priori ils ont 2 fois plus de chance de se reproduire donc j’en ai mis 2 fois moins au départ pour équilibrer l’évolution, du coup le "vainqueur" est assez souvent différent.</p>Javaquarium, message #1359892016-12-20T23:40:59+01:00SpaceFox/@SpaceFoxhttps://zestedesavoir.com/forums/sujet/447/javaquarium/?page=6#p135989<p>Parce que <a href="https://kotlinlang.org/">Kotlin</a> c’est le langage à JVM qui monte, je tente mon propre exercice dans ce langage : <a href="https://github.com/SpaceFox/kotlinquarium">https://github.com/SpaceFox/kotlinquarium</a> – pour l’instant jusqu’à l’étape 2.1 qui pose des problèmes de modification concurrente rigolos si on y va naïvement.</p>
<p>À noter que c’est fait avec la doc sous la main, j’ai pour ainsi dire jamais codé dans ce langage avant. J’ai essayé d’être proche de ce que je perçois de la philosophie du langage Kotlin, quitte à m’éloigner de ce qu’on ferait en Java.</p>