JeuWeb - Crée ton jeu par navigateur

Version complète : QuestionS
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3
Bonjour !

J'ai un petit problème pour l'affichage de ma map

Code PHP :
<?php
 
include("connexion_bdd.php");

$info_joueur_tab mysql_query("SELECT * FROM donnees WHERE pseudo='$pseudoC'");
$info_joueur mysql_fetch_array($info_joueur_tab);

$case_rec mysql_query("SELECT * FROM carte WHERE pseudo='$pseudoC'");
$carte2 mysql_fetch_array($case_rec);


$MAJ_du_lieu mysql_query("UPDATE donnees SET lieu='carte' WHERE pseudo ='$pseudoC'");

//
//
//
//
//

$info_carte_tab mysql_query("SELECT * FROM carte WHERE pseudo = '".$_SESSION['pseudo']."'")or die (mysql_error());
$info_carte mysql_fetch_array($info_carte_tab)or die (mysql_error());

//
//
//
//
//
$case_act $info_carte['case_act'];

?>

<table cellspacing="0">

<?php
for ($j 1$j <= 18$j++)
    {

    for (
$i 1$i <= 20$i++)
        {
        
$case $j*100+$i;
        if(
$case == $case_act)
            {            
            
$i_min $i 3;
            
$i_max $i 3;
            
$j_min $j 3;
            
$j_max $j 3;
            if (
$i_min <= 0)
                {
                
$i_min 1;
                }
            elseif (
$i_max >= 21)
                {
                
$i_max 20;
                }
            elseif (
$j_min <= 0)
                {
                
$j_min 1;
                }
            elseif (
$j_max >= 19)
                {
                
$j_max 18;
                }
            
            for (
$j2 $j_min$j2 <= $j_max$j2++)
                {
                echo(
'<tr>');
                for (
$i2 $i_min$i2 <= $i_max$i2++)
                    {
                    
$case2 $j2*100+$i2
                    if (
$case2 == $case_act)
                        {
                        
$image_case_act "images/gde_version/croix.PNG";
                        print 
'<td><img src='.$image_case_act.' alt="Votre case" /></td>';
                        }
                    else
                        {
                        
                        if (
$info_carte[$case2] == 0)
                            {
                            
$image_case "images/gde_version/noir.PNG";
                            print 
'<td><img src='.$image_case.' alt= "Case' .$case2.'" /></td>';
                            }
                        else
                            {
                            
$image_case "images/gde_version/$case2.PNG";
                            print 
'<td><img src='.$image_case.' alt= "Case' .$case2.'" /></td>';
                            }
                        }

                    }
                echo(
'</tr>');
                }
            }
        }
   }
   
?>
</table> 

Le script affiche les cases dans un rayon de 3 cases autour de l'endroit ou se trouve le joueur. Si le joueur n'est jamais allé sur une case, elle apparait en noir

Dans la base de données, j'ai un champ pour chaque case
(exemple : 808 ; 809 ; 810 etc)
Si le joueur est déjà allé sur une case, le champ vaut 1.
Sinon, il vaut 0.

Problème : Dans ma base de données, certaines case déjà visitées (et donc valant 1) apparaissent en noir quand même.....

et si je teste
echo $info_carte[109];
Cela m'affiche 0 alors que dans la base de données il vaut 1

Par contre si je renomme le champ "109" dans ma base de données par autre chose (cent_neuf par exemple) et que je demande
echo $info_carte['cent_neuf'] là ça m'affiche bien 1 et la case n'est pas en noir oO

Je comprends pas ce qui ne marche pas. N'est t-il pas possible de nommer un champ par un chiffre ?

Pourtant si j'essaye avec la case 808 ça marche ! J'ai l'impression que ça ne marche pas quand le nombre est inférieur à 400

Je sollicite donc votre aide !
Merci d'avance !

PS : je sais que le code pour afficher la carte est un peu lourd mais je ne pense pas qu'il pose problème pour cela !
bah a vue de nez avant d'aller dormir

essaie avec ['109'] et pas [109] soit un texte et non un nombre


maintenant... ca ne me parait pas tres pertinent de créer autant de champ que de cases, tu pourrais peut être faire une table

['perso']['case']['statut']

avec le statut valant 0 ou 1

comme ca si tu rajoutes des cases, tu ne modifies pas ta table ( etc etc etc ..)
plusieurs turcs mon sauter à la figure, résultat j'ai même pas fait l'effort de comprendre dans le détail ce que fait ton code...

lire le manuel: mysql_fetch_array()

par défaut tu récupère les deux indexé et associatif (puisque MYSQL_BOTH est la valeur par défaut).
donc c'est claire que tu auras pas ce que tu veux (et confond pas l'index de mysql_fetch_array avec ton ID de table merci34).

enfin y a un truc qui me choque:
Code :
if ($i_min <= 0)
                {
                $i_min = 1;
                }
            elseif ($i_max >= 21)
                {
                $i_max = 20;
                }
            elseif ($j_min <= 0)
                {
                $j_min = 1;
                }
            elseif ($j_max >= 19)
                {
                $j_max = 18;
                }

t'es sûr de ton coup ? parce que une série de esleif, => dès qu'une condition est vérifiée, il zappe le reste !... je doute que ce soit ce que tu veux.

enfin je connais pas le reste; mais ton array il est pas plutot du type: $carte_info['ID']= là_la_valeur_de_l_ID et $carte_info['etat']=1_ou_0 plutot que $carte_info['là_la_valeur_de_l_ID'] = 1_ou_0
edit heu en fait sans la structure de ta table c'est plus un jeu de devinette 10
J'ai rajouté mis un $info_carte = mysql_fetch_array($info_carte_tab, MYSQL_ASSOC)
et tout semble fonctionner. Je ne savais pas qu'on pouvait mettre un autre paramètre à cette fonction (faut plus que je fasse confiance au site du zéro 38 )

Et tu as raison pour les elseif, j'ai arrangé ça aussi !

merci !

EDIT : J'ai une 2ème question :
Ce script n'affiche que quelques cases autour de l'endroit où est le joueur
Je voudrais que si le joueur, le souhaite, il puisse visionner la carte complète.
J'aimerais faire ça avec un effet slimbox mais là c'est différent de d'habitude.
D'habitude j'appelle la fonction slimbox ainsi
<a href = "images/bidule.PNG" rel="lightbox[images]" title="La cité d'Ezora"><img src="images/bidule.PNG" border="0" /></a>

Sauf que la c'est 400 images que je veux afficher en même temps !

Donc comment faire ?
Hello,

Stocke une seule image qui contient tes 400 cases... Affiche lui la carte complete..
A mois qu'il doive y avoir une gestion intelligente pour qu'il ne puisse pas voir certaines zones...

@+
Cadou
(06-15-2009 08:29 AM)Gabriel a écrit : [ -> ]J'ai rajouté mis un $info_carte = mysql_fetch_array($info_carte_tab, MYSQL_ASSOC)

Sinon, il y a directement la fonction mysql_fetch_assoc
Cadoudal : Les cases qui n'ont jamais été visitée ne sont pas visibles !
Sinon j'aurais fait comme tu as dit mais là c'est pas possible !

MdE : ok, je vais simplifier ça comme cela !
Je rajoute 2 autres questions :

1- Sur une de mes pages, les "é" ne sont pas affiché et remplacé par "é"
Ainsi "création" devient "Création "
J'ai essayé avec plusieurs navigateurs et ça fait pareil !

2 - J'ai fait un système d'avatar pour le joueur. L'avatar est composé de 5 images supperposées : la base (contour du visage) / les yeux / la bouche / les cheveux / accessoires éventuels

Je les superpose comme ceci : "position:absolute; top:300px; left:800px; z-index:1;" (le Z-index diffère pour chaque image)
Quand je sais où va être l'avatar, pas de problème. Par contre si j'ai la liste des joueurs présents à un endroit avec leur avatar à coté de leur pseudo. Je ne peux pas prévoir à l'avance combien seront présents et donc définir "top" et "left"

Il n'y a pas un autre moyen de procéder ?
Salut,

1. C'est un problème d'encodage, as-tu précisez l'encodage de tes caractères dans un header? (iso-je sais plus combien ou utf8)?
Sinon tu peux toujours utiliser : &aecute; a la place du "é" dans ton code...

2. personnellement j'utilise ce procède de superposition pour créer l'apparence des personnages sur le plateau de mon jeu.
Je met tout dans une case d'un tableau et je joue avec le css (avec les margin) de plusieurs div (un div par élément, plus un global en absolute [si je me souviens bien])
Essai donc d’englober tout tes div dans un seul pour voir…
1. ha les joie des charset 1; vérifie l'encodage de tes fichiers et celui que tu envoie en en-tête (là c'est le cas classique du caractère utf8 affiché en iso).
Sinon arogate à raison utilise les entité html; tu peux passer tes textes avec htmlspecialchars() ou htmlentities() afin de t'éviter ce genre de soucis.

2. comme dit arogate, mais me semble que le global doit être en relativ 34
Pages : 1 2 3
URLs de référence