From 17983b20b39699c785820ce3c0f98b6823eec47d Mon Sep 17 00:00:00 2001 From: Alexandre Date: Fri, 6 Jun 2025 13:55:47 +0200 Subject: [PATCH] added slow tiles$ --- Makefile | 2 +- answer.txt | 2 +- lastActions.txt | 72 +++--------------------------------------------- leaderboard.txt | 8 +++--- levels/long.txt | 8 +++--- output.txt | 16 +++++------ src/base.c | 2 ++ src/collisions.c | 61 ++++++++++++++++++++++++++++++++++++++++ src/collisions.h | 2 ++ src/display.c | 42 ++++++++++++++++++++++------ src/main.c | 8 +++--- src/rooms.c | 6 ++++ src/structure.c | 2 ++ src/structure.h | 4 ++- tempLeader.txt | 8 +++--- 15 files changed, 140 insertions(+), 103 deletions(-) diff --git a/Makefile b/Makefile index ac1e6a7..058fb87 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ LFLAGS = -lSDL2 -lSDL2_image -lm all: bin/back replay: bin/back - bin/back levels/test.txt REP bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 + bin/back levels/test.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 testL: bin/back bin/back levels/test.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 bots/dumb5 bots/dumb6 diff --git a/answer.txt b/answer.txt index c672c65..a0f9808 100644 --- a/answer.txt +++ b/answer.txt @@ -1 +1 @@ -270 100 +348 100 diff --git a/lastActions.txt b/lastActions.txt index ac74250..33e74f5 100644 --- a/lastActions.txt +++ b/lastActions.txt @@ -1,68 +1,4 @@ --4.520035 -153.010954 -21.769531 -238.471209 --19.987625 -241.204125 --19.500799 -168.039659 -14.728318 -231.892620 --1.146169 -211.802657 -160.346794 -12.942202 -14.734663 -229.843788 -183.187726 -20.067243 -191.008872 -6.736352 -170.348954 0.561499 -14.343889 -247.122293 -20.500323 190.947536 -203.536940 20.430462 --16.283639 158.826220 -238.344449 12.606080 -177.328188 4.682923 -186.150359 3.312978 -156.149007 -14.652285 --0.279201 226.257003 -155.454736 7.969019 --15.445195 -203.505108 -154.883574 -19.965314 -2.886820 249.026500 -193.744106 9.469789 -224.583212 11.928862 -158.436164 -17.376616 --16.274097 -246.655139 -201.930360 18.198730 -211.031319 13.971414 -167.641503 2.279956 -240.821867 -1.488584 -15.075325 169.095356 --7.630298 196.102117 --16.364244 182.033073 -235.854636 -0.618213 --3.898845 151.466209 -11.772678 255.408435 -14.850871 172.844069 --18.121169 196.343427 --159.980078 -16.452435 --1.103776 223.906609 --164.136493 2.665638 --188.419881 11.708277 --168.416232 3.726386 --246.001750 26.159777 --162.864443 -16.413678 --185.432804 -17.595811 -10.500652 172.253365 --246.953352 -25.972959 -2.389557 169.349638 -11.802635 177.146925 --150.628957 1.655484 --21.620570 212.484655 --174.943953 17.815758 -10.246061 250.882924 --159.806539 11.576918 --230.847475 -27.358011 --156.905847 -16.074234 --232.901653 13.792754 --13.141665 -171.881205 -17.978969 -168.541785 -10.998418 -163.890031 --226.053584 27.174607 -19.537432 -182.302590 -0.707694 -182.975442 --25.737269 -245.385320 --22.985682 -253.425572 +145.823546 -38.881425 +-193.127137 113.697483 +-225.276144 -32.532029 +152.154832 -39.888911 diff --git a/leaderboard.txt b/leaderboard.txt index 6b4a443..ba03a94 100644 --- a/leaderboard.txt +++ b/leaderboard.txt @@ -5,7 +5,7 @@ name, elo ./bots/dumb4 1466 ./bots/dumb5 540 ./bots/dumb6 562 -./bots/follow1 616 -./bots/follow2 702 -./bots/follow3 641 -./bots/follow4 617 +./bots/follow1 657 +./bots/follow2 726 +./bots/follow3 652 +./bots/follow4 671 diff --git a/levels/long.txt b/levels/long.txt index 16c7b8e..e736e86 100644 --- a/levels/long.txt +++ b/levels/long.txt @@ -1,9 +1,9 @@ 5 9 -31114.314 -S...035.0 +31714.314 +S...035.6 .E..25..0 -.0..31115 -.2115.... +.6..37115 +.2175.... $ . = NULL diff --git a/output.txt b/output.txt index 5069f33..8534085 100644 --- a/output.txt +++ b/output.txt @@ -1,16 +1,16 @@ 4 -0 (1 2) (77.50 55.88) -1 (1 2) (54.26 37.50) -2 (1 2) (33.12 59.00) -3 (1 3) (74.02 24.62) +0 (0 1) (79.84 55.26) +1 (0 1) (63.60 77.08) +2 (0 1) (36.40 77.08) +3 (0 1) (20.16 55.26) 3 5 9 -31114.314 -S...035.0 +31714.314 +S...035.6 .E..25..0 -.0..31115 -.2115.... +.6..37115 +.2175.... 100 200 5 0.90 0.80 0.20 0.00 diff --git a/src/base.c b/src/base.c index 95bdb6a..2cf8dc4 100644 --- a/src/base.c +++ b/src/base.c @@ -91,6 +91,8 @@ int return_directions(road r) { case END: return 15; case STR_V: return 5; case STR_H: return 10; + case STR_VB: return 5; + case STR_HB: return 10; case TURN_NE: return 3; case TURN_SE: return 6; case TURN_SW: return 12; diff --git a/src/collisions.c b/src/collisions.c index d23893f..b02bc7d 100644 --- a/src/collisions.c +++ b/src/collisions.c @@ -138,6 +138,27 @@ void move_on_STR_V(int nPl) { } } +double absf(double x) {return (x<0.0)?(-x):(x);} +void move_on_STR_VB(int nPl) { + car* c = players[nPl].c; + c->pos.fx += c->vel.fx*DT; + c->pos.fy += c->vel.fy*DT; + if(c->pos.fx-PLAYER_R <= ROOM_SIZE*DIST_EDGE && c->vel.fx < 0.0) { // left wall + c->vel.fx *= -1.0; + c->pos.fx += 2.0*c->vel.fx*DT; + c->vel.fx *= RESTITUTION_WALL; + } + if(c->pos.fx+PLAYER_R >= ROOM_SIZE*(1.0-DIST_EDGE) && c->vel.fx > 0.0) { // right wall + c->vel.fx *= -1.0; + c->pos.fx += 2.0*c->vel.fx*DT; + c->vel.fx *= RESTITUTION_WALL; + } + if(absf(c->pos.fx - 0.5*ROOM_SIZE) < ROOM_SIZE*STR2_W/2.0) { // middle area + apply_friction(nPl); + apply_friction(nPl); + } +} + void move_on_STR_H(int nPl) { car* c = players[nPl].c; c->pos.fx += c->vel.fx*DT; @@ -154,6 +175,26 @@ void move_on_STR_H(int nPl) { } } +void move_on_STR_HB(int nPl) { + car* c = players[nPl].c; + c->pos.fx += c->vel.fx*DT; + c->pos.fy += c->vel.fy*DT; + if(c->pos.fy-PLAYER_R <= ROOM_SIZE*DIST_EDGE && c->vel.fy < 0.0) { // top wall + c->vel.fy *= -1.0; + c->pos.fy += 2.0*c->vel.fy*DT; + c->vel.fy *= RESTITUTION_WALL; + } + if(c->pos.fy+PLAYER_R >= ROOM_SIZE*(1.0-DIST_EDGE) && c->vel.fy > 0.0) { // bottom wall + c->vel.fy *= -1.0; + c->pos.fy += 2.0*c->vel.fy*DT; + c->vel.fy *= RESTITUTION_WALL; + } + if(absf(c->pos.fy - 0.5*ROOM_SIZE) < ROOM_SIZE*STR2_W/2.0) { // middle area + apply_friction(nPl); + apply_friction(nPl); + } +} + void move_on_TURN(int nPl, int cenX, int cenY) { car* c = players[nPl].c; ptf prev = (ptf){.fx = c->pos.fx, .fy = c->pos.fy}; @@ -331,6 +372,26 @@ bool updateCar(level* lvl, int nPl) { apply_friction(nPl); updateChunk(lvl, nPl); return true; + + case STR_VB: + addEnviroSpeed(nPl); + move_on_STR_VB(nPl); + removeEnviroSpeed(nPl); + + bumpOtherCars(nPl); + apply_friction(nPl); + updateChunk(lvl, nPl); + return true; + + case STR_HB: + addEnviroSpeed(nPl); + move_on_STR_HB(nPl); + removeEnviroSpeed(nPl); + + bumpOtherCars(nPl); + apply_friction(nPl); + updateChunk(lvl, nPl); + return true; case TURN_NE: addEnviroSpeed(nPl); diff --git a/src/collisions.h b/src/collisions.h index 27d4baa..0aecefe 100644 --- a/src/collisions.h +++ b/src/collisions.h @@ -4,4 +4,6 @@ bool updateCars(level* lvl); void updateWins(int* ranks); +void apply_friction(int nPl); + #endif \ No newline at end of file diff --git a/src/display.c b/src/display.c index 16bf637..17bfc02 100644 --- a/src/display.c +++ b/src/display.c @@ -365,12 +365,18 @@ void drawQuarterCircleToRenderer(SDL_Renderer * renderer, int32_t centreX, int32 ++y; error += ty; ty += 2; + ++y; + error += ty; + ty += 2; } if(error > 0) { --x; tx += 2; error += (tx - diameter); + --x; + tx += 2; + error += (tx - diameter); } } } @@ -423,16 +429,36 @@ void renderStraights(SDL_Renderer* renderer, level* lvl, int cx, int cy, int ran 64, 64, 64, 255); break; - case TURN_NE: + case STR_VB: + placeRectToRenderer(renderer, (WIDTH-rsize)/2+rsize*y, (HEIGHT-rsize)/2+rsize*x, rsize, rsize, 0, 0, 0, 255); + placeRectToRenderer(renderer, + (WIDTH-rsize)/2+rsize*y+(int)(DIST_EDGE*rsize), + (HEIGHT-rsize)/2+rsize*x, + rsize-(int)(2*DIST_EDGE*rsize), + rsize, + 64, 64, 64, 255); + placeRectToRenderer(renderer, + (WIDTH-rsize)/2+rsize*y+(int)((1.0-STR2_W)/2.0*rsize), + (HEIGHT-rsize)/2+rsize*x, + (int)(STR2_W*rsize), + rsize, + 64, 0, 0, 255); break; - case TURN_SE: - break; - - case TURN_SW: - break; - - case TURN_NW: + case STR_HB: + placeRectToRenderer(renderer, (WIDTH-rsize)/2+rsize*y, (HEIGHT-rsize)/2+rsize*x, rsize, rsize, 0, 0, 0, 255); + placeRectToRenderer(renderer, + (WIDTH-rsize)/2+rsize*y, + (HEIGHT-rsize)/2+rsize*x+(int)(DIST_EDGE*rsize), + rsize, + rsize-(int)(2*DIST_EDGE*rsize), + 64, 64, 64, 255); + placeRectToRenderer(renderer, + (WIDTH-rsize)/2+rsize*y, + (HEIGHT-rsize)/2+rsize*x+(int)((1.0-STR2_W)/2.0*rsize), + rsize, + (int)(STR2_W*rsize), + 64, 0, 0, 255); break; default: diff --git a/src/main.c b/src/main.c index d7d7cf5..f64cd1c 100644 --- a/src/main.c +++ b/src/main.c @@ -134,12 +134,12 @@ void parse_all_players(level* lvl, char** execs) { int main(int argc, char** argv) { if(argc < 2) { - fprintf(stderr, "usage : ./back ...\n"); + fprintf(stderr, "usage : ./back ?<-R> ...\n"); exit(1); } int offsetP = 0; - if(argv[2][0] == 'R' && argv[2][1] == 'E' && argv[2][2] == 'P' && argv[2][3] == '\0') { + if(argv[1+offsetP][0] == '-' && argv[1+offsetP][1] == 'R' && argv[1+offsetP][2] == '\0') { // replay mode noise = false; printf("---------------------------\n"); @@ -192,7 +192,7 @@ int main(int argc, char** argv) { init_music(); // ---------------------------- // //stage_file("levels/stage.txt"); - level* stage = parse_level(argv[1]); + level* stage = parse_level(argv[1+offsetP]); init_all(N_PLAYERS); printf("\n"); path* pth = getPath(stage); @@ -304,5 +304,5 @@ TODO : + add hazards KNOWN ISSUES : - - car can sometimes clip into walls (rare, seems turn-related) + - / */ \ No newline at end of file diff --git a/src/rooms.c b/src/rooms.c index cee6765..a9e6f8b 100644 --- a/src/rooms.c +++ b/src/rooms.c @@ -47,6 +47,8 @@ int read_int(FILE* ptr) { 3 = BottomRight (SE) 4 = BottomLeft (SW) 5 = TopLeft (NW) +6 = Vertical2 +7 = Horizontal2 S = Start E = End */ @@ -70,6 +72,10 @@ road get_type(char c) { return TURN_SW; case '5': return TURN_NW; + case '6': + return STR_VB; + case '7': + return STR_HB; default: fprintf(stderr, "unrecognized character '%c' encountered in parsing", c); diff --git a/src/structure.c b/src/structure.c index c3b0d49..36e12a0 100644 --- a/src/structure.c +++ b/src/structure.c @@ -33,6 +33,8 @@ const double DELTA_THETA = 7.0; // degrees const double WIND_X = 0.0; const double WIND_Y = 0.0; +const double STR2_W = 0.2; + double B = 0.0; // 0.6 works fine // ------------------------------------------------------------------------------------------ // diff --git a/src/structure.h b/src/structure.h index d629756..2d44bfc 100644 --- a/src/structure.h +++ b/src/structure.h @@ -43,7 +43,7 @@ typedef struct color_t { } color; // one chunk -typedef enum road_t {NONE, START, END, STR_V, STR_H, TURN_NE, TURN_SE, TURN_SW, TURN_NW} road; +typedef enum road_t {NONE, START, END, STR_V, STR_H, TURN_NE, TURN_SE, TURN_SW, TURN_NW, STR_VB, STR_HB} road; typedef struct level_t { int lines; @@ -87,6 +87,8 @@ extern const int HEIGHT; extern const int ROOM_SIZE; extern const int MAX_SPEED; +extern const double STR2_W; + extern int START_CHX; extern int START_CHY; extern int FINISH_CHX; diff --git a/tempLeader.txt b/tempLeader.txt index 6b4a443..ba03a94 100644 --- a/tempLeader.txt +++ b/tempLeader.txt @@ -5,7 +5,7 @@ name, elo ./bots/dumb4 1466 ./bots/dumb5 540 ./bots/dumb6 562 -./bots/follow1 616 -./bots/follow2 702 -./bots/follow3 641 -./bots/follow4 617 +./bots/follow1 657 +./bots/follow2 726 +./bots/follow3 652 +./bots/follow4 671