Montecarlo: Do domain checks for last opponent's move too
[pachi.git] / zzgo.c
bloba9b18a0f91e1ada5ea74f3aff6da4e7a77cabc99
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 "random/random.h"
12 #include "gtp.h"
13 #include "random.h"
15 int debug_level = 1;
16 int seed;
18 int main(int argc, char *argv[])
20 struct board *b = board_init();
21 enum { E_RANDOM, E_MONTECARLO } engine = E_MONTECARLO;
23 seed = time(NULL);
25 int opt;
26 while ((opt = getopt(argc, argv, "e:d:s:")) != -1) {
27 switch (opt) {
28 case 'e':
29 if (!strcasecmp(optarg, "random")) {
30 engine = E_RANDOM;
31 } else if (!strcasecmp(optarg, "montecarlo")) {
32 engine = E_MONTECARLO;
33 } else {
34 fprintf(stderr, "%s: Invalid -e argument %s\n", argv[0], optarg);
35 exit(1);
37 break;
38 case 'd':
39 debug_level = atoi(optarg);
40 break;
41 case 's':
42 seed = atoi(optarg);
43 break;
44 default: /* '?' */
45 fprintf(stderr, "Usage: %s [-e random|montecarlo] [-d DEBUG_LEVEL] [-s RANDOM_SEED] [ENGINE_ARGS]\n",
46 argv[0]);
47 exit(1);
51 fast_srandom(seed);
52 if (debug_level > 0)
53 fprintf(stderr, "Random seed: %d", seed);
55 char *e_arg = NULL;
56 if (optind < argc)
57 e_arg = argv[optind];
58 struct engine *e;
59 switch (engine) {
60 case E_RANDOM:
61 default:
62 e = engine_random_init(e_arg); break;
63 case E_MONTECARLO:
64 e = engine_montecarlo_init(e_arg); break;
68 char buf[256];
69 while (fgets(buf, 256, stdin)) {
70 if (debug_level > 1)
71 fprintf(stderr, "IN: %s", buf);
72 gtp_parse(b, e, buf);
73 if (debug_level > 1)
74 board_print(b, stderr);
76 return 0;