diff --git a/Makefile b/Makefile index b53367c..43bbf94 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,15 @@ LFLAGS = -lSDL2 -lSDL2_image -lm all: bin/back -test: bin/back - bin/back levels/test.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 +replay: bin/back + bin/back levels/straight.txt REP 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 +test: bin/back + bin/back levels/test.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 + ez: bin/back bin/back levels/simple.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 diff --git a/answer.txt b/answer.txt index 41f3620..337a31e 100644 --- a/answer.txt +++ b/answer.txt @@ -1 +1 @@ -102 61 \ No newline at end of file +288 75 \ No newline at end of file diff --git a/bin/back b/bin/back index d4a04e2..0158b64 100755 Binary files a/bin/back and b/bin/back differ diff --git a/lastActions.txt b/lastActions.txt new file mode 100644 index 0000000..8745157 --- /dev/null +++ b/lastActions.txt @@ -0,0 +1,22 @@ +83.689682 166.568590 +161.856726 -68.371906 +-21.799328 154.573210 +167.141051 -112.643060 +23.867801 -137.063781 +-134.600006 141.659189 +-131.665050 -68.540697 +-188.330352 56.382417 +-44.777939 -151.693916 +-157.607132 -25.718204 +141.568869 35.871573 +-11.482366 -141.473584 +-161.353467 -52.403609 +118.974318 -60.269145 +142.449106 80.225227 +-156.434592 120.574661 +130.379231 139.672870 +-107.308604 -82.900739 +69.679734 -172.732818 +150.627007 71.542801 +46.785402 -141.274814 +61.850213 -128.983670 diff --git a/leaderboard.txt b/leaderboard.txt index 43f7a20..f5e586e 100644 --- a/leaderboard.txt +++ b/leaderboard.txt @@ -1,7 +1,7 @@ name, elo -./bots/dumb 551 -./bots/dumb2 547 -./bots/dumb3 512 -./bots/dumb4 512 +./bots/dumb 1637 +./bots/dumb2 1592 +./bots/dumb3 1611 +./bots/dumb4 1519 ./bots/dumb5 540 ./bots/dumb6 562 diff --git a/obj/main.o b/obj/main.o index 03bb60d..f9453a9 100644 Binary files a/obj/main.o and b/obj/main.o differ diff --git a/obj/structure.o b/obj/structure.o index 20ef4c8..4824fa6 100644 Binary files a/obj/structure.o and b/obj/structure.o differ diff --git a/output.txt b/output.txt index d458f93..835a842 100644 --- a/output.txt +++ b/output.txt @@ -1,18 +1,12 @@ 4 -0 (6 4) (31.00 19.85) -1 (4 1) (46.31 83.63) -2 (2 1) (85.48 74.34) -3 (2 1) (66.86 66.86) +0 (2 0) (10.04 51.32) +1 (2 0) (32.42 40.43) +2 (2 0) (72.81 52.36) +3 (0 0) (89.50 92.97) [3] -7 8 -........ -..31S... -..24.... -...24... -...353E. -...215.. -........ +1 3 +S1E 100 200 5 0.90 0.80 0.20 diff --git a/src/main.c b/src/main.c index d210860..0d81aa3 100644 --- a/src/main.c +++ b/src/main.c @@ -22,6 +22,10 @@ bool WAIT = true; bool SHOW = true; bool matchDone = false; +bool noise = true; + +FILE* save; + void cameraActions(level* lvl, bool* halt, int* cx, int* cy, int* dezoom, int* sizeR) { SDL_Event event; while(SDL_PollEvent(&event)) { @@ -76,15 +80,22 @@ void cameraActions(level* lvl, bool* halt, int* cx, int* cy, int* dezoom, int* s } void player_turn(int id, char* exec) { - system(exec); - FILE* ptr = fopen("answer.txt", "r"); - int angle, mult; - fscanf(ptr, "%d %d", &angle, &mult); - fclose(ptr); - double dvx = 1.0+(rand()%200-100)/100.0*(DELTA_V/100.0); - double dvy = 1.0+(rand()%200-100)/100.0*(DELTA_V/100.0); - double dtheta = (rand()%200-100)*DELTA_THETA/100.0; - set_speed_car(players[id].c, dvx*MAX_SPEED*(mult)/100.0*cos((angle+dtheta)*3.14159/180.0), dvy*MAX_SPEED*(mult)/100.0*sin((angle+dtheta)*3.14159/180.0)); + if(noise) { + system(exec); + FILE* ptr = fopen("answer.txt", "r"); + int angle, mult; + fscanf(ptr, "%d %d", &angle, &mult); + fclose(ptr); + double dvx = 1.0+(rand()%200-100)/100.0*(DELTA_V/100.0); + double dvy = 1.0+(rand()%200-100)/100.0*(DELTA_V/100.0); + double dtheta = (rand()%200-100)*DELTA_THETA/100.0; + set_speed_car(players[id].c, dvx*MAX_SPEED*(mult)/100.0*cos((angle+dtheta)*3.14159/180.0), dvy*MAX_SPEED*(mult)/100.0*sin((angle+dtheta)*3.14159/180.0)); + fprintf(save, "%lf %lf\n", dvx*MAX_SPEED*(mult)/100.0*cos((angle+dtheta)*3.14159/180.0), dvy*MAX_SPEED*(mult)/100.0*sin((angle+dtheta)*3.14159/180.0)); + } else { + double vx, vy; + fscanf(save, "%lf %lf", &vx, &vy); + set_speed_car(players[id].c, vx, vy); + } } void parse_all_players(level* lvl, char** execs) { @@ -103,7 +114,21 @@ int main(int argc, char** argv) { fprintf(stderr, "usage : ./back ...\n"); exit(1); } - int N_PLAYERS = argc-2; + + int offsetP = 0; + if(argv[2][0] == 'R' && argv[2][1] == 'E' && argv[2][2] == 'P' && argv[2][3] == '\0') { + // replay mode + noise = false; + printf("---------------------------\n"); + printf("--| Replay mode enabled |--\n"); + printf("---------------------------\n"); + offsetP = 1; + save = fopen("lastActions.txt", "r"); + } else { + save = fopen("lastActions.txt", "w"); + } + + int N_PLAYERS = argc-2-offsetP; char** execs = malloc(sizeof(char*)*N_PLAYERS); int* ranks = malloc(sizeof(int)*N_PLAYERS); @@ -113,8 +138,8 @@ int main(int argc, char** argv) { execs[k][0] = '.'; execs[k][1] = '/'; int i = 2; - while(i-2 < 64 && argv[k+2][i-2] != '\0') { - execs[k][i] = argv[k+2][i-2]; + while(i-2 < 64 && argv[k+2+offsetP][i-2] != '\0') { + execs[k][i] = argv[k+2+offsetP][i-2]; i += 1; } execs[k][i] = '\0'; @@ -208,6 +233,9 @@ int main(int argc, char** argv) { } elapsed = 0.0; } + if(!noise) { + drawStringToRenderer(rend, "replay", 10, HEIGHT-75, 75/3, 105/3); + } if(remainingTurns >= 0) { draw7SegNumberToRenderer(rend, remainingTurns, WIDTH/2, HEIGHT-75, 25, 25, 3, 255, 32, 32, 255, 0, 0); } else { @@ -220,12 +248,13 @@ int main(int argc, char** argv) { count += 1; } - if(matchDone)updateLeaderBoard(execs, ranks); + if(matchDone && noise)updateLeaderBoard(execs, ranks); // ---------------------------- // free_digits(digits); free_digits(letters); free_level(stage); freePath(pth); + fclose(save); for(int k = 0; k < N_PLAYERS; k++) { free(execs[k]); } diff --git a/src/structure.c b/src/structure.c index 52c7bcb..79e62a0 100644 --- a/src/structure.c +++ b/src/structure.c @@ -133,9 +133,9 @@ double fsmin(double a, double b) {return (a 250, 2x bonus int gains(int elo, int rank, int diff) { - return (int)( + return 5+(int)( (fsmax(0.1, fsmin(2.0, (diff+250.0)/250.0)))*20- - (smax(40,smin(90, (90*elo)/3250)))* + (smax(40,smin(90, (90*elo)/1900)))* (((rank-1)*1.0)/((nPlayers-1+((nPlayers==1)?(1):(0)))*1.0)) ); } diff --git a/tempLeader.txt b/tempLeader.txt index 43f7a20..f5e586e 100644 --- a/tempLeader.txt +++ b/tempLeader.txt @@ -1,7 +1,7 @@ name, elo -./bots/dumb 551 -./bots/dumb2 547 -./bots/dumb3 512 -./bots/dumb4 512 +./bots/dumb 1637 +./bots/dumb2 1592 +./bots/dumb3 1611 +./bots/dumb4 1519 ./bots/dumb5 540 ./bots/dumb6 562