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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
  _____
  _____
  _____
  _____
 
  | T |
     |
    |
   | T|