X-Git-Url: https://git.draconx.ca/gitweb/rrace.git/blobdiff_plain/48cf657b615567153e5ed786b6034f9b46733f9a..777611df8df4522752b3a85a14523f18bf695a0f:/src/game.c?ds=sidebyside diff --git a/src/game.c b/src/game.c index 999d526..47adc9f 100644 --- a/src/game.c +++ b/src/game.c @@ -168,6 +168,33 @@ void game_reset(struct board *board) board->y = y; } } + +/* Uncomment to make every game stupidly easy -- winnable in 1 move */ +#if 0 + /* Force empty space to the border */ + if (board_position(board->x, board->y) & GOAL_MASK) { + switch (rng_uniform_int(4)) { + case 0: game_do_move(board, board->x, 0); break; + case 1: game_do_move(board, board->x, 4); break; + case 2: game_do_move(board, 0, board->y); break; + case 3: game_do_move(board, 4, board->y); break; + } + } + + /* Force goal to match the current board */ + for (i = 0; i < 3; i++) { + board->goal[i] = (board->game[i] & GOAL_MASK) >> GOAL_SHIFT; + } + + /* Move empty space back to the centre */ + if (board->x == 0 || board->x == 4) { + game_do_move(board, 1+rng_uniform_int(3), board->y); + } + + if (board->y == 0 || board->y == 4) { + game_do_move(board, board->x, 1+rng_uniform_int(3)); + } +#endif } uint_fast32_t game_do_move(struct board *board, int x, int y) @@ -209,8 +236,8 @@ uint_fast32_t game_check_goal(struct board *board) int i; for (i = 0; i < 3; i++) - mask |= goal[i] ^ (game[i] >> GOAL_SHIFT); - return (mask << GOAL_SHIFT) & GOAL_MASK; + mask |= game[i] ^ ((0ul+goal[i]) << GOAL_SHIFT); + return mask & GOAL_MASK; } void game_begin(struct board *board) @@ -218,14 +245,14 @@ void game_begin(struct board *board) board->time_start = gethrxtime(); } -static int_fast32_t elapsed(struct board *board) +int_fast32_t game_elapsed(struct board *board) { return (gethrxtime() - board->time_start) / 1000000; } int_fast32_t game_finish(struct board *board) { - int_fast32_t t = elapsed(board); + int_fast32_t t = game_elapsed(board); int i; for (i = 0; i < 4; i++) {