Labyrinthe
adventuretime
Messages postés
7
Statut
Membre
-
adventuretime Messages postés 7 Statut Membre -
adventuretime Messages postés 7 Statut Membre -
Bonjour j'ai fais un labyrinthe dans une matrice en 1 et 0 le représente un mur (etoiles)
et 0 vide
je voudrais que quand mon carré rencontre un mur il s'arrête comment faire ? une idée ?
et 0 vide
je voudrais que quand mon carré rencontre un mur il s'arrête comment faire ? une idée ?
1 réponse
-
Déjà, faudrait voir comment tu as géré le déplacement ?
Mais algorithmiquement parlant c'est assez simple.
Si flèche droite et case à droite = 1 alors se déplacer à droite
Si flèche gauche et case à gauche = 1 alors se déplacer à gauche
etc.
Ainsi tu te déplaceras pas si la case visée est un mur.
Cdlt,-
switch (c) { case (72 ) : //up { GotoXY(posx,posy=posy-1); Color(4,4); printf("%c",0xcb); } break ; case( 80 ): //down GotoXY(posx,posy=posy+1); Color(4, 4); printf("%c",0xcb); break ; case (75 ) : //left GotoXY(posx=posx-1,posy); Color(4, 4); printf("%c",0xcb); break ; case ( 77 ): //right GotoXY(posx=posx+1,posy); Color(4,4); printf("%c",0xcb); break ; } if ((posx==1)&&(posy==6)) break ; }
je dois surement ajouter une condition avant le déplacement mais laquelle ? -
Conseils en vrac :
case 77 ? Ca serait plus clair de mettre case RIGHT: en mettant un #define RIGHT 77. Qu'en penses-tu ?
La remarque s'applique également aux autres cases.
GotoXY(posx=posx+1,posy);
Faudrait vérifier que tu n'es pas tout à droite avant... Sinon tu sors du tableau.
La remarque s'applique également aux autres cases.
je dois surement ajouter une condition avant le déplacement mais laquelle ?
Tout à fait. C'est celle que je t'ai indiquée dans mon 1er post.
Si flèche droite : case RIGHT:
Si je peux me déplacer à droite : if (posx+1<COLONNE_MAX && tableau[posx+1] != MUR)
Alors je me déplace à droite : GotoXY(...)
Idem pour les autres directions.
Dans les autres cas, tu ne fais rien. Ainsi pas de déplacement.
Attention à l'indentation irrégulière.
Cdlt, -
merci beaucoup pour votre réponse j'ai fais sa et pour les limites ( c est a dire ne pas sortir de la matrice sa marche ) mais mon carré avance toujours sur les étoiles et des fois ils s'arrête même quand y pas d'étoile tt cours
switch (c) { case (72 ) : //up if ((posy-1 >5 )&& (mat[posy-1][posx]!=1)) { GotoXY(posx,posy=posy-1); Color(4,4); printf("%c",0xcb); } break ; case( 80 ): //down if ((posy+1 < 21)&& (mat[posy+1][posx]!=1)) { GotoXY(posx,posy=posy+1); Color(4, 4); printf("%c",0xcb); } break ; case (75 ) : //left if ((posx-1 > 0 )&& (mat[posy][posx-1]!=1)) { GotoXY(posx=posx-1,posy); Color(4, 4); printf("%c",0xcb); } break ; case ( 77 ): //right if ((posx+1 < 61 )&& (mat[posy][posx+1]!=1)) { GotoXY(posx=posx+1,posy); Color(4,4); printf("%c",0xcb); } break ; } if ((posx==1)&&(posy==6)) break ; -
Je vois que tu n'as pas respecté mes conseils... Dommage.
Quelle taille fait ton tableau ?
if ((posy-1 >5 )&& (mat[posy-1][posx]!=1))
Pourquoi > 5 ? Et pas >= 0 ?
if ((posx==1)&&(posy==6))
A quoi ça sert ?
mat[posy][posx]...
GotoXY(posx,posy=posy-1);
N'y aurait-il pas d'inversion entre les X et les Y ? -
-