9mm/lib/constants.fnl

130 lines
2.6 KiB
Fennel

(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
])
;; 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
})
;; 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
: mills
: neighbors
: rings
: spaces
: stages
}