aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2025-02-24Make suit->int and int->suit complete inversesAryadev Chavali
2025-02-22Extract error generation from `player-exists?` to ensure it's an indicatorAryadev Chavali
2025-02-22Make card a structureAryadev Chavali
Card is a structure instead of just a type. Stronger type checking, automatic constructor, destructors and existence check.
2025-02-15Rework player package to use structures and a hash tableAryadev Chavali
Instead of an association list and a type contract, let's use a hash table and a structure. This is: more explicit, encapsulates state more effectively, generates much of the cruft (constructors, destructors) for me. A hash table is more efficient when considering large player bases. In particular, we'll be generating unique player IDs to make it a bit more difficult for a malicious agent to guess another player's ID and make bad requests.
2025-02-15Clean up player-{pay,receive}Aryadev Chavali
Clean up the implementation of player-pay and player-receive by: - Single-clause early-error `if` for errors - use `incf`/`decf` instead of `setf`.
2025-02-15Introduce custom errors for player handlingAryadev Chavali
Custom errors for malformed/nonexistent player IDs as well as a player not having a high enough balance for the money requested. This will allow me to encode more information in the errors, for callers to use. I'm generally of the opinion that callers should be checking error conditions before calling these functions, but per Murphy's law it would be nice to have more information in the error message.
2025-02-15Player handler packageAryadev Chavali
This package defines a player data structure, collections of players, and different interactions you can have with them: - Extracting attributes (destructors) - Checking if they're bankrupt or can bet - Modifying a collection to adjust the balance of any one player (including errors in case that isn't possible)
2025-02-15Small changesAryadev Chavali
2025-02-15Rework `$` operator to take a capture variableAryadev Chavali
In case operators require use of a variable, we should let the caller provide the symbol so we don't fall into weird package issues.
2025-02-14Implement read-and-confirm for extra step before re-dealAryadev Chavali
Found that I sometimes did a misinput which lead to losing a critical card - implemented a function which asks for confirmation (with a print out of the cards that will be redealt) before doing the redeal.
2025-02-14Rework cantedraw.main:start to run a read-redeal-print-loopAryadev Chavali
We've now got one of the major stages of the game down. I think it's worth investing in some testing functions now - we've reached just the level of complexity.
2025-02-14Implement a read -> redeal -> print loopAryadev Chavali
Like REPL stands for Read -> Evaluate -> Print -> Loop, here we implement a similar loop which reads a set of indices for cards to remove from the user, redeals those cards then loops back. This keeps happening until either: - the user does not want to redeal (empty input) - there aren't enough cards for a redeal
2025-02-14Fix problem with alexandria:shuffle not being truly randomAryadev Chavali
Due to the way random works, we need to see it on each run of the binary - thus need to make a new random state.
2025-02-14Rework read-until-valid-integers to work better for redeal inputsAryadev Chavali
A player may: - not redeal any cards - redeal all their cards Therefore the indices must be between 0,5 and there can be at most 5 inputs.
2025-02-14Rework card< comparator to make Jokers the top of the hierarchyAryadev Chavali
2025-02-14Implement a package for some game mechanicsAryadev Chavali
Currently can deal some hands and redeal some cards.
2025-02-14Split source code into different modules for cleanlinessAryadev Chavali