aboutsummaryrefslogtreecommitdiff
path: root/include/tak.c
diff options
context:
space:
mode:
Diffstat (limited to 'include/tak.c')
-rw-r--r--include/tak.c69
1 files changed, 35 insertions, 34 deletions
diff --git a/include/tak.c b/include/tak.c
index 6059794..1970fca 100644
--- a/include/tak.c
+++ b/include/tak.c
@@ -58,27 +58,27 @@ try_place(const int8_t location, const enum COLOUR colour,
{
// Can't place on an occupied square
if (COUNT_AT(location)) {
- return A_ILLEGAL;
+ return ACT_ILLEGAL;
} else {
switch (stone) {
case STONE_STANDING: ;
case STONE_FLAT: {
if (colour == C_BLACK) {
if (black_flats) black_flats--;
- else return A_ILLEGAL;
+ else return ACT_ILLEGAL;
} else {
if (white_flats) white_flats--;
- else return A_ILLEGAL;
+ else return ACT_ILLEGAL;
}
break;
}
case STONE_CAPSTONE: {
if (colour == C_BLACK) {
if (black_caps) black_caps--;
- else return A_ILLEGAL;
+ else return ACT_ILLEGAL;
} else {
if (white_caps) white_caps--;
- else return A_ILLEGAL;
+ else return ACT_ILLEGAL;
}
break;
}
@@ -86,7 +86,7 @@ try_place(const int8_t location, const enum COLOUR colour,
colours[location] = colour;
celldat[location] = NUM_INC | stone;
- return A_OK;
+ return ACT_OK;
}
}
@@ -112,30 +112,31 @@ enum E_RESULT
try_move(const int8_t location, const enum MOVE_DIRECTION direction,
const uint8_t steps, const uint8_t drops[5]) {
// Can't do this
- if (steps == 0 || steps > 5) return A_ILLEGAL;
+ if (steps == 0 || steps > 5) return ACT_ILLEGAL;
int8_t delta;
// Is the desired direction and count on the board?
switch (direction) {
case M_UP: {
delta = +board_size;
- if (location + delta * steps > board_size * board_size) return A_ILLEGAL;
- else break;
+ if (location + delta * steps > board_size * board_size) return ACT_ILLEGAL;
+ break;
};
case M_DOWN: {
delta = -board_size;
- if (location + delta * steps < 0) return A_ILLEGAL;
- else break;
+ if (location + delta * steps < 0) return ACT_ILLEGAL;
+ break;
};
case M_RIGHT: {
delta = +1;
- if (location + delta * steps > board_size * board_size) return A_ILLEGAL;
- else break;
+ if (location + delta * steps > board_size * board_size) return ACT_ILLEGAL;
+ break;
};
+ default: // Why do i need this to satisfy GCC?
case M_LEFT: {
delta = -1;
- if (location + delta * steps < 0) return A_ILLEGAL;
- else break;
+ if (location + delta * steps < 0) return ACT_ILLEGAL;
+ break;
};
};
@@ -144,16 +145,16 @@ try_move(const int8_t location, const enum MOVE_DIRECTION direction,
for (uint8_t k = 0; k < steps; k++) {
// Can't drop 0 anywhere because we're past the first square
if (drops[k] == 0)
- return A_ILLEGAL;
+ return ACT_ILLEGAL;
// Can't drop more than BOARD_SIZE stones in a square
if (drops[k] > board_size)
- return A_ILLEGAL;
+ return ACT_ILLEGAL;
// Check for overflows
if (COUNT_AT(location+(k+1)*delta) + drops[k] > 0x0F)
- return A_OVERFLOW;
+ return ACT_OVERFLOW;
// Check for capstone
if (STONE_AT(location+(k+1)*delta) == STONE_CAPSTONE)
- return A_ILLEGAL;
+ return ACT_ILLEGAL;
// Check for wall
if ( (STONE_AT(location+(k+1)*delta) == STONE_STANDING)
// If not last drop, or not dropping just one, or not a cap
@@ -161,13 +162,13 @@ try_move(const int8_t location, const enum MOVE_DIRECTION direction,
|| (drops[k] != 1)
|| (STONE_AT(location) != STONE_CAPSTONE) )
)
- return A_ILLEGAL;
+ return ACT_ILLEGAL;
total += drops[k];
}
// Can't ask to move more than BOARD_SIZE or stones available
if ( (total > board_size) || (total > COUNT_AT(location)) )
- return A_ILLEGAL;
+ return ACT_ILLEGAL;
// Nothing illegal, do it
uint8_t j = total;
@@ -181,7 +182,7 @@ try_move(const int8_t location, const enum MOVE_DIRECTION direction,
drop_stones(location, total);
- return A_OK;
+ return ACT_OK;
}
// -------------------------------------------------------------------
@@ -189,7 +190,7 @@ try_move(const int8_t location, const enum MOVE_DIRECTION direction,
static uint8_t
board_full(void) {
- for (uint8_t k; k < board_size*board_size; k++) {
+ for (uint8_t k = 0; k < board_size*board_size; k++) {
if (COUNT_AT(k) == 0) return 0;
}
return 1;
@@ -247,7 +248,7 @@ check_road_colour(const enum COLOUR colour) {
// colour COLOUR.
const enum E_RESULT winner =
- (colour == C_BLACK) ? W_ROAD_BLACK : W_ROAD_WHITE;
+ (colour == C_BLACK) ? WIN_ROAD_BLACK : WIN_ROAD_WHITE;
// First left-to-right
for (uint8_t y=0; y<board_size; y++) {
@@ -267,7 +268,7 @@ check_road_colour(const enum COLOUR colour) {
}
if (dfs_road(dfs_stack, dfs_pntr, colour, 1)) return winner;
- return W_NONE;
+ return WIN_NONE;
}
enum E_RESULT
@@ -281,11 +282,11 @@ check_win(void) {
}
}
if (total > 0) {
- return W_FLAT_BLACK;
+ return WIN_FLAT_BLACK;
} else if (total < 0) {
- return W_FLAT_WHITE;
+ return WIN_FLAT_WHITE;
} else {
- return W_DRAW;
+ return WIN_DRAW;
}
}
@@ -303,11 +304,11 @@ check_win(void) {
rb = check_road_colour(C_BLACK);
rw = check_road_colour(C_WHITE);
- if (rb == W_ROAD_BLACK) {
- if (rw == W_ROAD_WHITE) {
- return W_DRAGON;
+ if (rb == WIN_ROAD_BLACK) {
+ if (rw == WIN_ROAD_WHITE) {
+ return WIN_DRAGON;
} else {
- return W_ROAD_BLACK;
+ return WIN_ROAD_BLACK;
}
} else {
return rw;
@@ -496,7 +497,7 @@ do_ptn(char *ptn) {
res = parse_move(board_size, ptn, &location,
&direction, &steps, drops);
if (res == PTN_VALID) {
- if (turn < 2) return A_ILLEGAL;
+ if (turn < 2) return ACT_ILLEGAL;
res = try_move(location, direction, steps, drops);
}
} else {
@@ -506,7 +507,7 @@ do_ptn(char *ptn) {
res = try_place(location, current_colour, stone);
}
- if (res == A_OK) {
+ if (res == ACT_OK) {
next_turn();
if (turn > 1) return check_win();
}