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
00052 fenetre = newwin(26,38,y,x);
00053
00054
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
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
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
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
00087 wattroff(fenetre,COLOR_PAIR(3));
00088
00089
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
00118 initscr();
00119
00120
00121 if(can_change_color()){
00122 mvprintw(2,(COLS-15)/2,"Votre console ne supporte pas la couleur");
00123 }else{
00124
00125 start_color();
00126
00127 init_pair(1,COLOR_BLUE,COLOR_BLACK);
00128
00129 init_pair(2,COLOR_BLACK,COLOR_BLUE);
00130
00131 init_pair(3,COLOR_WHITE,COLOR_BLUE);
00132
00133
00134 init_pair(4,COLOR_WHITE,COLOR_BLACK);
00135
00136 init_pair(5,COLOR_WHITE,COLOR_YELLOW);
00137
00138 init_pair(6,COLOR_WHITE,COLOR_RED);
00139 }
00140
00141
00142 WINDOW *fenetre_generale;
00143
00144
00145 fenetre_generale = newwin(0,0,0,0);
00146
00147
00148 box(fenetre_generale,0,0);
00149
00150
00151 wbkgd(fenetre_generale,COLOR_PAIR(1));
00152
00153
00154 mvwprintw(fenetre_generale,0,3,"| SeaBattle |");
00155
00156
00157 wrefresh(fenetre_generale);
00158
00159
00160 refresh();
00161
00162
00163 bateau = newwin(19,28,2,COLS/2-28/2);
00164
00165
00166 box(bateau,0,0);
00167
00168
00169 wbkgd(bateau,COLOR_PAIR(0));
00170
00171
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
00190 wrefresh(bateau);
00191 refresh();
00192
00193
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
00206 int i;
00207
00208
00209 WINDOW *fenetre_chat;
00210
00211
00212 for(i=0;i<10;i++) strcpy(tab_message[i],"");
00213
00214
00215 fenetre_chat = newwin(11,COLS-3,34,1);
00216
00217
00218 box(fenetre_chat,0,0);
00219
00220
00221 wbkgd(fenetre_chat,COLOR_PAIR(0));
00222
00223
00224 mvwprintw(fenetre_chat,0,3,"| Dialogue |");
00225
00226
00227 wrefresh(fenetre_chat);
00228
00229
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
00243 int i;
00244
00245
00246 wclear(fenetre_chat);
00247
00248
00249 box(fenetre_chat,0,0);
00250
00251
00252 mvwprintw(fenetre_chat,0,3,"| Dialogue |");
00253
00254
00255 for(i=0;i<9;i++) {
00256 mvwprintw(fenetre_chat,i+1,1,tab_message[i]);
00257 }
00258
00259
00260 move(LINES-4,2);
00261
00262
00263 wrefresh(fenetre_chat);
00264 }
00265
00267
00270 void afficher_erreur(char* msg){
00271
00272 erreur = newwin(6,COLS-2,28,1);
00273
00274
00275 box(erreur,0,0);
00276
00277
00278 wbkgd(erreur,COLOR_PAIR(0));
00279
00280
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
00303 int i,ligne_vide;
00304
00305
00306 for(i=2;i<5;i++){
00307 move(LINES-i,1);
00308 clrtoeol();
00309 }
00310
00311
00312 move(LINES-4,2);
00313
00314
00315 for(i=9;(strcmp(tab_message[i],"")==0) && (i>=0);i--){mvprintw(i+2, 5, "%d",i);refresh();}
00316
00317
00318 if(i==9){
00319
00320 for(i=0;i<9;i++) strcpy(tab_message[i],tab_message[i+1]);
00321
00322 ligne_vide = 8;
00323 }else{
00324
00325 ligne_vide = i+1;
00326 }
00327
00328
00329
00330 strcpy(tab_message[ligne_vide],message);
00331
00332
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
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
00443 wmove(bateau,8,2);
00444 wclrtobot(bateau);
00445
00446
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 }