Игра пятнашки на Гиспе
2025-11-09 22:17Взял исходники игры 15 puzzle game на языке Scheme с rosettacode и перепёр на Gisp. Вроде ясный и понятный код получается. Всё в 200 строчек уложилось.
Поиграем. В качестве хода надо вводить слова up/down/left/right.
Мне с молодости импонировал Лисп (и Scheme) своим изяществом. Когда-то я даже стряпал эспериментальные реализации. Но глядеть на код со скобочками мало удовольствия. С удобным синтаксисом получается совсем другая песня.
func playGame() {
var board = createStartPosition()
var movesTaken = 0
while true {
if finished(board) {
newline()
display("COMPLETED PUZZLE in ")
display(movesTaken)
display(" moves\n")
return
}
displayBoard(board)
var moves = findMoves(board)
display("Enter a move: ")
display(moves)
newline()
var move = read()
if moveAllowed(moves, move) {
makeMove(board, move)
movesTaken = movesTaken + 1
} else {
display("Invalid move - try again\n")
}
}
}
Весь текст: puzzle15.gispПоиграем. В качестве хода надо вводить слова up/down/left/right.
Полный протокол здесь: gist.github.com/sergev/2f8a65b7a11ea23a1693346a68a065d0$ gisp puzzle15.gisp
7 3 4
2 11 8 12
1 13 6 15
5 9 14 10
Enter a move: (down right)
down
2 7 3 4
11 8 12
1 13 6 15
5 9 14 10
Enter a move: (up down right)
down
2 7 3 4
1 11 8 12
13 6 15
5 9 14 10
Enter a move: (up down right)
right
...
1 2 3 4
5 6 7 8
9 10 11
13 14 15 12
Enter a move: (up down left)
down
COMPLETED PUZZLE in 50 moves
Мне с молодости импонировал Лисп (и Scheme) своим изяществом. Когда-то я даже стряпал эспериментальные реализации. Но глядеть на код со скобочками мало удовольствия. С удобным синтаксисом получается совсем другая песня.
