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%