00001 #include <ncurses.h>
00002 #include <string.h>
00003
00008
00009 WINDOW* grille_adverse[10][10];
00011 WINDOW* grille_locale[10][10];
00012
00014 WINDOW* bateau;
00015
00017 WINDOW* erreur;
00018
00020
00029 int init_grille(WINDOW* fenetre, WINDOW* grille_jeu[10][10], int x, int y, int choix){
00030
00031 int colonne,ligne;
00032 int i,j;
00033
00034
00035 fenetre = newwin(26,38,y,x);
00036
00037
00038 wbkgd(fenetre,COLOR_PAIR(0));
00039 box(fenetre,0,0);
00040 if(choix==1){
00041 mvwprintw(fenetre,0,3,"| Flotte locale |");
00042 }else if(choix==2){
00043 mvwprintw(fenetre,0,3,"| Flotte Adverse |");
00044 }else{
00045 return -1;
00046 }
00047
00048
00049 wattron(fenetre,COLOR_PAIR(3));
00050 mvwprintw(fenetre,2,2," A B C D E F G H I J ");
00051 mvwhline(fenetre,3,2,ACS_HLINE,32);
00052
00053
00054 for(ligne=4;ligne<24;ligne+=2){
00055 if(ligne/2-1 != 10){
00056 mvwprintw(fenetre,ligne,2," %d",ligne/2-2);
00057 }else{
00058 mvwprintw(fenetre,ligne,2," %d",ligne/2-2);
00059 }
00060 mvwhline(fenetre,ligne+1,2,ACS_HLINE,32);
00061 }
00062
00063
00064 mvwvline(fenetre,2,4,ACS_VLINE,22);
00065 for(colonne=7;colonne<36;colonne+=3){
00066 mvwvline(fenetre,2,colonne,ACS_VLINE,22);
00067 }
00068
00069
00070 wattroff(fenetre,COLOR_PAIR(3));
00071
00072
00073 wrefresh(fenetre);
00074
00075 ligne = y+4;
00076
00077 for(i=0;i<10;i++){
00078 colonne = x+5;
00079 for(j=0;j<10;j++){
00080 grille_jeu[i][j] = newwin(1,2,ligne,colonne);
00081 wbkgd(grille_jeu[i][j],COLOR_PAIR(2));
00082 mvwprintw(grille_jeu[i][j],1,1," ");
00083
00084 wrefresh(grille_jeu[i][j]);
00085 colonne+=3;
00086 }
00087 ligne+=2;
00088 }
00089
00090 return 1;
00091 }
00092
00093
00095
00098 void init_screen(){
00099
00100 WINDOW* flotte_adverse;
00101 WINDOW* flotte_locale;
00102
00103
00104 initscr();
00105
00106
00107 if(can_change_color()){
00108 mvprintw(2,(COLS-15)/2,"Votre console ne supporte pas la couleur");
00109 }else{
00110
00111 start_color();
00112
00113 init_pair(1,COLOR_BLUE,COLOR_BLACK);
00114
00115 init_pair(2,COLOR_BLACK,COLOR_BLUE);
00116
00117 init_pair(3,COLOR_WHITE,COLOR_BLUE);
00118
00119
00120 init_pair(4,COLOR_WHITE,COLOR_BLACK);
00121
00122 init_pair(5,COLOR_WHITE,COLOR_YELLOW);
00123
00124 init_pair(6,COLOR_WHITE,COLOR_RED);
00125 }
00126
00127
00128 WINDOW *fenetre_generale;
00129
00130
00131 fenetre_generale = newwin(0,0,0,0);
00132
00133
00134 box(fenetre_generale,0,0);
00135
00136
00137 wbkgd(fenetre_generale,COLOR_PAIR(1));
00138
00139
00140 mvwprintw(fenetre_generale,0,3,"| SeaBattle |");
00141
00142
00143 wrefresh(fenetre_generale);
00144
00145
00146 refresh();
00147
00148
00149 bateau = newwin(19,28,2,COLS/2-28/2);
00150
00151
00152 box(bateau,0,0);
00153
00154
00155 wbkgd(bateau,COLOR_PAIR(0));
00156
00157
00158 mvwprintw(bateau,0,5,"| SeaBattle 1.0 |");
00159 mvwprintw(bateau,2,5,"Didier BERNAUDEAU");
00160 mvwprintw(bateau,3,6,"Julien VEHENT");
00161 mvwprintw(bateau,4,1,"2006 - aucun droit réservé");
00162
00163 mvwhline(bateau,6,2,ACS_HLINE,22);
00164
00165 mvwprintw(bateau,8,2,"Bateaux disponibles:");
00166 mvwprintw(bateau,9,3,"1 - Porte-avion");
00167 mvwprintw(bateau,10,3,"2 - Croiseur n°1");
00168 mvwprintw(bateau,11,3,"3 - Croiseur n°2");
00169 mvwprintw(bateau,12,3,"4 - Croiseur n°3");
00170 mvwprintw(bateau,13,3,"5 - Corvette n°1");
00171 mvwprintw(bateau,14,3,"6 - Corvette n°2");
00172 mvwprintw(bateau,16,6,"Tapez /help pour");
00173 mvwprintw(bateau,17,5,"obtenir de l'aide");
00174
00175
00176 wrefresh(bateau);
00177 refresh();
00178
00179
00180 init_grille(flotte_locale,grille_locale,COLS/4-38/2,2,1);
00181 init_grille(flotte_adverse,grille_adverse,COLS/4*3-38/2,2,2);
00182 }
00183
00185
00190 WINDOW* init_chat(char tab_message[9][200]){
00191
00192
00193 int i;
00194
00195
00196 WINDOW *fenetre_chat;
00197
00198
00199 for(i=0;i<10;i++) strcpy(tab_message[i],"");
00200
00201
00202 fenetre_chat = newwin(11,COLS-3,34,1);
00203
00204
00205 box(fenetre_chat,0,0);
00206
00207
00208 wbkgd(fenetre_chat,COLOR_PAIR(0));
00209
00210
00211 mvwprintw(fenetre_chat,0,3,"| Dialogue |");
00212
00213
00214 wrefresh(fenetre_chat);
00215
00216
00217 move(36,3);
00218
00219 return fenetre_chat;
00220 }
00221
00223
00228 void afficher_chat(char tab_message[9][200], WINDOW* fenetre_chat){
00229
00230
00231 int i;
00232
00233
00234 wclear(fenetre_chat);
00235
00236
00237 box(fenetre_chat,0,0);
00238
00239
00240 mvwprintw(fenetre_chat,0,3,"| Dialogue |");
00241
00242
00243 for(i=0;i<9;i++) {
00244 mvwprintw(fenetre_chat,i+1,1,tab_message[i]);
00245 }
00246
00247
00248 move(LINES-4,2);
00249
00250
00251 wrefresh(fenetre_chat);
00252 }
00253
00255
00259 void afficher_erreur(char* msg){
00260
00261 erreur = newwin(6,COLS-2,28,1);
00262
00263
00264 box(erreur,0,0);
00265
00266
00267 wbkgd(erreur,COLOR_PAIR(0));
00268
00269
00270 mvwprintw(erreur,0,3,"| Message du jeu |");
00271
00272 mvwprintw(erreur,2,(COLS-strlen(msg)-2)/2,"%s",msg);
00273
00274 wrefresh(erreur);
00275 }
00276
00278
00281 void effacer_erreur(){
00282 wclear(erreur);
00283 wrefresh(erreur);
00284 }
00285
00287
00293 void saisie(char tab_message[9][200], WINDOW* fenetre_chat, char *message){
00294
00295
00296 int i,ligne_vide;
00297
00298
00299 for(i=2;i<5;i++){
00300 move(LINES-i,1);
00301 clrtoeol();
00302 }
00303
00304
00305 move(LINES-4,2);
00306
00307
00308 for(i=9;(strcmp(tab_message[i],"")==0) && (i>=0);i--){mvprintw(i+2, 5, "%d",i);refresh();}
00309
00310
00311 if(i==9){
00312
00313 for(i=0;i<9;i++) strcpy(tab_message[i],tab_message[i+1]);
00314
00315 ligne_vide = 8;
00316 }else{
00317
00318 ligne_vide = i+1;
00319 }
00320
00321
00322
00323 strcpy(tab_message[ligne_vide],message);
00324
00325
00326 afficher_chat(tab_message,fenetre_chat);
00327 }
00328
00330
00335 void afficher_matrice(int choix, int matrice[10][10]){
00336
00337 int i,j,matrice_temp;
00338
00339 if(choix==1){
00341 for(i=0;i<10;i++){
00342 for(j=0;j<10;j++){
00343 matrice_temp = matrice[i][j];
00344 switch(matrice_temp){
00345
00347 case 0 : wbkgd(grille_locale[i][j],COLOR_PAIR(2));break;
00348
00350 case 1 : wbkgd(grille_locale[i][j],COLOR_PAIR(3));
00351 mvwprintw(grille_locale[i][j],0,0,"X");
00352 break;
00353
00355 case 4 : case 5 : case 6: case 7: case 8: case 9:
00356 wbkgd(grille_locale[i][j],COLOR_PAIR(4));
00357 break;
00358
00360 case -14: case -15 : case -16 : case -17 : case -18 : case -19 :
00361 wbkgd(grille_locale[i][j],COLOR_PAIR(6));
00362 break;
00363
00365 case -4 : case -5 : case -6 : case -7 : case -8: case -9 :
00366 wbkgd(grille_locale[i][j],COLOR_PAIR(5));
00367 break;
00368
00369 default : afficher_erreur("erreur de refresh de la matrice locale");break;
00370
00371 }
00372 wrefresh(grille_locale[i][j]);refresh();
00373 }
00374 }
00375 }else{
00377 if (choix ==2){
00378 for(i=0;i<10;i++){
00379 for(j=0;j<10;j++){
00380 matrice_temp = matrice[i][j];
00381 switch(matrice_temp){
00382
00384 case 0 : wbkgd(grille_adverse[i][j],COLOR_PAIR(2));break;
00385
00387 case 1 : wbkgd(grille_adverse[i][j],COLOR_PAIR(3));
00388 mvwprintw(grille_adverse[i][j],0,0,"X");
00389 break;
00390
00392 case -14: case -15 : case -16 : case -17 : case -18 : case -19 :
00393 wbkgd(grille_adverse[i][j],COLOR_PAIR(6));
00394 break;
00395
00397 case -4: case -5 : case -6 : case -7 : case -8 : case -9 :
00398 wbkgd(grille_adverse[i][j],COLOR_PAIR(5));
00399 break;
00400 default : afficher_erreur("erreur de refresh de la matrice adverse");break;
00401 }
00402 wrefresh(grille_adverse[i][j]);refresh();
00403 }
00404 }
00405 }
00406 }
00407 }
00408
00410
00413 void effacer_bateau(int id_bateau){
00414
00415 switch(id_bateau){
00416
00417 case 1 :wmove(bateau,9,3);break;
00418 case 2 :wmove(bateau,10,3);break;
00419 case 3 :wmove(bateau,11,3);break;
00420 case 4 :wmove(bateau,12,3);break;
00421 case 5 :wmove(bateau,13,3);break;
00422 case 6 :wmove(bateau,14,3);break;
00423 }
00424
00425 wclrtoeol(bateau);
00426
00427
00428 box(bateau,0,0);
00429 mvwprintw(bateau,0,5,"| SeaBattle 1.0 |");
00430 wrefresh(bateau);
00431 }
00432
00434
00438 void afficher_etat(int code){
00439
00440
00441 wmove(bateau,8,2);
00442 wclrtobot(bateau);
00443
00444
00445 box(bateau,0,0);
00446 mvwprintw(bateau,0,5,"| SeaBattle 1.0 |");
00447
00448 switch(code){
00449 case 0 :
00450 mvwprintw(bateau,9,6,"C'est à votre");
00451 mvwprintw(bateau,10,4,"adversaire de jouer");
00452 break;
00453 case 1 :
00454 mvwprintw(bateau,9,6,"C'est à votre");
00455 mvwprintw(bateau,10,6,"tour de jouer");
00456 mvwprintw(bateau,15,7,"Pour tirer :");
00457 mvwprintw(bateau,16,2,"/shoot colonne ligne");
00458 mvwprintw(bateau,17,2,"ex: /shoot B 5");
00459
00460 break;
00461 case 10 : case -10 :
00462 mvwprintw(bateau,9,7,"La partie");
00463 mvwprintw(bateau,10,7,"terminée");
00464 break;
00465 }
00466 move(LINES-4,2);
00467 wrefresh(bateau);
00468 }