Tom's Guide > Forum > Programmation > labyrinthe avec ncurses en langage C

labyrinthe avec ncurses en langage C

Forum Programmation : labyrinthe avec ncurses en langage C

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour
alors j'ai comme devoir de coder en langage c, en utilisant ncurses, un labyrinthe dans lequel se deplace un curseur, ce labyrinthe ayan des portes et des cles, une porte ne pouvant s'ouvrir et laisser passer le curseur que si ce dernier a deja la clé de cette porte.
Alors j'ai réussi à avoir le code suivant, qui permet au curseur de se deplacer dans le labyrinthe.
J'aimerais savoir si vous pouviez m'aider.
Merci d'avance

 


Code :
  1. #include <ncurses.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. void ncurses();
  5. void mat();
  6. void deplacer();
  7. void ncurses(){
  8.     initscr();
  9.     noecho();
  10.     start_color();
  11.     init_pair(1, COLOR_RED, COLOR_RED);
  12.     init_pair(2, COLOR_RED, COLOR_BLUE);
  13.     init_pair(3, COLOR_RED, COLOR_WHITE);
  14.     init_pair(4, COLOR_RED, COLOR_GREEN);
  15. }
  16. void mat(){
  17.     int largeur=30,hauteur=30;
  18.     char lab[largeur][hauteur];
  19.     int nb_ligne,nb_col;
  20.         for(nb_ligne=0;nb_ligne<=hauteur;nb_ligne++)
  21.     {
  22.         for(nb_col=0;nb_col<=largeur;nb_col++)
  23.         {
  24.             lab[nb_ligne][nb_col]='0';
  25.         }
  26.     }
  27. }
  28. void deplacer(int nb_ligne, int nb_col){
  29.         move(nb_ligne,nb_col);
  30.         wattrset (stdscr, COLOR_PAIR(2));
  31.         addch('>');
  32.     }
  33. int main (int argc, char **argv)
  34. {
  35.     int largeur=30,hauteur=30;
  36.     char lab[largeur][hauteur];
  37.     int nb_ligne,nb_col;
  38.     FILE *fichier;
  39.     char chaine;
  40.     int key=0;
  41.     fichier=fopen("test.txt","r" );
  42.     /****************init lab******************/
  43.     mat();
  44.     /****************initlab******************/
  45.     /***********ncureses*************/
  46.     ncurses();
  47.     /************ncursess*******/
  48.     while (!feof(fichier)) 
  49.     {
  50.         for(nb_ligne=0;nb_ligne<=hauteur;nb_ligne++)
  51.         {
  52.             for(nb_col=1;nb_col<=largeur;nb_col++)
  53.             {
  54.                 fscanf(fichier,"%c",&lab[nb_ligne][nb_col]);
  55.                 if(lab[nb_ligne][nb_col]=='0')
  56.                 {
  57.                     attron(COLOR_PAIR(1));
  58.                     mvprintw(nb_ligne,nb_col," " );
  59.                     attroff(COLOR_PAIR(1));
  60.                 }
  61.                 else if(lab[nb_ligne][nb_col]=='1')
  62.                 {
  63.                     attron(COLOR_PAIR(3));
  64.                     mvprintw(nb_ligne,nb_col," " );
  65.                     attroff(COLOR_PAIR(3));
  66.                 }
  67.                 else if(lab[nb_ligne][nb_col]=='M')
  68.                 {
  69.                     attron(COLOR_PAIR(2));
  70.                     mvprintw(nb_ligne,nb_col," " );
  71.                     attroff(COLOR_PAIR(2));
  72.                 }
  73.                 else if(lab[nb_ligne][nb_col]=='K')
  74.                 {
  75.                     attron(COLOR_PAIR(4));
  76.                     mvprintw(nb_ligne,nb_col,"&" );
  77.                     attroff(COLOR_PAIR(4));
  78.                 }
  79.                 refresh();
  80.             }
  81.             fscanf(fichier,"%c",&chaine);
  82.         }
  83.     }
  84.     keypad(stdscr,TRUE);
  85.     curs_set(0);
  86.     nb_ligne= 1 ;
  87.     nb_col= 5 ;
  88.     move(nb_ligne,nb_col); 
  89.     while (key != KEY_F(12))
  90.     {
  91.         wattrset (stdscr, COLOR_PAIR(3));
  92.         switch (key)
  93.         {
  94.               case KEY_RIGHT:
  95.                   if (largeur-1 > nb_col)
  96.                   {
  97.                  
  98.                         if (lab[nb_ligne][nb_col+1] != '0' && lab[nb_ligne+1][nb_col] != 'V')
  99.                         {
  100.                             addch (' ');
  101.                             nb_col++;
  102.                           deplacer(nb_ligne,nb_col);
  103.                         }
  104.                   }
  105.               break;
  106.                  
  107.             case KEY_LEFT:
  108.                   if (0 < nb_col)
  109.                   {
  110.                         if (lab[nb_ligne][nb_col-1] != '0' && lab[nb_ligne+1][nb_col] != 'V')
  111.                         {
  112.                             addch (' ');
  113.                             nb_col--;
  114.                           deplacer(nb_ligne,nb_col);                     
  115.                         }
  116.                   }
  117.               break;
  118.                  
  119.               case KEY_DOWN:
  120.                   if (hauteur-1 > nb_ligne)
  121.                   {
  122.                         if (lab[nb_ligne+1][nb_col] != '0' && lab[nb_ligne+1][nb_col] != 'V')
  123.                         {
  124.                             addch (' ');
  125.                             nb_ligne++;
  126.                           /******deplacer*********/
  127.                             deplacer(nb_ligne,nb_col);
  128.                             /*********deplacer***********/
  129.                         }
  130.                   }
  131.               break;
  132.               case KEY_UP:
  133.                   if (0< nb_ligne)
  134.                   {
  135.                         if (lab[nb_ligne-1][nb_col] != '0' && lab[nb_ligne+1][nb_col] != 'm')
  136.                         {
  137.                             addch (' ');
  138.                             nb_ligne--;
  139.                           deplacer(nb_ligne,nb_col);
  140.                         }
  141.                   }
  142.             break;
  143.         }
  144.         key=getch();
  145.         move(nb_ligne,nb_col);
  146.         refresh();
  147.     }
  148.     echo();
  149.     endwin();
  150.     exit(0);
  151.     return 0;
  152. }

Message cité 1 fois
Message édité par SiM07 le 02-05-2008 à 15:09:01
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

nadou6682 a écrit :

J'aimerais savoir si vous pouviez m'aider.


Bonjour.

oui on peut t'aider.
il faut juste que tu exposes ton problème.

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

merci bcp
en fait je ne sais pas comment ajouter la gestion des portes et des cles
merci encore

Répondre à nadou6682

Merci d'utiliser le bbcode code lorsque tu colles du code.

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

nadou6682 a écrit :

merci bcp
en fait je ne sais pas comment ajouter la gestion des portes et des cles
merci encore


porte = mur qui n'est plus un mur si tu as la clé. Voilà, utilise des variables pour mémoriser l'état dans le quel tu trouves (avec ou sans clé)

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Tom's Guide > Forum > Programmation > labyrinthe avec ncurses en langage C
Aller à :

Il y a 1810 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens