Page principale | Liste des fichiers | Portée globale

affichage.c

Aller à la documentation de ce fichier.
00001 
00010 #include <ncurses.h>
00011 #include <string.h>
00012 
00017 WINDOW* grille_adverse[10][10];
00018 
00023 WINDOW* grille_locale[10][10];
00024 
00029 WINDOW* bateau;
00030 
00035 WINDOW* erreur;
00036 
00038 
00046 int init_grille(WINDOW* fenetre, WINDOW* grille_jeu[10][10], int x, int y, int choix){
00047 
00048         int colonne,ligne;
00049         int i,j;
00050 
00051         // Creer la fenetre (hauteur:26; largeur:38; y:7; x:1)
00052         fenetre = newwin(26,38,y,x);
00053 
00054         // titre et contour de la fenetre en couleur N°0 (Blanc et Noir)
00055         wbkgd(fenetre,COLOR_PAIR(0));
00056         box(fenetre,0,0);
00057         if(choix==1){
00058                 mvwprintw(fenetre,0,3,"| Flotte locale |");
00059         }else if(choix==2){
00060                 mvwprintw(fenetre,0,3,"| Flotte Adverse |");
00061         }else{
00062                 return -1;
00063         }
00064 
00065         // Contenu de la fenetre en couleur N°3 (Blanc et bleu)
00066         wattron(fenetre,COLOR_PAIR(3));
00067         mvwprintw(fenetre,2,2,"   A  B  C  D  E  F  G  H  I  J ");
00068         mvwhline(fenetre,3,2,ACS_HLINE,32);
00069 
00070         // Ajouter les lignes horizontales
00071         for(ligne=4;ligne<24;ligne+=2){
00072                 if(ligne/2-1 != 10){
00073                         mvwprintw(fenetre,ligne,2," %d",ligne/2-2);
00074                 }else{
00075                         mvwprintw(fenetre,ligne,2," %d",ligne/2-2);
00076                 }
00077                 mvwhline(fenetre,ligne+1,2,ACS_HLINE,32);
00078         }
00079 
00080         // Ajouter les lignes verticales
00081         mvwvline(fenetre,2,4,ACS_VLINE,22);
00082         for(colonne=7;colonne<36;colonne+=3){
00083                 mvwvline(fenetre,2,colonne,ACS_VLINE,22);
00084         }
00085 
00086         // Fin de la couleur N°3
00087         wattroff(fenetre,COLOR_PAIR(3));
00088 
00089         // Actualiser la fenetre
00090         wrefresh(fenetre);
00091         
00092         ligne = y+4;
00093 
00094         for(i=0;i<10;i++){
00095                 colonne = x+5;
00096                 for(j=0;j<10;j++){
00097                         grille_jeu[i][j] = newwin(1,2,ligne,colonne);
00098                         wbkgd(grille_jeu[i][j],COLOR_PAIR(2));
00099                         mvwprintw(grille_jeu[i][j],1,1," ");
00100         
00101                         wrefresh(grille_jeu[i][j]);
00102                         colonne+=3;
00103                 }
00104                 ligne+=2;
00105         }
00106 
00107         return 1;
00108 }
00109 
00110 
00112 void init_screen(){
00113 
00114         WINDOW* flotte_adverse;
00115         WINDOW* flotte_locale;
00116         
00117         // Initialiser l'écran
00118         initscr();
00119         
00120         // Définir les couleurs
00121         if(can_change_color()){
00122                 mvprintw(2,(COLS-15)/2,"Votre console ne supporte pas la couleur");
00123         }else{
00124                 // Démarrer le mode couleur
00125                 start_color();
00126                 // Texte général en bleu sur fond noir
00127                 init_pair(1,COLOR_BLUE,COLOR_BLACK);
00128                 // Grille de jeu
00129                 init_pair(2,COLOR_BLACK,COLOR_BLUE);
00130                 // Grille de jeu 2
00131                 init_pair(3,COLOR_WHITE,COLOR_BLUE);
00132                 // Bateau
00133                 //init_color(COLOR_GREY,165,152,152);
00134                 init_pair(4,COLOR_WHITE,COLOR_BLACK);
00135                 // Bateau touche
00136                 init_pair(5,COLOR_WHITE,COLOR_YELLOW);
00137                 // Bateau coule
00138                 init_pair(6,COLOR_WHITE,COLOR_RED);
00139         }
00140                 
00141         // Pointeur vers la structure constituant la fenêtre
00142         WINDOW *fenetre_generale;
00143         
00144         // Creer la fenetre d'affichage des messages
00145         fenetre_generale = newwin(0,0,0,0);
00146 
00147         // Definir les bordues de la fenetre
00148         box(fenetre_generale,0,0);
00149         
00150         // Definir le fond de la fenetre
00151         wbkgd(fenetre_generale,COLOR_PAIR(1));
00152 
00153         // Titre de la fenetre
00154         mvwprintw(fenetre_generale,0,3,"| SeaBattle |");
00155 
00156         // Rafraichir l'ecran
00157         wrefresh(fenetre_generale);
00158         
00159         // Affiche flotte et grille locale
00160         refresh();
00161 
00162         // Fenetre pour la liste des bateaux à placer
00163         bateau = newwin(19,28,2,COLS/2-28/2);
00164 
00165         // Definir les bordues de la fenetre
00166         box(bateau,0,0);
00167         
00168         // Definir le fond de la fenetre
00169         wbkgd(bateau,COLOR_PAIR(0));
00170 
00171         // Titre de la fenetre
00172         mvwprintw(bateau,0,5,"| SeaBattle 1.0 |");
00173         mvwprintw(bateau,2,5,"Didier BERNAUDEAU");
00174         mvwprintw(bateau,3,6,"Julien VEHENT");
00175         mvwprintw(bateau,4,1,"2006 - aucun droit réservé");
00176 
00177         mvwhline(bateau,6,2,ACS_HLINE,22);
00178 
00179         mvwprintw(bateau,8,2,"Bateaux disponibles:");
00180         mvwprintw(bateau,9,3,"1 - Porte-avion");
00181         mvwprintw(bateau,10,3,"2 - Croiseur n°1");
00182         mvwprintw(bateau,11,3,"3 - Croiseur n°2");
00183         mvwprintw(bateau,12,3,"4 - Croiseur n°3");
00184         mvwprintw(bateau,13,3,"5 - Corvette n°1");
00185         mvwprintw(bateau,14,3,"6 - Corvette n°2");
00186         mvwprintw(bateau,16,6,"Tapez /help pour");
00187         mvwprintw(bateau,17,5,"obtenir de l'aide");
00188         
00189         // Rafraichir l'ecran
00190         wrefresh(bateau);
00191         refresh();
00192         
00193         // Grille
00194         init_grille(flotte_locale,grille_locale,COLS/4-38/2,2,1);
00195         init_grille(flotte_adverse,grille_adverse,COLS/4*3-38/2,2,2);
00196 }
00197 
00199 
00203 WINDOW* init_chat(char tab_message[9][200]){
00204 
00205         // Compteur de ligne
00206         int i;
00207         
00208         // Pointeur vers la structure constituant la fenêtre
00209         WINDOW *fenetre_chat;
00210         
00211         // Initialiser le tableau des messages
00212         for(i=0;i<10;i++) strcpy(tab_message[i],"");
00213 
00214         // Creer la fenetre d'affichage des messages
00215         fenetre_chat = newwin(11,COLS-3,34,1);
00216 
00217         // Definir les bordues de la fenetre
00218         box(fenetre_chat,0,0);
00219         
00220         // Definir le fond de la fenetre
00221         wbkgd(fenetre_chat,COLOR_PAIR(0));
00222 
00223         // Titre de la fenetre
00224         mvwprintw(fenetre_chat,0,3,"| Dialogue |");
00225                 
00226         // Rafraichir l'ecran
00227         wrefresh(fenetre_chat);
00228 
00229         // Positionner le curseur à l'emplacement de saisie sur l'écran principal
00230         move(36,3);
00231 
00232         return fenetre_chat;
00233 }
00234 
00236 
00240 void afficher_chat(char tab_message[9][200], WINDOW* fenetre_chat){
00241 
00242         // Compteur de ligne du tableau
00243         int i;
00244 
00245         // Effacer les caracteres eventuellement afficher sur cette meme ligne
00246         wclear(fenetre_chat);
00247         
00248         // Refaire les bordues de la fenetre
00249         box(fenetre_chat,0,0);
00250 
00251         // Titre de la fenetre
00252         mvwprintw(fenetre_chat,0,3,"| Dialogue |");
00253         
00254         // Affichage des message
00255         for(i=0;i<9;i++) {
00256                 mvwprintw(fenetre_chat,i+1,1,tab_message[i]);
00257         }
00258 
00259         // placer le curseur pour la saisie
00260         move(LINES-4,2);
00261         
00262         // Rafraichir la fenetre
00263         wrefresh(fenetre_chat);
00264 }
00265 
00267 
00270 void afficher_erreur(char* msg){
00271 
00272         erreur = newwin(6,COLS-2,28,1);
00273 
00274         // Definir les bordues de la fenetre
00275         box(erreur,0,0);
00276         
00277         // Definir le fond de la fenetre
00278         wbkgd(erreur,COLOR_PAIR(0));
00279 
00280         // Titre de la fenetre
00281         mvwprintw(erreur,0,3,"| Message du jeu |");
00282         
00283         mvwprintw(erreur,2,(COLS-strlen(msg)-2)/2,"%s",msg);
00284 
00285         wrefresh(erreur);
00286 }
00287 
00289 void effacer_erreur(){
00290         wclear(erreur);
00291         wrefresh(erreur);
00292 }
00293 
00295 
00300 void saisie(char tab_message[9][200], WINDOW* fenetre_chat, char *message){
00301 
00302         // compteur et indicateur de la derni?e ligne vide
00303         int i,ligne_vide;
00304 
00305         // Effacer les caracteres eventuellement afficher sur cette meme ligne
00306         for(i=2;i<5;i++){
00307                 move(LINES-i,1);
00308                 clrtoeol();
00309         }
00310 
00311         // Possitionner le curseur pour la saisie du message
00312         move(LINES-4,2);
00313         
00314         // Recherche la derniere ligne pleine du tableau (en partant de la fin)
00315         for(i=9;(strcmp(tab_message[i],"")==0) && (i>=0);i--){mvprintw(i+2, 5, "%d",i);refresh();}
00316 
00317         // Si le tableau est plein
00318         if(i==9){
00319                 // remonter les lignes du tableau
00320                 for(i=0;i<9;i++) strcpy(tab_message[i],tab_message[i+1]);
00321                 // la ligne vide et la derniere ligne du tableau
00322                 ligne_vide = 8;
00323         }else{
00324                 // Si le tableau n'est pas plein, la ligne vide suit la derniere ligne pleine
00325                 ligne_vide = i+1;
00326         }
00327 
00328         // Saisir le message dans le tableau
00329         // getstr(tab_message[ligne_vide]);
00330         strcpy(tab_message[ligne_vide],message);
00331 
00332         // Afficher le tableau
00333         afficher_chat(tab_message,fenetre_chat);
00334 }
00335 
00337 
00341 void afficher_matrice(int choix, int matrice[10][10]){
00342 
00343         int i,j,matrice_temp;
00344 
00345         if(choix==1){
00347                 for(i=0;i<10;i++){
00348                         for(j=0;j<10;j++){
00349                                 matrice_temp = matrice[i][j];
00350                                 switch(matrice_temp){
00351 
00353                                         case 0 : wbkgd(grille_locale[i][j],COLOR_PAIR(2));break;
00354                         
00356                                         case 1 : wbkgd(grille_locale[i][j],COLOR_PAIR(3));
00357                                                  mvwprintw(grille_locale[i][j],0,0,"X");
00358                                                  break;
00359 
00361                                         case 4 : case 5 : case 6: case 7: case 8: case 9: 
00362                                                  wbkgd(grille_locale[i][j],COLOR_PAIR(4));
00363                                                  break;
00364 
00366                                         case -14: case -15 : case -16 : case -17 : case -18 : case -19 : 
00367                                                         wbkgd(grille_locale[i][j],COLOR_PAIR(6));
00368                                                         break;
00369 
00371                                         case -4 : case -5 : case -6 : case -7 : case -8: case -9 : 
00372                                                         wbkgd(grille_locale[i][j],COLOR_PAIR(5));
00373                                                         break;
00374                                                         
00375                                         default : afficher_erreur("erreur de refresh de la matrice locale");break;
00376 
00377                                 }
00378                                 wrefresh(grille_locale[i][j]);refresh();
00379                         }
00380                 }
00381         }else{
00383                 if (choix ==2){
00384                         for(i=0;i<10;i++){
00385                                 for(j=0;j<10;j++){
00386                                         matrice_temp = matrice[i][j];
00387                                         switch(matrice_temp){
00388         
00390                                                 case 0 : wbkgd(grille_adverse[i][j],COLOR_PAIR(2));break;
00391                                 
00393                                                 case 1 : wbkgd(grille_adverse[i][j],COLOR_PAIR(3));
00394                                                         mvwprintw(grille_adverse[i][j],0,0,"X");
00395                                                         break;
00396         
00398                                                 case -14: case -15 : case -16 : case -17 : case -18 : case -19 : 
00399                                                         wbkgd(grille_adverse[i][j],COLOR_PAIR(6));
00400                                                         break;
00401         
00403                                                 case -4: case -5 : case -6 : case -7 : case -8 : case -9  : 
00404                                                         wbkgd(grille_adverse[i][j],COLOR_PAIR(5));
00405                                                         break;
00406                                         default : afficher_erreur("erreur de refresh de la matrice adverse");break;
00407                                         }
00408                                         wrefresh(grille_adverse[i][j]);refresh();
00409                                 }
00410                         }
00411                 }
00412         }
00413 }
00414 
00416 void effacer_bateau(int id_bateau){
00417 
00418         switch(id_bateau){
00419 
00420                 case 1 :wmove(bateau,9,3);break;
00421                 case 2 :wmove(bateau,10,3);break;
00422                 case 3 :wmove(bateau,11,3);break;
00423                 case 4 :wmove(bateau,12,3);break;
00424                 case 5 :wmove(bateau,13,3);break;
00425                 case 6 :wmove(bateau,14,3);break;               
00426         }
00427 
00428         wclrtoeol(bateau);
00429 
00430         // Definir les bordures de la fenetre
00431         box(bateau,0,0);
00432         mvwprintw(bateau,0,5,"| SeaBattle 1.0 |");
00433         wrefresh(bateau);
00434 }
00435 
00437 
00440 void afficher_etat(int code){
00441 
00442         // Effacer le texte
00443         wmove(bateau,8,2);
00444         wclrtobot(bateau);
00445 
00446         // Cadre et titre de la fenetre
00447         box(bateau,0,0);
00448         mvwprintw(bateau,0,5,"| SeaBattle 1.0 |");
00449 
00450         switch(code){
00451                 case 0 :
00452                         mvwprintw(bateau,9,6,"C'est à votre");
00453                         mvwprintw(bateau,10,4,"adversaire de jouer");
00454                         break;
00455                 case 1 :
00456                         mvwprintw(bateau,9,6,"C'est à votre");
00457                         mvwprintw(bateau,10,6,"tour de jouer");
00458                         mvwprintw(bateau,15,7,"Pour tirer :");
00459                         mvwprintw(bateau,16,2,"/shoot colonne ligne");
00460                         mvwprintw(bateau,17,2,"ex: /shoot B 5");
00461                         
00462                         break;
00463                 case 10 : case -10 :
00464                         mvwprintw(bateau,9,7,"La partie");
00465                         mvwprintw(bateau,10,7,"terminée");
00466                         break;
00467         }
00468         move(LINES-4,2);
00469         wrefresh(bateau);
00470 }

Généré le Sun Apr 30 17:46:01 2006 pour SeaBattle par  doxygen 1.4.4