From 0a8aa2b7cb2fb2b656681123172c78a79dc950b4 Mon Sep 17 00:00:00 2001 From: 21801009 <21801009@unicaen.fr> Date: Tue, 21 Jun 2022 20:08:52 +0200 Subject: [PATCH] modif jeu avec taille variables --- graphics.c | 17 ++++- graphics.h | 1 + jeu.c | 198 +++++++++++++++++++++++++++++++++++++++++++++++------ jeu.h | 24 +++++-- main.c | 10 +-- morpion | Bin 27904 -> 32128 bytes 6 files changed, 212 insertions(+), 38 deletions(-) diff --git a/graphics.c b/graphics.c index 963b26b..0e38958 100644 --- a/graphics.c +++ b/graphics.c @@ -37,7 +37,7 @@ void init_graphics(int W, int H) { SDL_EnableKeyRepeat(1,0); - SDL_WM_SetCaption("Puissance 4!!",NULL); + SDL_WM_SetCaption("Morpion !!",NULL); __init_graphics_is_already_called = 25; printf("Fenetre de %d x %d\n",WIDTH,HEIGHT); @@ -56,7 +56,7 @@ void init_graphics(int W, int H) { printf("SDL_ttf absent : affichage dans la console.\n"); #endif - fill_screen(white); + fill_screen(black); affiche_auto_on(); affiche_all(); @@ -258,6 +258,19 @@ void draw_line(point p1, point p2, couleur color) { if (SDL_AFFICHE_AUTO) affiche_all(); } +void draw_big_line(point p1, point p2, couleur color) { + draw_line(p1, p2, color); + p1.x = p1.x-1;p2.x = p2.x-1; + draw_line(p1, p2, color); + p1.x = p1.x+2;p2.x = p2.x+2; + draw_line(p1, p2, color); + p1.x = p1.x-1;p2.x = p2.x-1; + p1.y = p1.y-1;p2.y = p2.y-1; + draw_line(p1, p2, color); + p1.y = p1.y+2;p2.y = p2.y+2; + draw_line(p1, p2, color); +} + void draw_rectangle(point p1, point p2, couleur color) { int xmin, xmax; int ymin, ymax; diff --git a/graphics.h b/graphics.h index 087bc1f..882d200 100644 --- a/graphics.h +++ b/graphics.h @@ -43,6 +43,7 @@ point wait_clic(); void fill_screen(couleur color); void draw_pixel(point p, couleur color); void draw_line(point p1, point p2, couleur color); +void draw_big_line(point p1, point p2, couleur color); void draw_rectangle(point p1, point p2, couleur color); void draw_fill_rectangle(point p1, point p2, couleur color); void draw_circle(point centre, int rayon, couleur color); diff --git a/jeu.c b/jeu.c index f282e05..415c81b 100644 --- a/jeu.c +++ b/jeu.c @@ -1,40 +1,55 @@ #include "jeu.h" -void init_board(int board[10][10]) { - for(int i = 0; i < 10; i++) { - for(int j = 0; j < 10; j++) { +void menu() { + // init_graphics(400,400); + int size_tab = 11; + int nb = 3; + int board[15][15]; + int winner; + int r = 1; + while(r) { + play(board, &winner, size_tab, nb); + r = replay(winner); + } +} + +void init_board(int board[15][15], int size_tab) { + for(int i = 0; i < size_tab; i++) { + for(int j = 0; j < size_tab; j++) { board[i][j] = -1; } } } -void draw_board(int board[10][10]) { +void draw_board(int board[15][15], int size_tab) { point p1, p2; - for(int i = 0; i < 10; i++) { - for(int j = 0; j < 10; j++) { + for(int i = 0; i < size_tab; i++) { + for(int j = 0; j < size_tab; j++) { p1.x = i*60+60; p1.y = 0; - p2.x = i*60+60; p2.y = 600; - draw_line(p1,p2,black); + p2.x = i*60+60; p2.y = 60*size_tab; + draw_big_line(p1,p2,lightgrey); p1.y = i*60+60; p1.x = 0; - p2.y = i*60+60; p2.x = 600; - draw_line(p1,p2,black); + p2.y = i*60+60; p2.x = 60*size_tab; + draw_big_line(p1,p2,lightgrey); // draw_player(board, i, j); } } } -void draw_player(int board[10][10] ,int i, int j) { +void draw_player(int board[15][15] ,int i, int j) { point p = {i*60+30, j*60+30}; if(board[i][j] == 0) - draw_cross(p, 60, blue); + draw_cross(p, 58, blue); if(board[i][j] == 1) - draw_circle(p, 30, red); + draw_circle(p, 29, red); } -void play(int board[10][10]) { - int* winner = malloc(sizeof(int)); +void play(int board[15][15], int *winner, int size_tab, int nb) { + init_graphics(60*size_tab,60*size_tab); + init_board(board, size_tab); + draw_board(board, size_tab); int joueur = 1; - while(fin(board, winner)) { + while(end(board, winner, size_tab, nb)) { point p = wait_clic(); int pos[2]; pos[0] = p.x/60; @@ -45,14 +60,70 @@ void play(int board[10][10]) { } draw_player(board, pos[0], pos[1]); } - free(winner); } -int fin(int board[10][10], int *winner) { - +int end(int board[15][15], int *winner, int size_tab, int nb) { + for(int i = 0; i < size_tab; i++) { + for(int j = 0; j < size_tab; j++) { + if(nb == 3) { + if(i+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i+1][j] && board[i][j]==board[i+2][j] && board[i][j]==board[i+3][j]) { + *winner = board[i][j]; + return 0; + } + if(j+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i][j+1] && board[i][j]==board[i][j+2] && board[i][j]==board[i][j+3]) { + *winner = board[i][j]; + return 0; + } + if(i+size_tab < size_tab && j+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i+1][j+1] && board[i][j]==board[i+2][j+2] && board[i][j]==board[i+3][j+3]) { + *winner = board[i][j]; + return 0; + } + if(i+size_tab < size_tab && j-size_tab > 0 && board[i][j] != -1 && board[i][j]==board[i+1][j-1] && board[i][j]==board[i+2][j-2] && board[i][j]==board[i+3][j-3]) { + *winner = board[i][j]; + return 0; + } + } + if(nb == 4) { + if(i+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i+1][j] && board[i][j]==board[i+2][j] && board[i][j]==board[i+3][j] && board[i][j]==board[i+4][j]) { + *winner = board[i][j]; + return 0; + } + if(j+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i][j+1] && board[i][j]==board[i][j+2] && board[i][j]==board[i][j+3] && board[i][j]==board[i][j+4]) { + *winner = board[i][j]; + return 0; + } + if(i+size_tab < size_tab && j+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i+1][j+1] && board[i][j]==board[i+2][j+2] && board[i][j]==board[i+3][j+3] && board[i][j]==board[i+4][j+4]) { + *winner = board[i][j]; + return 0; + } + if(i+size_tab < size_tab && j-size_tab > 0 && board[i][j] != -1 && board[i][j]==board[i+1][j-1] && board[i][j]==board[i+2][j-2] && board[i][j]==board[i+3][j-3] && board[i][j]==board[i+4][j-4]) { + *winner = board[i][j]; + return 0; + } + } + if(nb == 5) { + if(i+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i+1][j] && board[i][j]==board[i+2][j] && board[i][j]==board[i+3][j] && board[i][j]==board[i+4][j] && board[i][j]==board[i+5][j]) { + *winner = board[i][j]; + return 0; + } + if(j+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i][j+1] && board[i][j]==board[i][j+2] && board[i][j]==board[i][j+3] && board[i][j]==board[i][j+4] && board[i][j]==board[i][j+5]) { + *winner = board[i][j]; + return 0; + } + if(i+size_tab < size_tab && j+size_tab < size_tab && board[i][j] != -1 && board[i][j]==board[i+1][j+1] && board[i][j]==board[i+2][j+2] && board[i][j]==board[i+3][j+3] && board[i][j]==board[i+4][j+4] && board[i][j]==board[i+5][j+5]) { + *winner = board[i][j]; + return 0; + } + if(i+size_tab < size_tab && j-size_tab > 0 && board[i][j] != -1 && board[i][j]==board[i+1][j-1] && board[i][j]==board[i+2][j-2] && board[i][j]==board[i+3][j-3] && board[i][j]==board[i+4][j-4] && board[i][j]==board[i+5][j-5]) { + *winner = board[i][j]; + return 0; + } + } + } + } int k = 0; - for(int i = 0; i < 10; i++) { - for(int j = 0; j < 10; j++) { + for(int i = 0; i < size_tab; i++) { + for(int j = 0; j < size_tab; j++) { if(board[i][j]!=-1) k++; } @@ -62,4 +133,87 @@ int fin(int board[10][10], int *winner) { return 0; } return 1; -} \ No newline at end of file +} + +int replay(int winner) { + init_graphics(300,200); + point pm; pm.y = 150; + if(winner==-1) { + pm.x = 100; + aff_pol("Match Nul", 20, pm, white); + } + if(winner==0) { + pm.x = 42; + aff_pol("Joueur bleu a gagne !", 20, pm, blue); + } + if(winner==1) { + pm.x = 40; + aff_pol("Joueur rouge a gagne !", 20, pm, red); + } + point p = {101,86}; + aff_pol("Rejouer ?", 20, p, white); + point p1 = {100,85}, p2 = {200,60}; + draw_rectangle(p1, p2, white); + p.y = 51; + aff_pol("Quitter ?", 20, p, white); + p1.y = 50; p2.y = 25; + draw_rectangle(p1, p2, white); + while(1) { + p = wait_clic(); + if(p.x < 200 && p.x > 100) { + if(p.y < 85 && p.y > 60) + return 1; + if(p.y < 50 && p.y > 25) + return 0; + } + } + return 0; +} + +// int test_x(int board[15][15], int i, int j, int nbtest){ +// if(nbtest == 5) +// return board[i][j] != -1 && board[i][j]==board[i+1][j] && board[i][j]==board[i+2][j] && board[i][j]==board[i+3][j] && board[i][j]==board[i+4][j] && board[i][j]==board[i+5][j]; +// if(nbtest == 4) +// return board[i][j] != -1 && board[i][j]==board[i+1][j] && board[i][j]==board[i+2][j] && board[i][j]==board[i+3][j] && board[i][j]==board[i+4][j]; +// if(nbtest == 3) +// return board[i][j] != -1 && board[i][j]==board[i+1][j] && board[i][j]==board[i+2][j] && board[i][j]==board[i+3][j]; +// else +// exit(0); +// return 1; +// } + +// int test_y(int board[15][15], int i, int j, int nbtest){ +// if(nbtest == 5) +// return board[i][j] != -1 && board[i][j]==board[i][j+1] && board[i][j]==board[i][j+2] && board[i][j]==board[i][j+3] && board[i][j]==board[i][j+4] && board[i][j]==board[i][j+5]; +// if(nbtest == 4) +// return board[i][j] != -1 && board[i][j]==board[i][j+1] && board[i][j]==board[i][j+2] && board[i][j]==board[i][j+3] && board[i][j]==board[i][j+4]; +// if(nbtest == 3) +// return board[i][j] != -1 && board[i][j]==board[i][j+1] && board[i][j]==board[i][j+2] && board[i][j]==board[i][j+3]; +// else +// exit(0); +// return 1; +// } + +// int test_xy(int board[15][15], int i, int j, int nbtest){ +// if(nbtest == 5) +// return board[i][j] != -1 && board[i][j]==board[i+1][j+1] && board[i][j]==board[i+2][j+2] && board[i][j]==board[i+3][j+3] && board[i][j]==board[i+4][j+4] && board[i][j]==board[i+5][j+5]; +// if(nbtest == 4) +// return board[i][j] != -1 && board[i][j]==board[i+1][j+1] && board[i][j]==board[i+2][j+2] && board[i][j]==board[i+3][j+3] && board[i][j]==board[i+4][j+4]; +// if(nbtest == 3) +// return board[i][j] != -1 && board[i][j]==board[i+1][j+1] && board[i][j]==board[i+2][j+2] && board[i][j]==board[i+3][j+3]; +// else +// exit(0); +// return 1; +// } + +// int test_yx(int board[15][15], int i, int j, int nbtest){ +// if(nbtest == 5) +// return board[i][j] != -1 && board[i][j]==board[i+1][j-1] && board[i][j]==board[i+2][j-2] && board[i][j]==board[i+3][j-3] && board[i][j]==board[i+4][j-4] && board[i][j]==board[i+5][j-5]; +// if(nbtest == 4) +// return board[i][j] != -1 && board[i][j]==board[i+1][j-1] && board[i][j]==board[i+2][j-2] && board[i][j]==board[i+3][j-3] && board[i][j]==board[i+4][j-4]; +// if(nbtest == 3) +// return board[i][j] != -1 && board[i][j]==board[i+1][j-1] && board[i][j]==board[i+2][j-2] && board[i][j]==board[i+3][j-3]; +// else +// exit(0); +// return 1; +// } diff --git a/jeu.h b/jeu.h index cae883e..5c0590c 100644 --- a/jeu.h +++ b/jeu.h @@ -2,14 +2,28 @@ #define JEU_H #include "graphics.h" -void init_board(int[10][10]); +void menu(); -void draw_board(int[10][10]); +void init_board(int[15][15], int); -void draw_player(int[10][10] ,int, int); +void draw_board(int[15][15], int); -void play(int[10][10]); +void draw_player(int[15][15] ,int, int); -int fin(int[10][10], int*); +void play(int[15][15], int*, int, int); + +int end(int[15][15], int*, int, int); + +int replay(int winner); + +void menu(); + +int test_x(int[15][15], int, int, int); + +int test_y(int[15][15], int, int, int); + +int test_xy(int[15][15], int, int, int); + +int test_yx(int[15][15], int, int, int); #endif \ No newline at end of file diff --git a/main.c b/main.c index bab428d..0c85a46 100644 --- a/main.c +++ b/main.c @@ -1,14 +1,6 @@ #include "jeu.h" int main() { - int board[10][10]; - init_graphics(600,600); - fill_screen(white); - init_board(board); - // board[2][6] = 1; - // board[3][8] = 2; - draw_board(board); - play(board); - wait_escape(); + menu(); return 0; } \ No newline at end of file diff --git a/morpion b/morpion index 41eef5aad4afdaca346acaa84c4f60e47e3c1d87..1537e95e302e006fb47562def0698ef020c9dd88 100755 GIT binary patch delta 10614 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 delta 9256 zcmZu$4O~=J+P`<;BKR>MATl7xfP(@e%%~`1qKu7tF*HCaKNG}A_Vrb3LGg>BkhW=@ zUF=k^x$V2SyM1i!hnriOn>s`*N?&BPnbj+@nloz3W*K2M@BcaXUY+HA&+j+qxzGPR z&vTx0&hwme?%bvuV$*4{)g0@O6?iF9h~Tf@o&9V~n_gktc7KxR{w7&rG%6SsUIdAx zN1MVArb}WJT%+N7QD{0?sI(tk@bC1I2!#)f?vKT>Hl=f26R6kdEzIBO#>IYbB1Q`UpGE@mQCCC{dD$pL}uc6D3U() z%O6Cej<8JjdBh?nM^=h;%pRE_K0`I@k<6?wvXV6nF|)N&B`cN8;*;#Gw2E~{nc0%4 z2Jr>xzL@Px21-d4@sO&)3kZmF>iFsKRnKX2f zo177akI_!6VZpCHsTLD12_bS9MHC{0Z`5|;|GN803?fn(hG`_7k+roW1jvk1c|~7$ zQ(s#a&6oXgWJM7CH0$X9rjwOwL*^joHU89{q^3+EpGJihdctscaUm0|d>FnnzoK0FNH z7>27`0dH;4aO&R_rqHA{08@7q-ug%wu7(N6Tf=ZA%@t#N!ti(n;&odXJ_?9BenEIX ztRW#xVSgBI4#N+I;fZ0mKMYR_!;gpIqi^AEp*yTW-5`1MsW3d{mV(d|hK~uu17Ub- z7~U6#Tf*>uj^8KnwNDFc5Y%X=n82QSvqXpC)|)8yfG|8G3^#}2;||M6stsHoX0NO-?O`Ly$cp7nVBj} za{e*mDKmmaoPU&f%7~zi^A8bEnGm#aek<|VoZLdt$bkn4pp*y-oc{^&v`Yp1egu%Q zns_7eJ)B=gyova3&X*HU84~n!em?P(8NvOWpG`bvM6iwX(}|Bq|3a{p1Ct1#6bLqP zKAU)o{NP5;rxQ;RAFSkj67dx2!BWo05>F8xEaLo7;wiF&HqPsar+^MxI6p8Ge2SX@ zBL}`BfFd|3aQ-6ksl@mFKr_%wyoLB4@QaQt!FnI1N`CNi8)9LN?2XKz?O68gwC(|5 z_sgDt2F7Alk3wGvY{7!do-={>F)E@l7)=2^I57;nKX4J#BYPFyHSz?-Sp6{h!8ggg z-M_pe@Ekldq&A@wwjnmTtO|BR@o_l%zplwOr0xU`6TZS?xGMXk*+d-ub@8%S`o|1B zBhX_)J&FOLL#2>Uqf}l!e@bp z;@1KSRHOT2((8rH8E21u063)t?79S@Q(9ffcE&Y{Yne21oakgZBd5Ag-w1^Q&wNi~ zfQVc3{l#&4+luqdgFmC?dLFS)HCgG(n>u_{pzGldQ+gd-hNI6I;+iar5~A z`%C=D8TZ{z?ElR7ZO;$_0|TLu?2TUzkrK~^*C_CgP}&9TNM=%c3IY+*WVCyvi7qCN zN^-9n&Ev1@J5nutYq}sTU+G*C+zY2~P5<(h$D|9hVX1lIWpp^wxuR405D!$aa>DYX zGz`+~g`JvK**jtjSvr&s_y`5YN<>;NLLDM!;Ka?9WP3-AvHTTE7-v+|4D0Z^NzH|~ zLpQPB27hMbDNxT&jT-BALg)yc6GykhU|6YiSUyRPt zEzM_#NAJ_UGKEzp=MTLDH^EKuUdcU${W{qkTRTM%=0Iz_%W+~yx>u^0!cHXT>G~$K zf#fuuG=-(4m~|H>vuPja=bJF+h+!$FGn8b2ZEvA!rr*!l;TIcM%UZ3iXKRSu6N}XnU^d|Zxp_?bM=TaBw zzP7XLsRj98*=bUo{h~*o21)dW82blj9YA!SPd^b z-f8>`a?8eEO_RlM9!u}l&CFxx(lhRk%fk-hXx}l`m35r2WhcVrdM?)1>&B9nhyj;p z%Fn!oR{>o!tZ2XHGUObe1AlTHR~r!%9{_hbjyI-+>%WrAD#z9v??9WQYsW;4Fv}}B za@hoHqHa{~W7g3|>ED{JO{6AE_eAQp+=3n-!aO*e-^4=PFtpGe%qu-Sk*%@j#$F4B zaEz?58c{E{4i8Mf!hUC+q>H-3PFXkT-pOIb87oZNa?+h_8db`0`DpIa|n5Rb=i_Vgi@~?~z7f#(g+jqqQ0ARvq7&J(*cu&}ik@VQ zAsXEkdm=v$-UXRJDNtvHbFtI&c7^Qu$TP6Wa}Aru57@nMm=|c*G9!$*teJLyvFCgV zoa$oN#^>c;gj2W9xQf@BnwpgJ5~KSQ?$?X{Mq5AZWP0OIX0g)D>BFy5j=|W~z}f(N zGBe9k7@(u8{v+&fJNan5Qh655SzQh`Pj%eBOdHuye2Dm_Jkm<9M zqhg^R_?+3YQgw%;Sy@)L?wL%sBWt{F$p!XoR&KJ4JEi?om*LfQ){$9%H@xDq8fQe- z{}IoYn7pq?N+7 z(@$7?FalxlZ+rwPNmb%GPcG1{mX4I- zBd7$rpW9F3CbS^tixSWEznZFQ*^ZpOT$|+Q)5{FE`BE~ zOuB-?qiF00_LE#r_RT#-ue^OD6Y$p`DR#+@zWOg^-^R>h$2aw#H4m(I*CMLc ze$SqrIDT~XF^slJZog;&?GU@#ze{Z&kg~eu>MnL=Vxs#+By?~MmJL2eE7KRgx+T7O znOKJhJIOmFRk5$=|M8&2;jjO)#8;GA;^?gZj6?-;L+t2`qKL5jJFXeV4Dhj_mku;* z<+s~y5ib=5#bKrOwLkr7)%xmtEmPRPoHO10FWp%*UGx)2N8Cn#rqWHd=krjgl)C5% zh5E2aO`rwfo6d$p4WO-{yFlAO>9wo}^sm(3i!27+5Bfc*AJmA*G5#|Y$^qR7DueDn z7YhB(jfb}Lp^%>d&<{aNk$M5*kvh>4P(=DAgSKL$-VQ1t>z)VgK_>TuTCRjb!y`cv zu?3)&pe3M21jv3+8_u0*ym5Aa9SSW5EkZc7f|laSl>Is$jJQP^F~U+%D`+3+I?z^J zvfDr_asNFP#SYy*E~V&9C^QZ(2(BUY7l2^J4~LEL$Y-IDh5c~**qJn4*r$0Rk&XC$ z53O))C$N5CxX<%~lU~?^pS6eGJ+3KL|Q3YqA^?+?J>DlfR53SZ;*d=ES1N*ePS znkuP5)?0QA)koifu9kq!!Q@-cvaejrbdkMm;hdye zi6yE865Uq;nZ~8p{EsK@cRTM54IrRn2LtOe&-B0xe0G#^F*?P-ty?M6YI9nfWgJvl- zw?p%nWU5$id{`&z&CL-j^tRPQ^=7Bu=+sBg8}^@i^BsEQTzxc;j-Aj6Kri&N`tBxET%n-IP-DXPT+`XTV>PeP$BgrU!7 zU73D=gzlc9dgJZ-Xy-8eskbJwSo=R;`}>|&luD=ipz-vLfr`eT9mIdb#D%Go0=Sq_ zp*JNe+SdcTGV_9?mKVG+^5S2>$`|H}e)izPRMEorEwmX+l@=^IFJ^XjVXEm7H8Zrp z+`~+F&Jqh)*`28)dgzZm6eQvXfr&ft{YAe{hp$0@(TzG_E{zuHxZ@?Wj7=(|cWR}O zuSz$HTYh$bnL9=sLNxRfn6ccV>&s!bsxhpz+$8!BtS(QKMB9PwcjxNBy|^?})CF?b zN6V@pcA#MSM-s7ys#Ha*P3&XuS0$J%;s1K0TNiV#hVj+W^GnMVXS8{(0V@h4mG3J` z6R&-!b%I{d)=O)83J;@TH2p76(^2ZWam@`*DJ%@T02Gwv44$&($qj{np8}=bItg~CYXrDgmtS^ukEe7 z>2q80c^INr?ZYSEuVLY7RZGCjCKWBIo>TGGYz2Q(A;L@i6W*K5bZ>(A0X-+4QzdN^ z6cNq0KHe%)zdD1UMVV?w7{cy{h0#_ z)bncx=9fw$aGKS%swY~HR_sR!IHpi1R;ap_7Oom{aD!ws8 z0oqh=@%I7uq%~8)52^SQnjJNNv;*^3z{x}HqqpYael9Pt@oP->c2&0s3q@s%LWE-~ zPVc!?BGkT4vZ{3n;we7HOH?0te%%8io4Ec6`)++Yvus!&xp7_97UtXVsII2=K>WsR z@xa{sr$;cqF7iNAU8M-!v-NosE2t0dur3Pm^~`D zhkdeX+RaOXc3Cj9w9Rh1Rcy|S)yAaJ=aX3P=G>v$HjFbnsbQK?-N>{Jt%y}M Gss9UConT%7