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
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
./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
|
||||
|
|
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
|
||||
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
|
||||
|
||||
|
|
55
src/main.c
55
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 <level_path> <P1 executable> <P2 executable> ...\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]);
|
||||
}
|
||||
|
|
|
@ -133,9 +133,9 @@ double fsmin(double a, double b) {return (a<b)?(a):(b);}
|
|||
// if diff < -250, no bonus
|
||||
// if diff > 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))
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue