From 1aa7513ab80ce54c4cdc963352866945f0916232 Mon Sep 17 00:00:00 2001 From: Taha Belkhiri <belkhiri.taha53@gmail.com> Date: Wed, 29 Jun 2022 12:53:23 +0200 Subject: [PATCH] ajout information sur le Net et Wall dans la fonction castSingleRay --- .../jeu_appren_par_renfo/Res/ball_sprite.png | Bin 747 -> 626 bytes .../jeu_appren_par_renfo/src/player.c | 16 +- .../jeu_appren_par_renfo/src/render.c | 164 ++++++++++++++---- .../jeu_appren_par_renfo/src/render.h | 2 +- 4 files changed, 143 insertions(+), 39 deletions(-) diff --git a/travail_de_groupe/jeu_appren_par_renfo/Res/ball_sprite.png b/travail_de_groupe/jeu_appren_par_renfo/Res/ball_sprite.png index 22613161084aa65022284319b6cffa41d0870606..372e96135fbfc573e5e7cbcb8cee97ae3cab8fc0 100644 GIT binary patch literal 626 zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq004jh001Be0{{R3?fifj00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj57*I@9MTD&YjI99w|3m+xDF6RL+t2`vwEzGB0AbsR zZ2$lO2y{|TQ~&?}|NsC00N#VWSpWb432;bRa{vGi!vFvd!vV){sAK>D0nbT9K~z{r z&6inHBS8!W8ye&L-xw{gRFX<6jOoB+#CWh$%WLD0ndAOq{#Ag(Kp_E1ppbwhP)I-$ zC@}Nqx8t2T`K4L`FI?!yPsh*_U|nGzT;}oj)CfQ=YLqm7Qdjg`iR|W?aamtcB<3Qw zA<mzAE&6SO;{NdR>b=`z8^ZJ9JTX1L+axIO!{-2gjaxuh4cO(t^8uRswxO9{e3xK5 zj{qN1@Q=sL1?n@&Zvyo5^v41=zeV#a(LXis0<815Zx&>q7d$d=0rJPsTpK{X!J$P1 zz^~`2K|1iJAp86b&X3z61N#x6cz*Kx0IQEnrVmeUZ^R=&b^po$S{UG32q2ZjWdWAQ z(}D|7egGE+Kw%;W5uolMbiPke_^`)(^>|c6z6S!7_9p>Q2%M)2u=@@0g776a9u9!_ z2~MB^nuudwHWU$p2fnHD9$G2K+lI7YN$}eMw;7=9nDcdl#WSv@^p4@X0Oa$6kf89y z?5O?3yf!TzVZKOEdKaMa#`NeqK4Apbet!7zRqVa!)(^ZNZSLRgs>8f_zR-IgubyY3 zpMBaQb{S{%#Ln{vu=C}9---XY5hx@e2^12L1PTdA0tKe&{VVSGFG_JcGBHXMX8-^I M07*qoM6N<$g8AYb8UO$Q literal 747 zcmeAS@N?(olHy`uVBq!ia0vp^=|Jqu!3HFEmsPD~U|?*`baoE#baqxKD9TUE%t>Wn z(3n^|$=2hrgGAf?Wm&FTd}RVJCoHsz6c8=Eq9wA>X@zK1slm=K{Ig6{H1+zLvJW1d ze{@xI_vUqc>zWjPFh6?nWXTI9)w<~-QAa8Y?i{ZEzOUx{T}G$HhfG#y%UmeA?V~Q7 zWVT(aE$(8oh7to?YMNy6q$y4Bf9!H^SYKW^?`i$J^B31Y(`93Ec@&v8!|Ws5$1lrr z3+}1+ZJ4x1Xufd&%n*f-%GX8v?^}q+idCc?IkV(>XXW3djm=Z}(o}<$=PC8AoaOh^ z>00vC&tmCogOb-;{p3AdS(`fZwaH?SBth>93Qmr^sUZo<eyjbuT20=n*ZeuWE?#N6 z(>fywOR<1fwwqs@_aA(JFRJw<r@rPKhF$S8&y!g=-ZGut^|(gf+V3+9haGcx)$RCP z2IKiluHTM&!y$2lO>f=pS)15n-Z41)x8<B#C$dCSgzLa>N!#GQeTQ@}Y=8E3?biOw z><Z3%z3wuww;#xuxaoTBySuk<Zm&PT<=1y+)n7#&JFYP;2gVCqlDE4H!+#)jPRfcf z0g7-IctjR6Fz_7)VaDV6D^h@h>?NMQuI$g)WJDzOH|@9(3KV+o>EaktaqI1!Xuc)` z0f)e>8#8rwuUlIqdErQl!|e+n=hQ0}%<b5-j8kEXNa13y%4x5xwf63Mzq<YX@{=!Z zESDa9qB8k#THnq{?~b(wmX8$rEIOJkU{pb$H=BF;6mPaSJ5wH*volCMtM}`l{c&6A z6K?mg`Sbto?c2Eh@WolqnMVZK3kBR|Fe!$Hd3#oVc+vN1nbW_7qJ8q#dx}=SsV=f9 zJK^`?IA8J6R7>XuxOEWA7jslSGB%G0GqP-%Kj*31X#-1!o<!D*ak>Go-1KUJUS{xg L^>bP0l+XkKh}T4O diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/player.c b/travail_de_groupe/jeu_appren_par_renfo/src/player.c index c980c88..700361f 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c @@ -86,11 +86,17 @@ void hitBall() { freeIntList(landingPoint); freeIntList(lastHitPoint); - int rx, ry; - float distance; - castSingleRay(&distance, &rx, &ry); - printf("ray: %d %d\n", rx/BLOCK_SIZE, ry/BLOCK_SIZE); - printf("distance: %f\n", distance/BLOCK_SIZE); + int rxWall, ryWall; + float distanceWall; + + int rxNet, ryNet; + float distanceNet; + castSingleRay(player.angle, &distanceWall, &distanceNet, &rxWall, &ryWall, &rxNet, &ryNet); + printf("rayWall: %d %d\n", rxWall/BLOCK_SIZE, ryWall/BLOCK_SIZE); + printf("distance: %f\n", distanceWall); + + printf("rayNet: %d %d\n", rxNet/BLOCK_SIZE, ryNet/BLOCK_SIZE); + printf("distance: %f\n", distanceNet); lastHitPoint = allocLastHitPoint(); landingPoint = generateLandingPoint(); lastHitPoint[0] = ball.x; diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/render.c b/travail_de_groupe/jeu_appren_par_renfo/src/render.c index 01f6e3c..c7a89a7 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c @@ -563,7 +563,7 @@ void drawEnnemy() } } -void castSingleRay(float *distance, int *returnX, int *returnY) +void castSingleRay(float angle, float *distanceWall, float *distanceNet, int *returnXWall, int *returnYWall, int *returnXNet, int *returnYNet) { // ray casting variables float htexture, htexture2; @@ -573,7 +573,7 @@ void castSingleRay(float *distance, int *returnX, int *returnY) mx = 0; my = 0; raysListHead.next = NULL; - ra = player.angle; + ra = angle; if (ra < 0) ra -= 2 * pi; if (ra > 2 * pi) @@ -608,13 +608,26 @@ void castSingleRay(float *distance, int *returnX, int *returnY) { mx = (int)rx >> 6; my = (int)ry >> 6; - if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx] == 1) + if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT) { - hx = rx; - hy = ry; - disH = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y)); - dof = DOF; - foundSolidWallH = 1; + if (map[my][mx] == 1) + { + hx = rx; + hy = ry; + disH = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y)); + dof = DOF; + foundSolidWallH = 1; + } + else + { + hx2 = rx; + hy2 = ry; + disH2 = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y)); + // foundTransparentWallH = 1; + dof++; + rx += xo; + ry += yo; + } } else { @@ -650,16 +663,32 @@ void castSingleRay(float *distance, int *returnX, int *returnY) rx = player.x; dof = DOF; } + int foundSolidWallV = 0; + int foundTransparentWallV = 0; while (dof < DOF) { mx = (int)rx >> 6; my = (int)ry >> 6; - if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx] == 1) + if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx]) { - vx = rx; - vy = ry; - disV = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y)); - dof = DOF; + if (map[my][mx] == 1) + { + vx = rx; + vy = ry; + disV = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y)); + foundSolidWallV = 1; + dof = DOF; + } + else + { + vx2 = rx; + vy2 = ry; + disV2 = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y)); + foundTransparentWallV = 1; + dof++; + rx += xo; + ry += yo; + } } else { @@ -669,27 +698,95 @@ void castSingleRay(float *distance, int *returnX, int *returnY) } } - int direction; + int direction, direction2; - if (disH < disV) + if (foundTransparentWallV) { - rx = hx; - ry = hy; - distT = disH; - direction = 0; - htexture = (int)(rx) % BLOCK_SIZE; + if (disH < disV2) + { + rx = hx2; + ry = hy2; + distT = disH2; + distT2 = disV2; + direction = 0; + htexture = (int)(rx) % BLOCK_SIZE; + } + else + { + rx = vx2; + ry = vy2; + distT = disV2; + direction = 1; + htexture = (int)(ry) % BLOCK_SIZE; + } + if (foundSolidWallV) + { + if (disH < disV) + { + rx2 = hx; + ry2 = hy; + distT2 = disH; + direction2 = 0; + htexture2 = (int)(rx2) % BLOCK_SIZE; + } + else + { + rx2 = vx; + ry2 = vy; + distT2 = disV; + direction2 = 1; + htexture2 = (int)(ry2) % BLOCK_SIZE; + } + } + if (foundSolidWallH) + { + if (disH < disV) + { + rx2 = hx; + ry2 = hy; + distT2 = disH; + direction2 = 0; + htexture2 = (int)(rx2) % BLOCK_SIZE; + } + else + { + rx2 = vx; + ry2 = vy; + distT2 = disV; + direction2 = 1; + htexture2 = (int)(ry2) % BLOCK_SIZE; + } + } } + else { - rx = vx; - ry = vy; - distT = disV; - direction = 1; - htexture = (int)(ry) % BLOCK_SIZE; + if (disH < disV) + { + rx = hx; + ry = hy; + distT = disH; + direction = 0; + htexture = (int)(rx) % BLOCK_SIZE; + } + else + { + rx = vx; + ry = vy; + distT = disV; + direction = 1; + htexture = (int)(ry) % BLOCK_SIZE; + } } - *distance = distT; - *returnX = (int)rx; - *returnY = (int)ry; + + *returnXWall = (int)rx2; + *returnYWall = (int)ry2; + *distanceWall = distT2; + + *returnXNet = (int)rx; + *returnYNet = (int)ry2; + *distanceNet = (int)distT2; + } int isAngleInRange(float angle, float min, float max) @@ -747,14 +844,14 @@ void drawBall() rect.w = (ballWidth * screenDimension.w) / (ballDistance / BLOCK_SIZE); rect.h = (ballHeight * screenDimension.h) / (ballDistance / BLOCK_SIZE); rect.y = (3 * screenDimension.h / 4 + player.viewAngle) - sqrt(3) * tan(ballViewAngle) * ballDistance; - //printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h); + // printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h); - destRect.x = 0; + destRect.x = 32 * (SDL_GetTicks() / 150 % 4); destRect.y = 0; - destRect.w = 64; - destRect.h = 64; + destRect.w = 32; + destRect.h = 32; // printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h); - SDL_RenderCopy(renderer, playerTexture, &destRect, &rect); + SDL_RenderCopy(renderer, ballTexture, &destRect, &rect); } } @@ -901,6 +998,7 @@ void mainLoop() netTexture = loadTexture("Res/net.png"); crowdTexture = loadTexture("Res/crowd.png"); playerTexture = loadTexture("Res/player_sprite.png"); + ballTexture = loadTexture("Res/ball_sprite.png"); ray1 = malloc(sizeof(int) * 2); ray2 = malloc(sizeof(int) * 2); diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/render.h b/travail_de_groupe/jeu_appren_par_renfo/src/render.h index 74e24b1..dddaada 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/render.h +++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.h @@ -35,7 +35,7 @@ extern SDL_DisplayMode screenDimension; extern int * ray1; extern int * ray2; -void castSingleRay(float *distance, int *returnX, int *returnY); +void castSingleRay(float angle, float *distanceWall, float *distanceNet, int *returnXWall, int *returnYWall, int *returnXNet, int *returnYNet); void mainLoop(); #endif \ No newline at end of file -- GitLab