Labyrinthe

Fermé
adventuretime Messages postés 7 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 16 octobre 2015 - 13 févr. 2015 à 22:42
adventuretime Messages postés 7 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 16 octobre 2015 - 16 févr. 2015 à 00:22
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 ?

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
13 févr. 2015 à 22:50
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,
0
adventuretime Messages postés 7 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 16 octobre 2015 2
13 févr. 2015 à 23:51
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 ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
14 févr. 2015 à 00:04
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,
0
adventuretime Messages postés 7 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 16 octobre 2015 2 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
15 févr. 2015 à 09:27
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 ;
                     
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
15 févr. 2015 à 16:52
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 ?
0
adventuretime Messages postés 7 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 16 octobre 2015 2 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
15 févr. 2015 à 17:57
si mais je préfère les faire apres sa .
parceque mon labyrinthe est fais comme sa
et le if ((posx==1)&&(posy==6))
sert a : quand le carre arrive a (1.6) le joueur auras gagner
et non c'est pas l'inverse :(
0