Age | Commit message (Collapse) | Author |
|
This AI will simply pick the first valid move it finds. This is pretty
much the most basic AI that a full game can be played against.
|
|
* free_board should not return anything.
* is_valid_move and has_valid_moves accept a board.
* Implemented primitives for Scheme strategies to get the current
player, and to get the board, and the validity of a move.
* Removed game logic from is_valid_move. Instead simply apply the move
to a temp board, and see if the move worked.
* Created a very simple strategy for testing these primitives. It only
hardcodes the first move, and then fails since that move is no longer
valid.
|
|
Also was able to print the current board from scheme, so we should be
able to do basic analysis at least. Should add more primitives for use
from scheme.
|
|
|
|
This was how it originally was, but I changed it to use a global
variable instead. I want to be able to use the apply_move function in
the is_valid_move implementation, to have all the logic for checking if
a move is valid in one place.
Moved the apply_move function out of board.c, since it no longer
needs a direct reference to the board.
|
|
Also fixed a bug where we could have gone off the upper bounds of the
board.
|
|
|
|
These functions will use the standard get_board and a function for
getting the current player.
|
|
We will use this to load the strategy file for an AI player.
|
|
Instead use the get_board() function to get a reference to the board.
|
|
|
|
|
|
|
|
Useful for creating reproducible build environments
Also bumped guile version to 3.0
Moved stdio.h include above readline includes.
|
|
We will use these values eventually.
|
|
Also removed unused function
|
|
|
|
Also made the apply_move function a bit more efficient, and return true
if the move was valid. This helps because we can simply use the
apply_move function for checking the validity of a move, rather than
having a seperate function do similar logic.
Use readline.h to read input from the user instead of getline. This adds
some quality-of-life improvements.
|
|
If the player is an AI one, it will point to a function that will return
the move from the AI. If the player is a human, it will point to a
function that will prompt the user for input.
|
|
|
|
We are not aiming for high portability with this program. Anywhere that
Guile is available, we should be able to access _GNU_SOURCE extensions.
|
|
Also added a bunch of compiler flags when doing a debug build.
|
|
This makes sure we don't accidentally overrun the board.
Also added a comment as to why we have the if statement in the
check_valid_direction macro.
|
|
|
|
|
|
|
|
|
|
The macro checks for the validity of a move in each direction.
|
|
It already returns 1 for player 1 and 2 for player 2.
|
|
|
|
|
|
|
|
The player_color type already is set to char, but this is a bit clearer
as to what the actual return values are
|
|
We wont need to mutate the board in the print function.
|
|
|
|
|