Labyrinthe

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 ?

1 réponse

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    1. adventuretime Messages postés 7 Statut Membre 2
       
      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
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    3. adventuretime Messages postés 7 Statut Membre 2 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    5. adventuretime Messages postés 7 Statut Membre 2 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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