summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c77
1 files changed, 0 insertions, 77 deletions
diff --git a/main.c b/main.c
deleted file mode 100644
index 6b5cac8..0000000
--- a/main.c
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include "board.h"
-
-#define LARGE 100000
-
-
-static inline int min(int a, int b) {
- return a < b ? a : b;
-}
-
-static inline int max(int a, int b) {
- return a < b ? b : a;
-}
-
-
-static int win_score[4] = {
- [WIN_NONE] = 0,
- [WIN_P0] = 1000,
- [WIN_P1] = -1000,
- [WIN_DRAW] = 0,
-};
-
-static int evaluate(cboard_t B) {
- (void)B;
- return 0;
-}
-
-static int minimax_p0(cboard_t B, int alpha, int beta, int depth);
-
-static int minimax_p1(cboard_t B, int alpha, int beta, int depth) {
- if (depth == 0) return evaluate(B);
- enum win_t win = b_win(B);
- if (win != WIN_NONE) return win_score[win];
-
- int best = LARGE;
- for (int i = 0; i < 16; i++) {
- if (b_stk_full(B, i)) continue;
- board_t C; b_set(C, B);
- b_drop(C, i, 1);
- int sc = minimax_p0(C, alpha, beta, depth - 1);
- best = min(sc, best);
- beta = min(best, beta);
- if (beta <= alpha) break;
- }
-
- return best;
-}
-
-static int minimax_p0(cboard_t B, int alpha, int beta, int depth) {
- if (depth == 0) return evaluate(B);
- enum win_t win = b_win(B);
- if (win != WIN_NONE) return win_score[win];
-
- if (depth >= 36) {
- printf("depth=%d alpha=%d beta=%d\n", depth, alpha, beta);
- }
-
- int best = -LARGE;
- for (int i = 0; i < 16; i++) {
- if (b_stk_full(B, i)) continue;
- board_t C; b_set(C, B);
- b_drop(C, i, 0);
- int sc = minimax_p1(C, alpha, beta, depth - 1);
- best = max(sc, best);
- alpha = max(best, alpha);
- if (beta <= alpha) break;
- }
-
- return best;
-}
-
-
-int main(void) {
- board_t B = {0, 0};
- printf("%d\n", minimax_p0(B, -LARGE, LARGE, 64));
-}