Generér une carte...

Forum de développements privés.

Modérateur: Equipe

Règles du forum
A lire impérativement sur notre page : Règlement

Generér une carte...

Messagepar Alcazarfr » 14 Juin 2005 à 11:36

Voila, j'ai mon nouveau projet, Age of Civilisations, qui permet de gerez des Etats.

J'ai dessus une carte, qui represent sa région etat + les 8 regions qui l'entoure (ça fait un carré)


Base:
Chaque région a des coordonnées, donné par region_x et region_y .
La carte affiche actuellement une région centrale que l'on choisie, + les 8 régions autour, grace à leurs coordonnées. Si une des régions autour est vide, elle affiche une région décoloré avec en infobulle "région innocuppé"
La carte est constitué de 3 lignes, ayant chacune 3 colonnes

Actuellement, la carte est issue de 9 requetes SQL, faute d'avoir trouvé mieux et faute de temps
Elles sont de type:

Code: Tout sélectionner
	$sql1 = "SELECT r.*, e.*, u.username
		FROM " . AOC_REGIONS_TABLE . " r, " . AOC_ETATS_TABLE . " e, " . USERS_TABLE . " u
			WHERE region_y = $region_y
				AND region_x = $region_x + 1
				AND e.etat_chef = r.region_chef
				AND u.user_id = r.region_chef";
 	if( !($result1 = $db->sql_query($sql1)) )
	{
		message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql1);
	}
	if ( $row1 = $db->sql_fetchrow($result1) )
	{
		$image_1 = 'region';
		$nom_1 = sprintf($lang['Aoc_carte_texte'], addslashes($row1['region_nom']), $row1['region_x'], $row1['region_y'], addslashes($row1['etat_nom']), addslashes($row1['username']));
	}
	else
	{
		$image_1 = 'region_vide';
		$nom_1 = 'Region inoccupée';
	}


ce qui donne à la fin:

Code: Tout sélectionner
$template->assign_vars(array(
	'IMAGE_1' => $image_1,
	'IMAGE_2' => $image_2,
	'IMAGE_3' => $image_3,
	'IMAGE_4' => $image_4,
	'IMAGE_5' => $image_5,
	'IMAGE_6' => $image_6,
	'IMAGE_7' => $image_7,
	'IMAGE_8' => $image_8,
	'NOM' => $nom_centre,
	'NOM_1' => $nom_1,
	'NOM_2' => $nom_2,
	'NOM_3' => $nom_3,
	'NOM_4' => $nom_4,
	'NOM_5' => $nom_5,
	'NOM_6' => $nom_6,
	'NOM_7' => $nom_7,
	'NOM_8' => $nom_8)
);


Voila, ça marche, aucun pb...


Je veux cependant améliorer la carte

Je passe donc par 3 requêtes qui genère une boucle chacune (une par ligne):

Code: Tout sélectionner
	$sql1 = "SELECT r.*, e.*, u.username
		FROM " . AOC_REGIONS_TABLE . " r, " . AOC_ETATS_TABLE . " e, " . USERS_TABLE . " u
		WHERE r.region_y = $region_y + 1
			AND r.region_x <= $region_x + 1
			AND r.region_x >= $region_x - 1
			AND e.etat_chef = r.region_chef
			AND u.user_id = r.region_chef
		ORDER BY r.region_x ASC";
 	if( !($result1 = $db->sql_query($sql1)) )
	{
		message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql1);
	}
	if ( $row1 = $db->sql_fetchrow($result1) )
	{
		do
		{
			$image = 'region';
			$texte = sprintf($lang['Aoc_carte_texte'], addslashes($row1['region_nom']), $row1['region_x'], $row1['region_y'], addslashes($row1['etat_nom']), addslashes($row1['username']));

			$template->assign_block_vars('1', array(
				'IMAGES_1' => $image,
				'TEXTES_1' => $texte)
			);
		}
		while ( $row1 = $db->sql_fetchrow($result1) );
		$db->sql_freeresult($result1);
	}


Et ceux trois fois, en variant
Code: Tout sélectionner
		WHERE r.region_y = $region_y + 1


Ca march aussi... en partie
Car si une des regions n'existe pas... rien ne s'affiche (un blanc)


Regardez:


La carte du haut correspond à la "nouvelle", celle du bas à "l'ancienne"

Image lorsque c'est la région en coordonnée (0,0) qui est représenté: elle est entouré par 8 Etat, aucun pb sur les 2 cartes:
Image

Et voici les cartes lorsqu'elle sont centrées sur la région 1,1 qui n'est pas entouré par 8 régions

Image


Pourriez vous me donner une idée pour que, même si la requête SQL ne renvoie rien, on entre dans la boucle (ou autre) une variable pour dire "pas de region" ... :?

Merci pour toute aide
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Alcazarfr » 15 Juin 2005 à 11:50

C'est ma demande ou ma formulation :?
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Alcazarfr » 16 Juin 2005 à 13:02

merci pour votre aide, mais j'ai fini par trouvé en utilisant des tableaux
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22


Retourner vers Développements privés

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité