Afficher un plateau avec Ncurses.
Bonsoir,
je voudrais comprendre pourquoi j'obtiens un résultat différent entre un affichage en mode console et un affichage avec ncurses.
Par exemple, pour afficher mon plateau en mode console, j'avais réalisé cette fonction.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| void afficheLigne()
{
printf("\n____________________\n");
}
void affichagePlateau(Plateau* P)
{
int cpt=0;
int k;
afficheLigne();
for(k=0;k<NB_CASE;k++)
{
printf("| %c ",P->cases[k].value);
cpt++;
if(cpt==TAILLE_PLATEAU_LARGEUR)
{
printf("|");
cpt=0;
afficheLigne();
}
}
} |
Résultat à l'affichage:
Code:
1 2 3 4 5 6 7 8 9 10 11
| ____________________
| T | . | . | . | T |
____________________
| . | . | . | . | . |
____________________
| . | . | . | . | . |
____________________
| . | . | . | . | . |
____________________
| T | . | . | . | T |
____________________ |
DU coup, je me suis dis, pour afficher avec ncurses, me suffit de reprendre l'algo en affichant avec les fonctions de ncurses.
J'ai donc fait ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| void afficheLigneCurses(WINDOW* win)
{
wprintw(win,"\n____________________\n");
}
void affichagePlateauCurses(Plateau* P)
{
WINDOW * ma_fenetre;
ma_fenetre=newwin(10,5,2,2);
int cpt=0;
int k;
afficheLigneCurses(ma_fenetre);
for(k=0;k<NB_CASE;k++)
{
wprintw(ma_fenetre,"| %c ",P->cases[k].value);
cpt++;
if(cpt==TAILLE_PLATEAU_LARGEUR)
{
wprintw(ma_fenetre,"|");
cpt=0;
afficheLigneCurses(ma_fenetre);
}
}
wrefresh(ma_fenetre);
getch();
delwin(ma_fenetre);
} |
L'initialisation et fermeture de curses
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void init_curses()
{
initscr();
start_color();
init_pair(1,COLOR_WHITE,COLOR_BLUE);
init_pair(2,COLOR_BLUE,COLOR_WHITE);
init_pair(3,COLOR_RED,COLOR_WHITE);
curs_set(0);
//noecho();
keypad(stdscr,TRUE);
}
void close_curses()
{
endwin();
} |
Et là, le résultat que j'obtiens avec Ncurses est complètement déformé et incohérent.
Je découvre un peu la librairie, mais je ne crois pas avoir fait de grosses bourdes pouvant provoquer cela...
Code:
1 2 3 4 5 6 7 8 9
| _____
_____
_____
_____
| T |
|
|
| T| |