2024-05-30 01:26:41 +00:00
|
|
|
(local neighbors
|
|
|
|
[
|
|
|
|
[1 2 10]
|
|
|
|
[2 1 3 5]
|
|
|
|
[3 2 15]
|
|
|
|
[4 5 11]
|
|
|
|
[5 2 4 6 8]
|
|
|
|
[6 5 14]
|
|
|
|
[7 8 12]
|
|
|
|
[8 5 7 9]
|
|
|
|
[9 8 13]
|
|
|
|
[10 1 11 22]
|
|
|
|
[11 4 10 12 19]
|
|
|
|
[12 7 11 16]
|
|
|
|
[13 9 14 18]
|
|
|
|
[14 6 13 15 21]
|
|
|
|
[15 3 14 24]
|
|
|
|
[16 12 17]
|
|
|
|
[17 16 18 20]
|
|
|
|
[18 13 17]
|
|
|
|
[19 11 20]
|
|
|
|
[20 17 19 21 23]
|
|
|
|
[21 14 20]
|
|
|
|
[22 10 23]
|
|
|
|
[23 20 22 24]
|
|
|
|
[24 15 23]
|
|
|
|
])
|
|
|
|
|
|
|
|
(local mills
|
|
|
|
[
|
|
|
|
[1 2 3]
|
|
|
|
[4 5 6]
|
|
|
|
[7 8 9]
|
|
|
|
[10 11 12]
|
|
|
|
[13 14 15]
|
|
|
|
[16 17 18]
|
|
|
|
[19 20 21]
|
|
|
|
[22 23 24]
|
|
|
|
[1 10 22]
|
|
|
|
[4 11 19]
|
|
|
|
[7 12 16]
|
|
|
|
[2 5 8]
|
|
|
|
[17 20 23]
|
|
|
|
[9 13 18]
|
|
|
|
[6 14 21]
|
|
|
|
[3 15 24]
|
|
|
|
])
|
|
|
|
|
|
|
|
; these are the only moves that are valid
|
|
|
|
; i am somewhat bothered by all the wasted space
|
|
|
|
; by 2-3A and 5-6A e.g.
|
|
|
|
; Incidentally these are all in order of appearance
|
|
|
|
; so when you find a match,
|
|
|
|
; you can also update that index of `moves` to the current player number
|
|
|
|
(local spaces [
|
|
|
|
"1A" "4A" "7A"
|
|
|
|
"2B" "4B" "6B"
|
|
|
|
"3C" "4C" "5C"
|
|
|
|
"1D" "2D" "3D"
|
|
|
|
"5D" "6D" "7D"
|
|
|
|
"3E" "4E" "5E"
|
|
|
|
"2F" "4F" "6F"
|
|
|
|
"1G" "4G" "7G"
|
|
|
|
])
|
|
|
|
|
|
|
|
; This is what the game board looks like
|
|
|
|
; it's also used to display the state of the game
|
|
|
|
; the Xs are converted to "%d" later for string templating
|
|
|
|
; they are Xs here so that it looks pretty =)
|
|
|
|
(local board [
|
|
|
|
" 1 2 3 4 5 6 7"
|
|
|
|
"A x-----x-----x" ;; 1 2 3
|
|
|
|
" | | |" ;;
|
|
|
|
"B | x---x---x |" ;; 4 5 6
|
|
|
|
" | | | | |" ;;
|
|
|
|
"C | | x-x-x | |" ;; 7 8 9
|
|
|
|
" | | | | | |" ;;
|
|
|
|
"D x-x-x x-x-x" ;; 10 11 12 13 14 15
|
|
|
|
" | | | | | |" ;;
|
|
|
|
"E | | x-x-x | |" ;; 16 17 18
|
|
|
|
" | | | | |" ;;
|
|
|
|
"F | x---x---x |" ;; 19 20 21
|
|
|
|
" | | |" ;;
|
|
|
|
"G x-----x-----x" ;; 22 23 24
|
|
|
|
])
|
|
|
|
|
2024-06-20 15:17:06 +00:00
|
|
|
|
|
|
|
;; there are three phases of play:
|
|
|
|
;; placing, moving, and flying.
|
|
|
|
;; (plus one for capturing)
|
|
|
|
;; (plus one for game-over)
|
|
|
|
(local stages {
|
|
|
|
:placing 1 ;; placing the cows
|
|
|
|
:moving 2 ;; moving the cows
|
|
|
|
:flying 3 ;; flying the cows
|
|
|
|
:capture 4 ;; capture a cow (we do not shoot cows)
|
|
|
|
:complete 5 ;; no more cows! jk the cows are fine. the game's just over okay
|
|
|
|
})
|
|
|
|
|
2024-06-23 21:41:31 +00:00
|
|
|
|
|
|
|
;; errror codes
|
|
|
|
(local errors {
|
|
|
|
:not-a-space "That space does not exist!\nHint: 1a 1A A1 a1 are all the same move."
|
|
|
|
:occupied "That space is occupied!"
|
|
|
|
:not-an-opponent "Choose an opponent's piece to remove."
|
|
|
|
:is-mill "Ma'am, it is ILLEGAL to break up a mill."
|
|
|
|
:bad-move-format "Try a move like B2B4 or A7 D7"
|
|
|
|
:not-yours "That's not yours, don't touch it."
|
|
|
|
:not-neighbor "That ain't your neighbor, Johnny"
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
;; if you like it then you shoulda put a ...
|
|
|
|
(local rings {
|
|
|
|
:outer [ 1 2 3 15 24 23 22 10 ]
|
|
|
|
:middle [ 4 5 6 14 21 20 19 11 ]
|
|
|
|
:inner [ 7 8 9 13 18 17 16 12 ]
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
: board
|
|
|
|
: errors
|
2024-05-30 01:26:41 +00:00
|
|
|
: mills
|
|
|
|
: neighbors
|
2024-06-23 21:41:31 +00:00
|
|
|
: rings
|
|
|
|
: spaces
|
2024-06-20 15:17:06 +00:00
|
|
|
: stages
|
2024-06-23 21:41:31 +00:00
|
|
|
}
|