Board: Remove (struct move*) indirections in hotspots
[pachi.git] / zzgo.c
blob0312ae7d9c55aa660c48ab2b280cb3c9cc77ca48
1 #include <getopt.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <time.h>
7 #include "board.h"
8 #include "debug.h"
9 #include "engine.h"
10 #include "montecarlo/montecarlo.h"
11 #include "montecasino/montecasino.h"
12 #include "random/random.h"
13 #include "gtp.h"
14 #include "random.h"
16 int debug_level = 1;
17 int seed;
19 int main(int argc, char *argv[])
21 struct board *b = board_init();
22 enum { E_RANDOM, E_MONTECARLO, E_MONTECASINO } engine = E_MONTECASINO;
24 seed = time(NULL);
26 int opt;
27 while ((opt = getopt(argc, argv, "e:d:s:")) != -1) {
28 switch (opt) {
29 case 'e':
30 if (!strcasecmp(optarg, "random")) {
31 engine = E_RANDOM;
32 } else if (!strcasecmp(optarg, "montecarlo")) {
33 engine = E_MONTECARLO;
34 } else if (!strcasecmp(optarg, "montecasino")) {
35 engine = E_MONTECASINO;
36 } else {
37 fprintf(stderr, "%s: Invalid -e argument %s\n", argv[0], optarg);
38 exit(1);
40 break;
41 case 'd':
42 debug_level = atoi(optarg);
43 break;
44 case 's':
45 seed = atoi(optarg);
46 break;
47 default: /* '?' */
48 fprintf(stderr, "Usage: %s [-e random|montecarlo|montecasino] [-d DEBUG_LEVEL] [-s RANDOM_SEED] [ENGINE_ARGS]\n",
49 argv[0]);
50 exit(1);
54 fast_srandom(seed);
55 if (DEBUGL(0))
56 fprintf(stderr, "Random seed: %d", seed);
58 char *e_arg = NULL;
59 if (optind < argc)
60 e_arg = argv[optind];
61 struct engine *e;
62 switch (engine) {
63 case E_RANDOM:
64 default:
65 e = engine_random_init(e_arg); break;
66 case E_MONTECARLO:
67 e = engine_montecarlo_init(e_arg); break;
68 case E_MONTECASINO:
69 e = engine_montecasino_init(e_arg); break;
73 char buf[256];
74 while (fgets(buf, 256, stdin)) {
75 if (DEBUGL(1))
76 fprintf(stderr, "IN: %s", buf);
77 gtp_parse(b, e, buf);
78 if (DEBUGL(1))
79 board_print(b, stderr);
81 return 0;