IF Key$ = "q" THEN PRINT "Увы...": EXIT DO
'выход по команде играющего SELECT CASE MID$ (Key$ , 2)
'вычисление направления сдвига CASE "P": MD = -4 CASE "M": MD = -I CASE "К": MD = 1 CASE "H": MD = 4 CASE ELSE: MD = 0 END SELECT
Определяются индексы переставляемых чисел, в случае некорректности выдается звуковой сигнал. При корректной команде производится перестановка чисел в массиве и вывод изменения содержимого массива на дисплей.
IC = 0: DO WHILE Sqrs(IC): IC = IC + 1: LOOP
'поиск пустышки JC = IC + MD IF JC < 0 OR JC > 15 OR ABS (MD) = ABS (JC \ 4 - IC \ 4) THEN
BEEP 'сигнал о некорректном направлении ELSE
GOSUB ChSqrs 'изменение состояния модели I = IC: GOSUB ShSqr
I = JC: GOSUB ShSqr
В конце цикла производится проверка решения задачи и в случае успеха исполняется команда выхода из цикла игры.
GOSUB Mesh 'проверка условия выигрыша IF MC = О THEN LOCATE 21
PRINT "Ура! Вы выиграли!!!" EXIT DO END IF END I?
LOOP 'конец цикла игры SLEEP 1 END
Вы уже конечно заметили, что основная программа обращается к трем подпрограммам. Они очень простые и потому приводятся ниже без объяснений.
Первая подпрограмма по заданному значению индекса выводит код фишки на место ее отображения на дисплее. ShSqr: 'показ номера фишки
К= (1\4) *2+2
L = (I MOD 4) * 5 + 3
MJ = Sqrs(I)
LOCATE К, L
IF MJ > 0 THEN PRINT USING "##"; MJ; ELSE PRINT " ";
RETURN
Вторая подпрограмма по заданным индексам производит обмен двух чисел в массиве. ChSqrs: 'сдвиг фишки в массиве
Тетр% = Sqrs(IC): Sqrs(IC) = Sqrs<JC): Sqrs(JC) = Temp%