rebalanced elo function + added replay system
This commit is contained in:
parent
fcd20bcbd4
commit
32a72a2257
7
Makefile
7
Makefile
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
102 61
|
288 75
|
|
@ -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
|
|
@ -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
|
||||||
|
|
BIN
obj/main.o
BIN
obj/main.o
Binary file not shown.
BIN
obj/structure.o
BIN
obj/structure.o
Binary file not shown.
18
output.txt
18
output.txt
|
@ -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
|
||||||
|
|
||||||
|
|
37
src/main.c
37
src/main.c
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue