Игра "15" |
Главная / ЭКВМ / Программы для ЭКВМ / Игры |
Игра "Пятнадцать" - известная игра с пятнадцатью пронумерованными фишками на шестнадцатиклеточном поле 4x4. Цель игры - расставить фишки в указанном ниже порядке за минимальное количество ходов.
ЗапускПрограмма загружается в память с нулевой страницы и запускается командами "В/О", "С/П". После запуска на экране появляется игровое поле, на котором автоматически перемещаются фишки. Через некоторое время перемещение заканчивается - можно приступать к игре.
Управление
Программа "Пятнадцать"Файл game15.mkp, v1.2 (КС 74596/119)
Исходный текст для кросс-компилятораФайл game15.mkl, v1.2 .CHARSET 1251 ; Файл game15 - Игра 15 для ЭКВМ ; V1.2 (21.06.2010) НПП "СЕМИКО" ; R11-R44 - поле (начиная с RB), заполнено числами от 0 до 15 ; Соответствие клеток и регистров: ; 11 12 13 14 ; 21 22 23 24 ; 31 32 33 34 ; 41 42 43 44 ; RA - текущая позиция 0 (пустой ячейки) ; R9 - позиция для обмена с 0 ; R8 - позиция для обмена при перемешивании ; R7=15 ; R6=0,4 ; R5=0,2 ; R4 - счётчик шагов ; R3=10 ; используются R0, R1 .ORG 0 CX PM 44 ; начальная позиция 0 - 44 2 MC ; 2 - 12 PP M 9010 ; инициализация экрана в режиме 2 ; константы 10 M3 PM 32 15 M7 PM 43 0,4 M6 0,2 M5 ; начальная расстановка, кроме ранее инициализированных 12, 32, 43, 44 1 MB 3 MD 4 ME 5 PM 21 6 PM 22 7 PM 23 8 PM 24 9 PM 31 11 PM 33 12 PM 34 13 PM 41 14 PM 42 44 MA P GSB MIX CX M4 ; обнулить счётчик шагов ML0: PP RM 9029 ; считать кнопку M1 KNOT ; инвертировать код FX!=0 ML0 ; зациклить RM1 P GSB S_K ; обработать код FX=0 ML0 ; нет перемещения KRM4 ; инкремент счётчика шагов 16 ENT 90 PP M 9000 RM4 PP M 9023 ; вывод счётчика KGRPH GOTO ML0; ; перемещение фишки вверх S_U: RMA 35 - FX>=0 S_U1 1 RTN S_U1: RMA RM3 + M9 ; +=10 KRM9 KMA CX KM9 RTN ; перемещение фишки вниз S_D: RMA RM7 - ; -=15 FX<0 S_D1 1 RTN S_D1: RMA RM3 - M9 ; -=10 KRM9 KMA CX KM9 RTN ; перемещение фишки влево S_L: RMA RM3 / KFRAC ; /=10 RM6 - ; -=0,4 FX>=0 S_L1 1 RTN S_L1: RMA 1 + M9 KRM9 KMA CX KM9 RTN ; перемещение фишки вправо S_R: RMA RM3 / KFRAC ; /=10 RM5 - ; -=0,2 FX<0 S_R1 1 RTN S_R1: RMA 1 - M9 KRM9 KMA CX KM9 RTN ;Координаты ячейки RX (11..44) вычислить и записать в X0,Y0 S_XY: RM3 / ENT ; /=10 KINT RM7 * ; *=15 13 - ; смещение поля по Y <-> KFRAC 150 * 13 - ; смещение поля по X PP M 9000 RTN ; Отрисовка фишки RX по заранее определённым координатам X0,Y0 S_P: 32 * ; умножить на размер изображения .NUM PICT + ; смещение изображений фишек PP M 9015 ; вывести RTN ; вывод изображений по R9 и RA ; временно: после успешного перемещения в R9 - координаты 0, в RA - передвинутой фишки S_I: RM9 P GSB S_XY CX P GSB S_P RMA P GSB S_XY KRMA ; номер фишки P GSB S_P RM9 MA ; переместить адрес 0 из R9 в RA RTN ; перемещение, в RX - код клавиши S_K: 34 - FX<0 S_K2 S_K1: 1 RTN S_K2: FX=0 S_K3 P GSB S_R ; ==34 GOTO S_KI S_K3: 1 - FX=0 S_K4 P GSB S_L ; ==35 GOTO S_KI S_K4: 1 - FX=0 S_K5 P GSB S_U ; ==36 GOTO S_KI S_K5: 1 - FX=0 S_K1 P GSB S_D ; ==37 GOTO S_KI S_KI: FX=0 S_K1 ; если нельзя переместить, то к S_K1 P GSB S_I ; после успешного перемещения отрисовать фишку K GRPH ; вывести на графический экран CX RTN MIX: ; начальная отрисовка поля CX ENT PP M 9000 ; X0,Y0 63 ENT PP M 9014 ; рамка 2 ENT 70 PP M 9000 .NUM TXT1 PP M 9021 ; вывод названия игры 16 ENT 70 PP M 9000 .NUM TXT2 PP M 9021 ; шаг 15 M0 ; перемешивание .NUM REG M1 MIX0: RM1 RM0 + KPRGM M9 RM1 RM0 1 - KRAN * KINT + 1 + KPRGM M8 KRM8 KRM9 KM8 <-> KM9 FL0 MIX0 16 M0 ; вывод MIX1: RM1 RM0 + KPRGM M9 P GSB S_XY KRM9 P GSB S_P FL0 MIX1 K GRPH RTN REG: .DB 0,11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44 TXT1: .TEXT "Игра \"15\"\0" TXT2: .TEXT "Шаг\0" PICT: ;"0" .DB 0Fh, 0Fh .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 .DB 0, 0 ;"1" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"2" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 21h, 23h .DB 91h, 22h .DB 91h, 22h .DB 91h, 22h .DB 61h, 22h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"3" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 21h, 21h .DB 11h, 22h .DB 11h, 22h .DB 51h, 22h .DB 0A1h, 21h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"4" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 81h, 21h .DB 41h, 21h .DB 21h, 21h .DB 0F1h, 23h .DB 1, 21h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"5" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 71h, 21h .DB 51h, 22h .DB 51h, 22h .DB 51h, 22h .DB 91h, 21h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"6" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 0E1h, 21h .DB 51h, 22h .DB 51h, 22h .DB 51h, 22h .DB 81h, 21h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"7" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 11h, 20h .DB 11h, 23h .DB 91h, 20h .DB 51h, 20h .DB 31h, 20h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"8" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 0A1h, 21h .DB 51h, 22h .DB 51h, 22h .DB 51h, 22h .DB 0A1h, 21h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"9" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 1, 20h .DB 1, 20h .DB 61h, 20h .DB 91h, 22h .DB 91h, 22h .DB 91h, 22h .DB 0E1h, 21h .DB 1, 20h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"10" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 0E1h, 21h .DB 11h, 22h .DB 11h, 22h .DB 11h, 22h .DB 0E1h, 21h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"11" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"12" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 21h, 23h .DB 91h, 22h .DB 91h, 22h .DB 91h, 22h .DB 61h, 22h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"13" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 21h, 21h .DB 11h, 22h .DB 11h, 22h .DB 51h, 22h .DB 0A1h, 21h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ;"14" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 81h, 21h .DB 41h, 21h .DB 21h, 21h .DB 0F1h, 23h .DB 1, 21h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 ; "15" .DB 0Fh, 0Fh .DB 0FEh, 1Fh .DB 3, 30h .DB 1, 20h .DB 21h, 22h .DB 0F1h, 23h .DB 1, 22h .DB 1, 20h .DB 71h, 21h .DB 51h, 22h .DB 51h, 22h .DB 51h, 22h .DB 91h, 21h .DB 3, 30h .DB 0FEh, 1Fh .DB 0, 0 .END ВерсииV1.0 (11.06.10) - первая версия. V1.1 (12.06.10) - изменён алгоритм перемешивания, уменьшено количество возвратов. V1.2 (21.06.10) - для ускорения работы программы алгоритм перемешивания заменён на оптимальный. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |