From 9bf31e86cef62bed76a35353e791768960b14d70 Mon Sep 17 00:00:00 2001 From: dozens Date: Sun, 23 Jun 2024 15:41:31 -0600 Subject: Move error handling to front-end game.validate-move will now return an error code is the move is invalid. default error messages are found in lib/constants.fnl. error handling is now handled on the front end. --- src/game.fnl | 53 ++++++++++++++++++++--------------------------------- 1 file changed, 20 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/game.fnl b/src/game.fnl index b48a6ac..4a24ce2 100644 --- a/src/game.fnl +++ b/src/game.fnl @@ -4,15 +4,15 @@ } (require :lib.index)) (local { : all-mills? - :mill-at? mill-at-maker - :no-moves? no-moves-maker - :space-is-neighbor? space-is-neighbor-maker + :mill-at? full-mill-at ;; stay with me... + :no-moves? full-no-moves + :space-is-neighbor? full-space-is-neighbor } (require :lib.game.index)) (local const (require :lib.constants)) -;; front-loading with some partials -(local mill-at? (partial mill-at-maker const.mills)) -(local space-is-neighbor? (partial space-is-neighbor-maker const.neighbors)) -(local no-moves? (partial no-moves-maker const.neighbors)) +;; front-loading the "fulls" with some partials +(local mill-at? (partial full-mill-at const.mills)) +(local space-is-neighbor? (partial full-space-is-neighbor const.neighbors)) +(local no-moves? (partial full-no-moves const.neighbors)) ;; story mode: @@ -124,8 +124,7 @@ ; 2 = Player 2 ; NOTE: I think it might be a good idea to make moves ; a list of moves. so that there can be undo and history - (set self.moves (fcollect [i 1 24] 0)) - ) + (set self.moves (fcollect [i 1 24] 0))) }) @@ -164,40 +163,28 @@ ; is this a legal move? +; note: string argument to assert funs are defined in /lib/constants (fn valid-move? [move] (or (and (= const.stages.placing game.stage) - (or (space-exists? move) - (print "That space does not exist!\nHint: 1a 1A A1 a1 are all the same move.")) - (or (space-is-unoccupied? move) - (print "That space is occupied!"))) + (assert (space-exists? move) :not-a-space) + (assert (space-is-unoccupied? move) :occupied)) (and (= const.stages.capture game.stage) - (or (space-is-occupied-by-opponent? move) - (print "Choose an opponent's piece to remove.")) - (or (or (all-mills? game.moves game.player) - (not (mill-at? game.moves (index-of-move move)))) - (print "Ma'am, it is ILLEGAL to break up a mill.") - )) + (assert (space-is-occupied-by-opponent? move) :not-an-opponent) + (assert (or (all-mills? game.moves game.player) (not (mill-at? game.moves (index-of-move move)))) :is-mill)) (and (= const.stages.moving game.stage) - (or (moving-format? move) - (print "Try a move like A1A2 or A7 D7")) - (or (not (space-is-occupied-by-opponent? (string.sub move 1 2))) - (print "That's not yours, don't touch it.")) - (or (space-is-unoccupied? (string.sub move -2 -1)) - (print "That space is occupied!")) - (or (space-is-neighbor? (index-of-move (string.sub move 1 2)) (index-of-move (string.sub move -2 -1))) - (print "That ain't your neighbor, Johnny")) ) + (assert (moving-format? move) :bad-move-format) + (assert (not (space-is-occupied-by-opponent? (string.sub move 1 2))) :not-yours) + (assert (space-is-unoccupied? (string.sub move -2 -1)) :occupied) + (assert (space-is-neighbor? (index-of-move (string.sub move 1 2)) (index-of-move (string.sub move -2 -1))) :not-neighbor) ) (and (= const.stages.flying game.stage) - (or (moving-format? move) - (print "Try a move like A1A2 or A7 D7")) - (or (not (space-is-occupied-by-opponent? (string.sub move 1 2))) - (print "That's not yours, don't touch it.")) - (or (space-is-unoccupied? (string.sub move -2 -1)) - (print "That space is occupied!"))))) + (assert (moving-format? move) :bad-move-format) + (assert (not (space-is-occupied-by-opponent? (string.sub move 1 2))) :not-yours) + (assert (space-is-unoccupied? (string.sub move -2 -1)) :occupied)))) (tset game :validate-move valid-move?) -- cgit 1.4.1-2-gfad0