<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Kanchigai suru na</title>
	
	<link>http://tsundere.fr</link>
	<description />
	<lastBuildDate>Thu, 19 Aug 2010 15:23:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/KanchigaiSuruNa" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="kanchigaisuruna" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Pathfinding dans un plan</title>
		<link>http://tsundere.fr/pathfinding-dans-un-plan-121.html</link>
		<comments>http://tsundere.fr/pathfinding-dans-un-plan-121.html#comments</comments>
		<pubDate>Sat, 14 Nov 2009 18:26:50 +0000</pubDate>
		<dc:creator>Kcazer</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://tsundere.fr/?p=121</guid>
		<description><![CDATA[Dans le cadre d&#8217;un nouveau projet, je me suis récemment retrouvé confronté à un problème de recherche de chemin. Pour résumer, j&#8217;avais une surface plane, de taille non fixée, sur laquelle se trouve différents obstacles, et le problème consistait à trouver un chemin reliant deux point de ce plan, en évitant bien évidemment les obstacles. [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-bottom: 0cm">Dans le cadre d&#8217;un nouveau projet, je me suis récemment retrouvé confronté à un problème de recherche de chemin. Pour résumer, j&#8217;avais une surface plane, de taille non fixée, sur laquelle se trouve différents obstacles, et le problème consistait à trouver un chemin reliant deux point de ce plan, en évitant bien évidemment les obstacles.<br />
Le chemin ne devant pas forcement être optimal, mais plutôt rapide à trouver, je me suis donc penché sur l&#8217;algorithme A*, qui correspondait exactement à mes besoins. Reste alors à définir un graphe correspondant au plan et à ses obstacles sur lequel je pourrais appliquer l&#8217;algorithme.</p>
<p style="margin-bottom: 0cm"><span id="more-121"></span>La première idée est d&#8217;utiliser une grille, où chaque nœud pourrait correspondre par exemple à un pixel du plan. Cette méthode a l&#8217;avantage d&#8217;être assez précise, mais malheureusement trop gourmande en temps et en mémoire si la zone de travail devient trop grande.<br />
L&#8217;utilisation d&#8217;une grille étant performant sur des petites zones, il pourrait être intéressante d&#8217;essayer de simplifier le graphe, en prenant par exemple un maillage plus grand qu&#8217;un simple pixel. Mais une fois encore, un problème se pose, non plus de performance, mais de cohérence dans le chemin. En effet, le chemin va donc passer par les nœuds de la grille, et ne sera donc pas forcement une ligne droite lorsqu&#8217;il s&#8217;agira de relier deux nœuds, même s&#8217;il n&#8217;y a pas d&#8217;obstacle.</p>
<div id="attachment_130" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-130" title="pathfinding_grid" src="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_grid.png" alt="L'utilisation d'une grille provoque un effet d'escalier." width="400" height="300" /><p class="wp-caption-text">L&#39;utilisation d&#39;une grille provoque un effet d&#39;escalier.</p></div>
<p style="MARGIN-BOTTOM: 0cm">Évidemment, la meilleure solution consisterait à obtenir un graphe collant parfaitement aux obstacles. Le problème restant de trouver comment l&#8217;obtenir. En fait, ce n&#8217;est pas aussi compliqué que ça peut en avoir l&#8217;air, car au final, on a seulement besoin de connaître les sommets des obstacles (à condition que ceux-ci soient des polygones, le cas des figures courbes est plus complexe et je n&#8217;en parlerai pas).<br />
Le travail va donc se décomposer en plusieurs étapes:</p>
<ul>
<li>
<div style="MARGIN-BOTTOM: 0cm">Création de la carte des obstacles.</div>
</li>
<li>
<div style="MARGIN-BOTTOM: 0cm">Création des sommets du graphe.</div>
</li>
<li>
<div style="MARGIN-BOTTOM: 0cm">Création des arrêtes du graphe.</div>
</li>
</ul>
<h3 style="MARGIN-BOTTOM: 0cm">Création de la carte des obstacles</h3>
<p style="MARGIN-BOTTOM: 0cm">Il n&#8217;y a pas énormément de choses à dire sur cette étape, elle dépend avant tout des besoins du programme. Dans mon exemple, je me contenterais d&#8217;utiliser des obstacles rectangulaires car ils sont plus simple à gérer, et que je n&#8217;ai pas eu l&#8217;occasion de travailler avec d&#8217;autre formes. A noter toutefois que rien n&#8217;empêche la superposition de plusieurs rectangles.</p>
<div id="attachment_122" class="wp-caption aligncenter" style="width: 410px"><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_01.png"><img class="size-medium wp-image-122" title="pathfinding_01" src="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_01-400x300.png" alt="Les zones d'obstacles" width="400" height="300" /></a><p class="wp-caption-text">Les zones d&#39;obstacles</p></div>
<h3>Création des sommets du graphe</h3>
<p style="MARGIN-BOTTOM: 0cm">Deux sous-étapes sont nécessaires ici, la première consistant à ajouter les futurs nœuds, et la seconde à supprimer ceux qui ne sont pas valides et/ou inutiles.<br />
Dans le cas d&#8217;un rectangle, il suffit de prendre les sommets déjà existant. J&#8217;ai, dans mon cas, eu besoin d&#8217;ajouter une marge autour de mes obstacles, de manière a ce que, lors de l&#8217;affichage final, les unités ne se superposent pas aux obstacles.<br />
La marche à suivre est donc simple:</p>
<ul>
<li><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_02.png">Ajout des nœuds.</a></li>
<li>
<p style="MARGIN-BOTTOM: 0cm"><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_03.png">Détection et suppression des nœuds invalides</a>, c&#8217;est à dire qui se retrouvent à l&#8217;intérieur d&#8217;un rectangle.</p>
</li>
</ul>
<p style="MARGIN-BOTTOM: 0cm">Ce qui nous donne:</p>
<div id="attachment_125" class="wp-caption aligncenter" style="width: 410px"><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_04.png"><img class="size-medium wp-image-125  " title="pathfinding_04" src="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_04-400x300.png" alt="Suppression des noeuds invalides" width="400" height="300" /></a><p class="wp-caption-text">Les nœuds du graphe</p></div>
<p style="MARGIN-BOTTOM: 0cm">Il y a d&#8217;autres tests possibles concernant la validité d&#8217;un nœud, comme la non-superposition avec un autre nœud, ainsi que le non-alignement de trois nœuds, cas dans lequel le nœud médian sera sûrement inutile (sauf si un obstacle les sépare).</p>
<p style="MARGIN-BOTTOM: 0cm">De plus, une petite note technique, ici j&#8217;ai crée les nœuds puis je les ai testé, avant de les supprimer si ils n&#8217;étaient pas valides. Il est évident que pour faire les choses correctement, il est plus logique de ne créer le nœud que si la position à laquelle on veut le mettre est une position valide, c&#8217;est-à-dire faire le test avant de le créer. Dans le cas où ce n&#8217;est pas possible (on ne sait jamais), l&#8217;ordre création/test/suppression est une bonne alternative, moins gourmande en mémoire.</p>
<h3 style="MARGIN-BOTTOM: 0cm">Création des arrêtes du graphe</h3>
<p style="MARGIN-BOTTOM: 0cm">La méthode est exactement la même que pour la création des nœuds, on commence par créer toutes les arrêtes possibles avant de détecter et supprimer celles qui ne sont pas valides:</p>
<ul>
<li>
<div style="MARGIN-BOTTOM: 0cm"><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_05.png">Ajout des arrêtes.</a></div>
</li>
<li>
<div style="MARGIN-BOTTOM: 0cm"><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_06.png">Détection et suppression des arrêtes invalides.</a> Il s&#8217;agit des arrêtes qui passent à travers un obstacle, ou qui sont incluses dans une autre arrête (bien que cette possibilité ne puisse arriver si les nœuds inutiles ont été supprimés).</div>
</li>
</ul>
<p style="MARGIN-BOTTOM: 0cm">On obtient alors:</p>
<div id="attachment_128" class="wp-caption aligncenter" style="width: 410px"><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_07.png"><img class="size-medium wp-image-128" title="pathfinding_07" src="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_07-400x300.png" alt="Les arrêtes du graphe" width="400" height="300" /></a><p class="wp-caption-text">Les arrêtes du graphe</p></div>
<p>Les mêmes remarques que pour la création des nœuds s&#8217;appliquent ici, à savoir que créer toutes les arrêtes pourrait être très gourmand en mémoire, surtout si la carte comporte de nombreux obstacles.<br />
Certains auront surement remarqué que, depuis le début, je n&#8217;ai pas inclus les points de départ et d&#8217;arrivée dans le graphe. Il y a une bonne raison à cela: contrairement aux sommet des rectangles, ces nœuds là ne sont pas fixes, et les arrêtes correspondantes devront être recalculés à chaque déplacement, il est donc possible de pré-calculer les nœuds et arrêtes du graphe, et d&#8217;y ajouter à la demande les nœuds de départ et d&#8217;arrivée.</p>
<h3>Résultat</h3>
<p>Une fois le départ et l&#8217;arrivée inclus dans le graphe, il suffit d&#8217;appliquer n&#8217;importe quel algorithme de recherche de chemin pour obtenir le résultat recherché:</p>
<div id="attachment_142" class="wp-caption aligncenter" style="width: 410px"><a href="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_08.png"><img class="size-medium wp-image-142" title="pathfinding_08" src="http://tsundere.fr/wp-content/uploads/2009/11/pathfinding_08-400x300.png" alt="Résultat final" width="400" height="300" /></a><p class="wp-caption-text">Résultat final</p></div>
<p>Pour les curieux, toutes les images, sauf la première et la dernière, ont été générée via un script php, <a href="http://tsundere.fr/wp-content/uploads/2009/12/pathfinding.html">disponible ici</a>.<br />
Ce script ne permet que de générer le graphe, et n&#8217;implémente pas la recherche de chemin.<br />
Ayant codé ce script rapidement pour tester cette méthode, et n&#8217;ayant pas prévu à l&#8217;origine de le distribuer, la syntaxe est un peu brouillon et peu, voire pas du tout, commentée. Toutefois, son utilisation est suffisamment simple pour s&#8217;y retrouver.</p>
]]></content:encoded>
			<wfw:commentRss>http://tsundere.fr/pathfinding-dans-un-plan-121.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plusra PSP</title>
		<link>http://tsundere.fr/plusra-psp-74.html</link>
		<comments>http://tsundere.fr/plusra-psp-74.html#comments</comments>
		<pubDate>Sat, 24 Oct 2009 19:49:47 +0000</pubDate>
		<dc:creator>Kcazer</dc:creator>
				<category><![CDATA[Releases]]></category>
		<category><![CDATA[Jeux]]></category>
		<category><![CDATA[Plusra]]></category>
		<category><![CDATA[PSP]]></category>

		<guid isPermaLink="false">http://tsundere.fr/?p=74</guid>
		<description><![CDATA[Et voici donc, la toute première release, Plusra, un jeu de réflexion mathématique dans lequel vous devrez combiner des blocs afin d&#8217;obtenir le résultat demandé. Ce jeu étant une application non-officielle (homebrew), vous devez posséder une PSP en custom firmware. Des tonnes de tutoriaux étant déjà disponibles un peu partout sur le web, je vous [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Et voici donc, la toute première release, Plusra, un jeu de réflexion mathématique dans lequel vous devrez combiner des blocs afin d&#8217;obtenir le résultat demandé.<br />
Ce jeu étant une application non-officielle (homebrew), vous devez posséder une PSP en custom firmware. Des tonnes de tutoriaux étant déjà disponibles un peu partout sur le web, je vous laisse chercher.</p>
<p style="text-align: left;">Passons maintenant à la partie importante, le jeu.<br />
Plusra est à l&#8217;origine un jeu PC développé par <a href="http://oidn.info/">Gil Bear</a>, dans le cadre d&#8217;un concours de programmation organisé par <a href="http://www.silversecond.net/">SmokingWOLF</a>. Cette version, reprenant une très grande partie des ressources, ainsi que le concept, est donc évidemment distribué avec l&#8217;accord du créateur original.<br />
Le principe du jeu est simple, il faut déplacer des blocs de différentes couleurs afin de les faire fusionner et d&#8217;obtenir des blocs de la valeur demandée. Il y a, bien évidemment, d&#8217;autres règles :</p>
<ul>
<li style="text-align: left;">Une barre de vie, qui, lorsqu&#8217;elle arrive à 0, implique une fin de partie.</li>
<li>De nouveaux blocs qui viennent s&#8217;ajouter régulièrement à la surface de jeu. Lorsque l&#8217;écran est rempli, la vie diminue rapidement et peut mener à un Game Over assez vite.</li>
<li>Tout bloc d&#8217;une valeur supérieure à 10, qui ne soit pas la celle demandée, sera détruit, et autant de points de vie seront retirés.</li>
<li>Et quelques autres que je vous laisse découvrir.</li>
</ul>
<p><span id="more-74"></span>Il existe quelque différence entre la version PC et la version PSP, tel que le scoring légèrement modifié, un système de niveaux, la possibilité d&#8217;enregistrer les noms dans le tableau de highscores, mais dans l&#8217;ensemble, le jeu est le même. Les parties sont également sensiblement plus courtes sur PSP.</p>
<p>Concernant les contrôles de jeu, deux touches seulement sont utilisées, en plus des flèches directionnelles :</p>
<ul>
<li>Rond, qui sert, maintenu, à déplacer les blocs à l&#8217;aide des flèches.</li>
<li>Carré, qui permet de faire venir plus rapidement des nouveaux blocs dans la zone de jeu. Attention, ce n&#8217;est pas gratuit, en cas d&#8217;abus, le Game Over risque d&#8217;arriver plus tôt que prévu.</li>
</ul>
<p>Pour récupérer le jeu, c&#8217;est par ici : <a href="http://tsundere.fr/download/9/">PlusraPSP</a> (<a href="http://www.mediafire.com/file/tjhm2kzhjhn/PlusraPSP.zip">miroir</a>).<a href="http://tsundere.fr/wp-content/uploads/2009/10/PlusraPSP.7z"><br />
</a>Et pour patienter pendant le téléchargement, une petite vidéo de présentation :</p>
<p style="text-align: center;"><object style="width: 480px; height: 297px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="297" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/Nrv20uNdo8c" /><embed style="width: 480px; height: 297px;" type="application/x-shockwave-flash" width="480" height="297" src="http://www.youtube.com/v/Nrv20uNdo8c"></embed></object></p>
<p style="text-align: left;">
<p style="text-align: left;">Mise à jour du 4 novembre 2009:</p>
<ul>
<li style="text-align: left;">Correction d&#8217;un bug au lors du chargement des images.</li>
<li>Suppression de la possibilité de mettre le jeu en pause, qui rend le jeu beaucoup trop facile, et qui n&#8217;était pas censé exister dans la version finale&#8230;</li>
</ul>
<p>Mise à jour du 29 novembre 2009:</p>
<ul>
<li>Les images et sons sont maintenant contenu dans une seule archive, ce qui limite le nombre de fichiers à transférer.</li>
<li>Les Bgm peuvent être supprimées sans que cela n&#8217;empêche le jeu de fonctionner (permet de gagner environ 12Mo, le jeu ne fait alors plus qu&#8217;environ 40Ko ).</li>
<li>Ajout d&#8217;un écran de chargement.</li>
<li>Correction d&#8217;un bug d&#8217;affichage lors de l&#8217;ajout d&#8217;un nouveau record.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tsundere.fr/plusra-psp-74.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Parce qu’il faut bien commencer</title>
		<link>http://tsundere.fr/parce-quil-faut-bien-commencer-1.html</link>
		<comments>http://tsundere.fr/parce-quil-faut-bien-commencer-1.html#comments</comments>
		<pubDate>Thu, 22 Oct 2009 20:00:22 +0000</pubDate>
		<dc:creator>Kcazer</dc:creator>
				<category><![CDATA[Actualités]]></category>

		<guid isPermaLink="false">http://tsundere.fr/?p=1</guid>
		<description><![CDATA[Parce que c&#8217;est pratique. Parce que Fettgans a raison. Parce qu&#8217;il y aura toujours pire. Parce que je n&#8217;ai pas grand chose à faire. Parce que de toute façon, j&#8217;avais envie de le faire. Parce qu&#8217;il m&#8217;a fallu plus de deux semaines pour m&#8217;y mettre. Bon, j&#8217;avais prévu d&#8217;écrire un bon gros pavé, histoire de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Parce que c&#8217;est pratique.<br />
Parce que <a href="http://www.doujinsuki.com/higurashi-en-francais-c-est-pour-bientot-315.html">Fettgans</a> a raison.<br />
Parce qu&#8217;il y aura toujours pire.<br />
Parce que je n&#8217;ai pas grand chose à faire.<br />
Parce que de toute façon, j&#8217;avais envie de le faire.<br />
Parce qu&#8217;il m&#8217;a fallu plus de deux semaines pour m&#8217;y mettre.</p>
<p style="text-align: left;"><span id="more-1"></span></p>
<div id="attachment_83" class="wp-caption aligncenter" style="width: 294px"><a href="http://tsundere.fr/wp-content/uploads/2009/10/Remilia-socks.jpg"><img class="size-medium wp-image-83  " title="Parce que Remilia sait être convaincante." src="http://tsundere.fr/wp-content/uploads/2009/10/Remilia-socks-284x400.jpg" alt="Parce que Remilia sait être convaincante." width="284" height="400" /></a><p class="wp-caption-text">Remilia Scarlet par usotukiya (嘘つき屋)</p></div>
<p style="text-align: left;">Bon, j&#8217;avais prévu d&#8217;écrire un bon gros pavé, histoire de bien commencer, mais je pense qu&#8217;en fait je vais me contenter d&#8217;une petite présentation simple et rapide.</p>
<p style="text-align: left;">
<p style="text-align: left;">L&#8217;idée de base était d&#8217;avoir un endroit pour parler des choses que j&#8217;aime, ce qui se résume plus ou moins à deux domaines, la programmation, et le japon, principalement les <a href="http://en.wikipedia.org/wiki/Dōjin_soft">jeux amateurs</a> et l&#8217;animation.<br />
Au final, ça donne des petits utilitaires pour doujingame, bien souvent des extracteurs de ressources, certains sont déjà disponibles sur  la page <a href="/tools">Tools</a>, d&#8217;autres devraient suivre plus tard. En plus de ces petits scripts, il y aura des projets un peu plus conséquents, tel que par exemple des adaptations de doujingame pour PSP, voire des créations originales si je trouve une bonne idée.<br />
Concernant les portages de jeux existants vers la PSP, le premier projet est actuellement en phase finale de test, que les amateurs de jeux de réflexion se préparent, la release devrait arriver avant la fin de la semaine.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">Et voilà, je pense que ça devrait aller, maintenant, retour au boulot, les releases vont pas se faire toutes seules.</p>
]]></content:encoded>
			<wfw:commentRss>http://tsundere.fr/parce-quil-faut-bien-commencer-1.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
