<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de Wu_Wei &#187; Projet BeloteMaster</title>
	<atom:link href="https://blog.developpez.com/wu-wei/pcategory/projet-belotemaster/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/wu-wei</link>
	<description></description>
	<lastBuildDate>Tue, 25 Aug 2009 09:48:23 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>avancée sur l&#8217;IA du jeu</title>
		<link>https://blog.developpez.com/wu-wei/p7979/projet-belotemaster/avancee_sur_l_ia_du_jeu</link>
		<comments>https://blog.developpez.com/wu-wei/p7979/projet-belotemaster/avancee_sur_l_ia_du_jeu#comments</comments>
		<pubDate>Tue, 25 Aug 2009 09:47:12 +0000</pubDate>
		<dc:creator><![CDATA[wu_wei]]></dc:creator>
				<category><![CDATA[Projet BeloteMaster]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Tandis que je finis l&#8217;ordonnanceur du jeu (fastidieux mais nécessaire), voilà les deux endroits où l&#8217;IA doit intervenir, dans l&#8217;ordre temporel d&#8217;un tour de jeu: - décision de prise éléments certains = le jeu en main , la carte retournée qui sera prise éléments incertains = le jeu du partenaire, les jeux des adversaires, ce qui reste à distribuer dans la pile. stratégie possible = estimation des points &#171;&#160;sûrs&#160;&#187; (cartes maîtresses et annonces) et utilisation [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Tandis que je finis l&rsquo;ordonnanceur du jeu (fastidieux mais nécessaire), voilà les deux endroits où l&rsquo;IA doit intervenir, dans l&rsquo;ordre temporel d&rsquo;un tour de jeu:</p>
<p><strong>- décision de prise</strong></p>
<p>éléments certains = le jeu en main , la carte retournée qui sera prise<br />
éléments incertains = le jeu du partenaire, les jeux des adversaires, ce qui reste à distribuer dans la pile.<br />
stratégie possible = estimation des points &laquo;&nbsp;sûrs&nbsp;&raquo; (cartes maîtresses et annonces) et utilisation d&rsquo;un coefficient de risque basé sur un calcul de probabilité sur le jeu du partenaire. Éventuellement, à terme, prise en compte des parties passées , de la situation comptable dans la manche courante, d&rsquo;un niveau de risque dépendant du type d&rsquo;IA (plus ou moins de prise de risque sur les probas). Un des points critiques est la gestion des cartes non maîtresses mais coûteuses en point (les 10 tout le temps, les As à l&rsquo;atout)</p>
<p><strong>- décision de jouer une carte</strong></p>
<p>éléments certains = le jeu en main , toutes les cartes sont distribuées<br />
éléments incertains = la répartition de ces cartes entre adversaires et partenaire<br />
stratégie possible = construction apriori de combinaisons de jeux stéréotypées plus ou moins prioritaires en fonction de la situation courante. Exemple de combinaison type: &laquo;&nbsp;le preneur est mon partenaire, je suis le premier à jouer -> je joue à l&rsquo;atout&nbsp;&raquo;. Exemple de contre-ordre: &laquo;&nbsp;j&rsquo;ai le 9 sec à l&rsquo;atout -> je ne lance jamais à l&rsquo;atout&nbsp;&raquo;</p>
<p>A y réfléchir, le jeu de belote me parait de plus en plus intéressant: Au moment de la prise, le système est très ouvert, dans le sens où l&rsquo;IA n&rsquo;a qu&rsquo;une connaissance partielle du système et qu&rsquo;une distribution (semi)aléatoire va venir ensuite compléter le système. Au moment de jouer la carte, le système est fermé (toutes les cartes sont en jeu ou ont été jouées) mais la connaissance est toujours partielle (jeu du partenaire, jeux des adversaires). Du coup, ça parait peut-être moins intéressant de se baser sur des algorithmes de recherche exhaustive?</p>
<p><span id="more-6"></span></p>
<p>En tout cas, dans un premier temps, je pense que je vais me baser surtout sur des règles de comportement et moins sur des probabilités comme je le pensais au départ. C&rsquo;est surtout la décision de prise qui nécessitera les calculs, comme l&rsquo;estimation des points sûrs et la probabilité que le partenaire ait &laquo;&nbsp;les cartes qu&rsquo;il faut&nbsp;&raquo;. </p>
<p>La phase de déroulement de jeu serait plutôt basée sur des comportements simples permettant de minimiser la prise de risque par rapport au jeu du partenaire, avec des mini schémas correspondant à des situations de jeu et de cartes en main. Les calculs consisteraient surtout à compter les atouts et à estimer en fin de partie la stratégie pour faire les dix points de bonus du dernier pli. Mais là encore, l&rsquo;utilisation de probabilités brutes me parait limitée car entre joueurs humains, on arrive souvent à deviner ce que le partenaire a dans la main aux derniers tours en fonction de ce qu&rsquo;il a joué précédemment.</p>
<p>J&rsquo;aimerais également aborder plus tard le rapport au jeu de l&rsquo;adversaire humain en utilisant un fichier mémoire des parties précédentes, où il y aurait des paris de l&rsquo;IA sur la stratégie habituelle du profil humain. </p>
<p>La grande difficulté que je pressens, c&rsquo;est l&rsquo;articulation entre les mini-schémas et la situation de jeu. </p>
<p>Reprenons l&rsquo;exemple précédent, pour les amateurs de belote, soit la situation: preneur = partenaire, 1er tour de jeu = moi. A priori, on commence souvent par un tour d&rsquo;atout. La situation à potentiel maximal est de commencer par le roi ou le 10 si on l&rsquo;a, car l&rsquo;adversaire suivant doit monter et donc arrive directement dans les gros points (10, As ou 9), le partenaire assure le pli en jouant le valet (carte maîtresse à l&rsquo;atout) et le dernier adversaire doit fournir en atout (et là encore, si le preneur en a suffisamment, il y a une bonne probabilité que le dernier adversaire doive lâcher un atout à forte valeur). Donc potentiellement, ça peut être un pli à 49 ou 55 points (sur les 162 que comporte le jeu à un atout). </p>
<p>Maintenant, imaginons que le preneur ait pris sans le valet. La même situation peut s&rsquo;avérer très mauvaise en fonction de la distribution: je joue le roi ou le 10, le premier adversaire joue l&rsquo;As, le partenaire doit monter et doit fournir le 9 et le dernier adversaire empoche la mise avec le valet. Le bilan est inversé avec &#8211; 49 ou &#8211; 55 et de plus, un tour d&rsquo;atout a été fait pour rien pour la partie prenante, alors que justement, dans cette situation, le preneur part généralement sur une stratégie de coupe des gros points hors atout, volant ainsi des cartes normalement maîtresses (les As non atout) en sauvant lui même ses gros points d&rsquo;atout non maîtres (10, As et 9). </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Non&#8230;</title>
		<link>https://blog.developpez.com/wu-wei/p7887/projet-belotemaster/non</link>
		<comments>https://blog.developpez.com/wu-wei/p7887/projet-belotemaster/non#comments</comments>
		<pubDate>Sat, 18 Jul 2009 19:48:09 +0000</pubDate>
		<dc:creator><![CDATA[wu_wei]]></dc:creator>
				<category><![CDATA[Projet BeloteMaster]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[&#8230;ce blog n&#8217;est pas mort! Simplement, il est administré par une tortue&#8230; Beaucoup de travail ces derniers temps et donc pas de temps pour BeloteMaster. Tout de même quelques avancées: &#8211; A la suite de mon passage sous mac, je me suis dit que ça serait sympa que le jeu tourne aussi sous MacOS X, donc j&#8217;ai fait quelques petites modifs pour que ce soit possible au niveau de la gestion des fichiers surtout. &#8211; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>&#8230;ce blog n&rsquo;est pas mort! Simplement, il est administré par une tortue&#8230;</p>
<p>Beaucoup de travail ces derniers temps et donc pas de temps pour BeloteMaster. Tout de même quelques avancées:</p>
<p><span id="more-5"></span></p>
<p>&#8211; A la suite de mon passage sous mac, je me suis dit que ça serait sympa que le jeu tourne aussi sous MacOS X, donc j&rsquo;ai fait quelques petites modifs pour que ce soit possible au niveau de la gestion des fichiers surtout.</p>
<p>&#8211; A part ça, ben pas grand chose, toujours englué dans le graphisme et le moteur du jeu, donc en vrac: sélection d&rsquo;une carte, ordonnancement des phases de jeu, tri des cartes une fois la distribution terminée.</p>
<p>Avec toujours en tête de garder en permanence une représentation symbolique des cartes pour que le code de l&rsquo;IA soit le plus proche possible du déroulement classique de la partie. </p>
<p>Pour l&rsquo;instant, la partie graphique est vraiment réduite au strict minimum pour fonctionner. Comprendre par là: les cartes sont stockées sous forme de collections d&rsquo;image à afficher en batterie, ce qui n&rsquo;est pas très élégant pour du Smalltalk, j&rsquo;aimerais bien faire un objet graphique = une vue, mais je n&rsquo;ai pas le temps et je voudrais arriver le plus vite à la programmation de l&rsquo;IA !</p>
<p>Deux petits screenshots pour voir l&rsquo;étendue des dégâts <img src="https://blog.developpez.com/wu-wei/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> J&rsquo;ai quelques fonds de fenêtre possibles, mais je n&rsquo;ai pas encore codé leur affichage&#8230;</p>
<p> <img src="http://blog.developpez.com/media/previewBeloteMaster.jpg" width="1024" height="701" alt="la première phase, où la carte à prendre est en jeu" /></p>
<p><img src="http://blog.developpez.com/media/previewBeloteMaster2.jpg" width="1024" height="701" alt="La seconde phase où les cartes sont entièrement distribuées et triées" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>réflexions basiques sur l&#8217; IA du joueur de belote</title>
		<link>https://blog.developpez.com/wu-wei/p7572/projet-belotemaster/reflexions_basiques_sur_l_ia_du_joueur_d</link>
		<comments>https://blog.developpez.com/wu-wei/p7572/projet-belotemaster/reflexions_basiques_sur_l_ia_du_joueur_d#comments</comments>
		<pubDate>Wed, 06 May 2009 09:53:36 +0000</pubDate>
		<dc:creator><![CDATA[wu_wei]]></dc:creator>
				<category><![CDATA[Projet BeloteMaster]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pas eu trop le temps de coder sur BeloteMaster ces derniers jours&#8230; mais ça n&#8217;empêche pas de gamberger ! Basiquement, les instances de BeloteJoueur devront répondre aux questions de l&#8217;ordonnanceur, en fonction de la phase de jeu, les deux principales étant: &#8211; Est ce que je prend à l&#8217;atout en cours? Est ce que j&#8217;attends le tour suivant pour proposer une autre couleur, prendre sans atout ou tout atout? &#8211; Quelle carte jouer? Pour répondre [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pas eu trop le temps de coder sur BeloteMaster ces derniers jours&#8230; mais ça n&rsquo;empêche pas de gamberger !</p>
<p>Basiquement, les instances de BeloteJoueur devront répondre aux questions de l&rsquo;ordonnanceur, en fonction de la phase de jeu, les deux principales étant:<br />
&#8211; Est ce que je prend à l&rsquo;atout en cours? Est ce que j&rsquo;attends le tour suivant pour proposer une autre couleur, prendre sans atout ou tout atout?<br />
&#8211; Quelle carte jouer?</p>
<p>Pour répondre à ces questions, BeloteJoueur va devoir s&rsquo;en poser d&rsquo;autres. Exemple: Quelles sont mes cartes à l&rsquo;atout? A quelle position suis je dans le tour de jeu? Quel est le score? Qui a joué quoi? Mon partenaire est il maître dans le tour courant? etc&#8230;etc&#8230;</p>
<p>Et pour répondre à ces questions plus précises, l&rsquo;IA va devoir combiner des éléments de logique (&laquo;&nbsp;j&rsquo;ai valet et 9 à l&rsquo;atout, je prend&nbsp;&raquo; ; &laquo;&nbsp;mon partenaire a coupé, je peux me défausser&nbsp;&raquo; par exemple) mais aussi des éléments quantitatifs permettant la prise en compte du risque (calcul de la probabilité que le joueur suivant ait cette carte, calcul de la probabilité que mon partenaire possède la carte qui me manque par exemple).</p>
<p><span id="more-4"></span></p>
<p>La base de connaissance du joueur pourrait prendre plusieurs formes:<br />
&#8211; une forme statique, qui constituerait l&rsquo;ensemble des règles indépendantes du contexte du jeu (roi et dame à l&rsquo;atout me donne belote = + 20 points)<br />
&#8211; une forme dynamique, qui pourrait s&rsquo;adapter en fonction d&rsquo;un niveau de risque calculé à partir des évènements passés, comme par exemple, la mise en mémoire des pourcentages de fois où un évènement s&rsquo;est produit ( du type, &nbsp;&raquo; 78% des fois où mon partenaire a pris à pique, il avait le valet&nbsp;&raquo;)</p>
<p>Bien sûr, tout cela paraît idéal quand on le décrit avec des mots, et c&rsquo;est l&rsquo;implémentation de tout cela qui va poser problème.</p>
<p>Une des premières choses à faire est bien entendu de trouver les règles les plus simples et les plus génériques et pour cela, il faut à la fois observer les bons joueurs de belote mais aussi essayer d&rsquo;identifier des raccourcis &laquo;&nbsp;mathématiques&nbsp;&raquo; qui permettront de donner un comportement à peu près réaliste, sans être trop gourmand en temps de calcul, tout en restant relativement invisible pour un joueur lambda.</p>
<p>Pour la décision de &laquo;&nbsp;prise&nbsp;&raquo; par exemple, il va me falloir trouver un moyen de calculer un estimateur de gain que BeloteJoueur produira avant sa prise de décision. Je pense pondérer les décisions par un facteur &laquo;&nbsp;risque&nbsp;&raquo; qui sera le comportement face à la prise de décision: au lieu d&rsquo;avoir une décision binaire basée sur des seuils, il pourrait y avoir un tirage aléatoire de chiffre combinant le facteur de risque acceptable / risque réel calculé (exemple: p = 0.3 de réussir le contrat, p = 0.5 de prise de risque dans ces conditions, c&rsquo;est à dire que le joueur prend une fois sur deux la décision d&rsquo;aller contre son estimation et de prendre le risque lorsque sa proba de réussite est estimée à 0.3 (30% de chances de succès, ça serait une sorte de tête brûlée celui là :D). Cela donnera plus de flexibilité au joueur et moins de répétitions apparentes (les comportements types qu&rsquo;on finit par identifier lorsqu&rsquo;on joue beaucoup).</p>
<p>Bref, l&rsquo;œuvre s&rsquo;annonce gargantuesque ! <img src="https://blog.developpez.com/wu-wei/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>distribution des cartes</title>
		<link>https://blog.developpez.com/wu-wei/p7550/projet-belotemaster/distribution_des_cartes</link>
		<comments>https://blog.developpez.com/wu-wei/p7550/projet-belotemaster/distribution_des_cartes#comments</comments>
		<pubDate>Wed, 29 Apr 2009 13:14:50 +0000</pubDate>
		<dc:creator><![CDATA[wu_wei]]></dc:creator>
				<category><![CDATA[Projet BeloteMaster]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Un des premiers algorithmes que je vais détailler, c&#8217;est la distribution des cartes initiales. Dans le projet, les cartes sont sous deux formes: &#8211; une forme physique: format.png. Il s&#8217;agit du jeu de cartes de David Bellot disponible en svg, que j&#8217;ai découpé et transformé en cartes de 103&#215;150 pixels sous format png. &#8211; une forme symbolique: par exemple: #As_of_Hearts ou #King_of_Spades. Le programme stocke donc un dictionnaire ayant en clé le symbole et en [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Un des premiers algorithmes que je vais détailler, c&rsquo;est la distribution des cartes initiales.</p>
<p>Dans le projet, les cartes sont sous deux formes:<br />
&#8211; une forme physique: format.png. Il s&rsquo;agit du <a href="http://david.bellot.free.fr/svg-cards/">jeu de cartes de David Bellot</a> disponible en svg, que j&rsquo;ai découpé et transformé en cartes de 103&#215;150 pixels sous format png.<br />
&#8211; une forme symbolique: par exemple: #As_of_Hearts ou #King_of_Spades.</p>
<p>Le programme stocke donc un dictionnaire ayant en clé le symbole et en valeur l&rsquo;image. (cards at: #As_of_Hearts -> renvoie l&rsquo;image de l&rsquo;as de coeur).</p>
<p>La méthode firstDistrib consiste donc à tout d&rsquo;abord mélanger aléatoirement les symboles pour constituer une liste de symboles (pile) qui est ensuite distribuée aux 4 joueurs.</p>
<p>Voici le code commenté, et !! non optimisé pour en faciliter la lecture !!</p>
<p><span id="more-3"></span></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">firstDistrib <br />
&nbsp; <br />
&nbsp; | randomizateur cartes position card alea cartJ1 cartJ2 cartJ3 cartJ4 | <br />
&nbsp;<br />
&nbsp; randomizateur := Random new. &nbsp;&quot;générateur de nombres aléatoires&quot; <br />
&nbsp; pile := OrderedCollection new. &nbsp;&quot;la pile de carte qui va être créé&quot; <br />
&nbsp; cartes := self referenceCards copy. <br />
&nbsp; 32 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [alea := randomizateur next. <br />
&nbsp; &nbsp; &nbsp; position := (alea * (cartes size - 1)) rounded. <br />
&nbsp; &nbsp; &nbsp; position := position + 1. &nbsp;&quot;obtient un random * n - 1. random étant entre 0 et 1, le résultat de la multiplication est 0 &lt; x &lt; n-1. En ajoutant ensuite 1, le résultat devient 1 &lt; x &lt; n&quot; <br />
&nbsp; &nbsp; &nbsp; pile add: (cartes at: position). <br />
&nbsp; &nbsp; &nbsp; cartes removeAtIndex: position]. &nbsp;&quot;pioche aléatoirement dans le paquet de cartes et l'ajoute dans la pile. Enlève la carte piochée de manière à ce qu'elle ne participe plus au tirage. On obtient une pile aléatoire de cartes à distribuer&quot; <br />
&nbsp; cartJ1 := OrderedCollection new. <br />
&nbsp; cartJ2 := OrderedCollection new. <br />
&nbsp; cartJ3 := OrderedCollection new. <br />
&nbsp; cartJ4 := OrderedCollection new. &nbsp;&quot;distribue maintenant la pile de cartes&quot; <br />
&nbsp; 3 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ2 add: card]. <br />
&nbsp; 3 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ3 add: card]. <br />
&nbsp; 3 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ4 add: card]. <br />
&nbsp; 3 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ1 add: card]. <br />
&nbsp; 2 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ2 add: card]. <br />
&nbsp; 2 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ3 add: card]. <br />
&nbsp; 2 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ4 add: card]. <br />
&nbsp; 2 <br />
&nbsp; &nbsp; timesRepeat: <br />
&nbsp; &nbsp; &nbsp; [card := pile removeFirst. <br />
&nbsp; &nbsp; &nbsp; cartJ1 add: card]. &nbsp;&quot;fin de la distribution&quot; <br />
&nbsp; (joueurs at: 'Wu_Wei') cards: cartJ1. <br />
&nbsp; (joueurs at: 'Joueur2') cards: cartJ2. <br />
&nbsp; (joueurs at: 'Joueur3') cards: cartJ3. <br />
&nbsp; (joueurs at: 'Joueur4') cards: cartJ4. <br />
&nbsp; card := pile removeFirst. &nbsp;&quot;prend la première carte des non distribuées&quot; <br />
&nbsp; returnedCard := card. &nbsp;&quot;la désigne comme carte retournée&quot; <br />
&nbsp; self changed &nbsp;&quot;envoie un message d'update aux dépendents&quot;</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diagramme de classes simplifié du projet</title>
		<link>https://blog.developpez.com/wu-wei/p7549/projet-belotemaster/diagramme_de_classes_simplifie_du_projet</link>
		<comments>https://blog.developpez.com/wu-wei/p7549/projet-belotemaster/diagramme_de_classes_simplifie_du_projet#comments</comments>
		<pubDate>Wed, 29 Apr 2009 13:03:21 +0000</pubDate>
		<dc:creator><![CDATA[wu_wei]]></dc:creator>
				<category><![CDATA[Projet BeloteMaster]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voilà une version simplifiée du diagramme de classes de BeloteMaster, en franglais BeloteModel, BeloteView, BeloteController constituent le MVC qui s&#8217;affiche dans la fenêtre principale. BeloteManager est une sous classe d&#8217;ApplicationModel, une des classes pilier de Visual Works. Généralement, c&#8217;est elle qui gère l&#8217;affichage de la fenêtre et qui distribue la main aux éléments internes par son contrôleur. Pour faire simple, on instancie BeloteManager et on envoie ainsi un message au constructeur d&#8217;interface qui construit la [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voilà une version simplifiée du diagramme de classes de BeloteMaster, en franglais <img src="https://blog.developpez.com/wu-wei/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p><span id="more-2"></span></p>
<p><img src="http://blog.developpez.com/media/beloteUML.gif" width="1059" height="795" alt="diagramme de classe simplifié de BeloteMaster" /></p>
<p>BeloteModel, BeloteView, BeloteController constituent le MVC qui s&rsquo;affiche dans la fenêtre principale. BeloteManager est une sous classe d&rsquo;ApplicationModel, une des classes pilier de Visual Works. Généralement, c&rsquo;est elle qui gère l&rsquo;affichage de la fenêtre et qui distribue la main aux éléments internes par son contrôleur.</p>
<p>Pour faire simple, on instancie BeloteManager et on envoie ainsi un message au constructeur d&rsquo;interface qui construit la fenêtre à partir de la spécification donnée par BeloteManager. BeloteManager instancie à son tour BeloteModel qui instancie sa vue BeloteView, qui se référence auprès de BeloteManager pour être affichable dans la fenêtre. Entre temps, BeloteView a instancié BeloteController qui se référence automatiquement à BeloteModel. BeloteModel instancie durant son initialisation également 4 BeloteJoueur ( qui ne sont pas référencés par BeloteManager contrairement à ce que dit le schéma !). </p>
<p>D&rsquo;un point de vue fonctionnel:<br />
&#8211; BeloteManager est la classe qui permet d&rsquo;intégrer le tout dans une fenêtre et de la faire communiquer avec l&rsquo;OS.<br />
&#8211; BeloteModel est l&rsquo;ordonnanceur du jeu, à savoir qu&rsquo;il gère le déroulement de la partie en fonction des actions venant du controleur, updatant la vue lorsque nécessaire.<br />
&#8211; BeloteView gère l&rsquo;affichage<br />
&#8211; BeloteController gère les actions de l&rsquo;utilisateur (clic souris, frappe clavier)<br />
&#8211; BeloteJoueur représente un joueur (IA ou non, défini par automat qui est un booléen).</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Description générale du projet</title>
		<link>https://blog.developpez.com/wu-wei/p7539/projet-belotemaster/description_generale_du_projet</link>
		<comments>https://blog.developpez.com/wu-wei/p7539/projet-belotemaster/description_generale_du_projet#comments</comments>
		<pubDate>Sun, 26 Apr 2009 19:24:23 +0000</pubDate>
		<dc:creator><![CDATA[wu_wei]]></dc:creator>
				<category><![CDATA[Projet BeloteMaster]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce projet est une sorte d&#8217;amusement pour décompresser du travail&#8230; Étant un grand passionné de la belote dominicale, j&#8217;ai commencé à décortiquer le jeu sous forme d&#8217;algorithmes amusants et puis à la lecture de certains livres d&#8217;intelligence artificielle, je me suis dit: pourquoi ne pas tenter de programmer une IA jouant à la belote? Ça me permettra i) de revoir les bases du paradigme Modèle-Vue-Contrôleur pour la partie graphique, ii) de coder les choses que [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ce projet est une sorte d&rsquo;amusement pour décompresser du travail&#8230;</p>
<p>Étant un grand passionné de la belote dominicale, j&rsquo;ai commencé à décortiquer le jeu sous forme d&rsquo;algorithmes amusants et puis à la lecture de certains livres d&rsquo;intelligence artificielle, je me suis dit: pourquoi ne pas tenter de programmer une IA jouant à la belote? Ça me permettra i) de revoir les bases du paradigme Modèle-Vue-Contrôleur pour la partie graphique, ii) de coder les choses que je connais en IA et iii) de jouer enfin à la belote pendant la semaine, devant mon ordi <img src="https://blog.developpez.com/wu-wei/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Ce qui m&rsquo;intéresse particulièrement, au delà de la prise de décision de l&rsquo;agent, c&rsquo;est la possibilité de coder des &laquo;&nbsp;tempéraments&nbsp;&raquo; qui évoluent en fonction des expériences rencontrées par l&rsquo;IA.</p>
<p>L&rsquo;idée est d&rsquo;en faire profiter la communauté, pour mieux faire connaître Smalltalk, un langage assez sympa pour coder ce genre de choses, et aussi pour donner des exemples sur le fonctionnement de VisualWorks, en français, ce qui est assez rare j&rsquo;ai l&rsquo;impression. A priori, je compte partager tout le code ici, y compris l&rsquo;executable final, sous une licence à déterminer mais gratuite.</p>
<p>A l&rsquo;heure actuelle, je code la GUI, l&rsquo;architecture du programme est définie, le prochain billet sur ce projet sera un diagramme descriptif du projet. </p>
<p>Wu_Wei</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
