Labyrinthes en php (gd + html) génération + résolution

Soyez le premier à donner votre avis sur cette source.

Vue 9 662 fois - Téléchargée 938 fois

Description

Voici une classe qui génère et résout des labyrinthes en php le résultat peut être afficher en image/png ou en tableau html.

Pour l'utilisation regardez le fichier index.php

Source / Exemple :

<?php
/**
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

	set_time_limit(10);

	error_reporting(E_ALL);

	/*

	---- Générateur et Solveur de Labyrinthes ----

	

	fichier gen.fusion.class.php

	Genere un labyrinthe par fusion.

	CF : article sur wikipedia.

	

	*/

	

	/* Codage de class type : php5 */

	

	define('IDX', 3);



	/* Sud et Est ( bas et droite) */

	define('S', 0);

	define('E', 1);

	define('N', 2);

	define('O', 3);

	

	require 'labyrinthe.class.php5';

	require 'solveur.class.php5';

	

	require 'genFusion.class.php5';

	require 'genExplo.class.php5';

	

	require 'solveDAG.class.php5';

	

	

?>

<?php

if(isset($_POST['choix']))

{

	

	if($_POST['taille'] < 1000)

		$m = $n = intval($_POST['taille']);

	elseif($_POST['taille'] == 1020){

		$m = 10;

		$n = 20;

	}

	elseif($_POST['taille'] == 2030){

		$m = 30;

		$n = 20;

	}

	else

		die('TAILLE NON CORRECTE');

	

	$w_case = intval($_POST['w_case']);

	if($_POST['method'] == 'fusion')

		$class = new genFusion($m, $n, $w_case);

	elseif($_POST['method'] == 'explo')

		$class = new genExplo($m, $n, $w_case);

	

	$time_gene = microtime(1);

	$laby = $class->generer();

	if(empty($_POST['resoudre']))

	{

		if($_POST['affichage'] == 'html')

		{

			$class->laby2html($laby, $time_start);

		}

		else

			$class->laby2png($laby);

		

	}

	else

	{

		$solve = new solveDAG($laby, $m, $n);

		$time_res = microtime(1);

		$solution = $solve->resoudre();

		if($_POST['affichage'] == 'html')

		{

			$class->laby2html($laby, $solution, $time_gene, $time_res);

		}

		else

			$class->laby2png($laby, $solution);

	}

}

else

{

?>

<form action="" method="post">

<fieldset>

<p><strong>Optimisation en cours</strong></p>

<legend>Methode de génération</legend>

	<label for="fusion">Fusion</label><input type="radio" name="method" value="fusion" /><br />

	<label for="explo">Exploration exaustive</label><input type="radio" name="method" value="explo" id="explo" />

</fieldset>

<fieldset>

<legend>Methode d'affichage</legend>

	<label for="png">Image PNG</legend><input id="png" type="radio" name="affichage" value="png" /><br />

	<label for="html">Tableau HTML (affiche le tps d'execution)</legend><input id="html" type="radio" name="affichage" value="html" />

</fieldset>

<fieldset>

	<legend>Taille</legend>

	<label for="10">10*10</label><input id="10" type="radio" name="taille" value="10" /><br />

	<label for="20">20*20</label><input id="20" type="radio" name="taille" value="20" /><br />

	<label for="40">40*40</label><input id="40" type="radio" name="taille" value="40" /><br />

	<label for="45">45*45</label><input id="45" type="radio" name="taille" value="45" /><br />

	<label for="1020">10*20</label><input id="1020" type="radio" name="taille" value="1020" /><br />

	<label for="2030">30*20</label><input id="2030" type="radio" name="taille" value="2030" /><br />

</fieldset>

<fieldset>

	<legend>Taille des cases</legend>

	<select name="w_case">

		<option value="10">10</option>

		<option value="15">15</option>

		<option value="20" selected="selected">20</option>

		<option value="30">30</option>

		<option value="50">50</option>

		<option value="70">70</option>

	</select>

</fieldset>

<fieldset>

	<legend>Resolution</legend>

	<label for="resoudre">Resoudre ?</label><input type="checkbox" name="resoudre" id="resoudre" checked="checked" /><br />

	<label for="DAG">Methode DAG</label><input type="radio" name="methode_res" id="DAG" selected="selected" />

</fieldset>

<input type="submit" name="choix" value="Créer" />

</form>

<?php

}

?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
114
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
28 mars 2010

tres fort effectivement !!!!
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009

Pas mal ...
Messages postés
3
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
4 mai 2009

a l'époque ou j'ai réalisé ce script je nutilisait pas les exeptions mais ce serai mieux c'est vrai.
pour un exemple : vosmaps.fr/labyrinthe
Messages postés
66
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
28 décembre 2010

Bonjour

J'ai regardé juste très vite ton code sans me plonger dans les détails et j'ai pu remarquer une petite chose qui me déplait.

>> die('TAILLE NON CORRECTE');

Pourquoi ne pas utiliser les exceptions vu que tu utilises les classes et compagnie ?

Je regardes et test je te dis ce que j'en pense !
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009

Salut,

Mêmes remarques que EVANGUN,
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.