rebalanced elo function + added replay system

This commit is contained in:
Alexandre 2025-05-20 21:51:13 +02:00
parent fcd20bcbd4
commit 32a72a2257
11 changed files with 86 additions and 38 deletions

View File

@ -4,12 +4,15 @@ LFLAGS = -lSDL2 -lSDL2_image -lm
all: bin/back all: bin/back
test: bin/back replay: bin/back
bin/back levels/test.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 bin/back levels/straight.txt REP bots/dumb bots/dumb2 bots/dumb3 bots/dumb4
testL: bin/back testL: bin/back
bin/back levels/test.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 bots/dumb5 bots/dumb6 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 ez: bin/back
bin/back levels/simple.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4 bin/back levels/simple.txt bots/dumb bots/dumb2 bots/dumb3 bots/dumb4

View File

@ -1 +1 @@
102 61 288 75

BIN
bin/back

Binary file not shown.

22
lastActions.txt Normal file
View File

@ -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

View File

@ -1,7 +1,7 @@
name, elo name, elo
./bots/dumb 551 ./bots/dumb 1637
./bots/dumb2 547 ./bots/dumb2 1592
./bots/dumb3 512 ./bots/dumb3 1611
./bots/dumb4 512 ./bots/dumb4 1519
./bots/dumb5 540 ./bots/dumb5 540
./bots/dumb6 562 ./bots/dumb6 562

Binary file not shown.

Binary file not shown.

View File

@ -1,18 +1,12 @@
4 4
0 (6 4) (31.00 19.85) 0 (2 0) (10.04 51.32)
1 (4 1) (46.31 83.63) 1 (2 0) (32.42 40.43)
2 (2 1) (85.48 74.34) 2 (2 0) (72.81 52.36)
3 (2 1) (66.86 66.86) 3 (0 0) (89.50 92.97)
[3] [3]
7 8 1 3
........ S1E
..31S...
..24....
...24...
...353E.
...215..
........
100 200 5 0.90 0.80 0.20 100 200 5 0.90 0.80 0.20

View File

@ -22,6 +22,10 @@ bool WAIT = true;
bool SHOW = true; bool SHOW = true;
bool matchDone = false; bool matchDone = false;
bool noise = true;
FILE* save;
void cameraActions(level* lvl, bool* halt, int* cx, int* cy, int* dezoom, int* sizeR) { void cameraActions(level* lvl, bool* halt, int* cx, int* cy, int* dezoom, int* sizeR) {
SDL_Event event; SDL_Event event;
while(SDL_PollEvent(&event)) { while(SDL_PollEvent(&event)) {
@ -76,6 +80,7 @@ void cameraActions(level* lvl, bool* halt, int* cx, int* cy, int* dezoom, int* s
} }
void player_turn(int id, char* exec) { void player_turn(int id, char* exec) {
if(noise) {
system(exec); system(exec);
FILE* ptr = fopen("answer.txt", "r"); FILE* ptr = fopen("answer.txt", "r");
int angle, mult; int angle, mult;
@ -85,6 +90,12 @@ void player_turn(int id, char* exec) {
double dvy = 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; 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)); 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) { void parse_all_players(level* lvl, char** execs) {
@ -103,7 +114,21 @@ int main(int argc, char** argv) {
fprintf(stderr, "usage : ./back <level_path> <P1 executable> <P2 executable> ...\n"); fprintf(stderr, "usage : ./back <level_path> <P1 executable> <P2 executable> ...\n");
exit(1); 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); char** execs = malloc(sizeof(char*)*N_PLAYERS);
int* ranks = malloc(sizeof(int)*N_PLAYERS); int* ranks = malloc(sizeof(int)*N_PLAYERS);
@ -113,8 +138,8 @@ int main(int argc, char** argv) {
execs[k][0] = '.'; execs[k][0] = '.';
execs[k][1] = '/'; execs[k][1] = '/';
int i = 2; int i = 2;
while(i-2 < 64 && argv[k+2][i-2] != '\0') { while(i-2 < 64 && argv[k+2+offsetP][i-2] != '\0') {
execs[k][i] = argv[k+2][i-2]; execs[k][i] = argv[k+2+offsetP][i-2];
i += 1; i += 1;
} }
execs[k][i] = '\0'; execs[k][i] = '\0';
@ -208,6 +233,9 @@ int main(int argc, char** argv) {
} }
elapsed = 0.0; elapsed = 0.0;
} }
if(!noise) {
drawStringToRenderer(rend, "replay", 10, HEIGHT-75, 75/3, 105/3);
}
if(remainingTurns >= 0) { if(remainingTurns >= 0) {
draw7SegNumberToRenderer(rend, remainingTurns, WIDTH/2, HEIGHT-75, 25, 25, 3, 255, 32, 32, 255, 0, 0); draw7SegNumberToRenderer(rend, remainingTurns, WIDTH/2, HEIGHT-75, 25, 25, 3, 255, 32, 32, 255, 0, 0);
} else { } else {
@ -220,12 +248,13 @@ int main(int argc, char** argv) {
count += 1; count += 1;
} }
if(matchDone)updateLeaderBoard(execs, ranks); if(matchDone && noise)updateLeaderBoard(execs, ranks);
// ---------------------------- // // ---------------------------- //
free_digits(digits); free_digits(digits);
free_digits(letters); free_digits(letters);
free_level(stage); free_level(stage);
freePath(pth); freePath(pth);
fclose(save);
for(int k = 0; k < N_PLAYERS; k++) { for(int k = 0; k < N_PLAYERS; k++) {
free(execs[k]); free(execs[k]);
} }

View File

@ -133,9 +133,9 @@ double fsmin(double a, double b) {return (a<b)?(a):(b);}
// if diff < -250, no bonus // if diff < -250, no bonus
// if diff > 250, 2x bonus // if diff > 250, 2x bonus
int gains(int elo, int rank, int diff) { 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- (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)) (((rank-1)*1.0)/((nPlayers-1+((nPlayers==1)?(1):(0)))*1.0))
); );
} }

View File

@ -1,7 +1,7 @@
name, elo name, elo
./bots/dumb 551 ./bots/dumb 1637
./bots/dumb2 547 ./bots/dumb2 1592
./bots/dumb3 512 ./bots/dumb3 1611
./bots/dumb4 512 ./bots/dumb4 1519
./bots/dumb5 540 ./bots/dumb5 540
./bots/dumb6 562 ./bots/dumb6 562