summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--include/game.h11
-rw-r--r--lib/game.c36
3 files changed, 49 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 6543609..59ff03b 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,8 @@ CC = gcc
CFLAGS = -Wall -Iinclude/
OUTPUT = main
MAIN = main.c
-DEPS = include/types.h include/board.h include/print.h include/piece.h include/coordinate.h include/move.h include/input.h
-OBJ = lib/board.o lib/print.o lib/piece.o lib/coordinate.o lib/move.o lib/input.o
+DEPS = include/types.h include/board.h include/print.h include/piece.h include/coordinate.h include/move.h include/input.h include/game.h
+OBJ = lib/board.o lib/print.o lib/piece.o lib/coordinate.o lib/move.o lib/input.o lib/game.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
diff --git a/include/game.h b/include/game.h
new file mode 100644
index 0000000..61239e7
--- /dev/null
+++ b/include/game.h
@@ -0,0 +1,11 @@
+#ifndef _GAME
+#define _GAME
+
+#include "types.h"
+
+/*
+ * Implements the main game loop. Returns the final state of the board.
+ */
+Board game_loop(Board);
+
+#endif
diff --git a/lib/game.c b/lib/game.c
new file mode 100644
index 0000000..6fcc0c5
--- /dev/null
+++ b/lib/game.c
@@ -0,0 +1,36 @@
+#include <stdio.h>
+
+#include "board.h"
+#include "game.h"
+#include "input.h"
+#include "move.h"
+#include "print.h"
+
+static Color _toggle_current_player(Color c) {
+ if (c == WHITE)
+ return BLACK;
+ else
+ return WHITE;
+}
+
+Board game_loop(Board board) {
+ Board b = board;
+ Color current_player = WHITE;
+ Coord orig, dest;
+
+ while (1) {
+ print_board(b, current_player);
+
+ putchar('\n');
+ if (current_player == WHITE)
+ printf("White's turn. \n");
+ else
+ printf("Black's turn. \n");
+
+ orig = input_orig_coord();
+ dest = input_dest_coord();
+
+ b = board_make_move(b, move_init(orig, dest));
+ current_player = _toggle_current_player(current_player);
+ }
+}
nihil fit ex nihilo