
Слово muffe — как оказалось с немецкого это муфта. Но придумывалось как исковерканное слово move и coffee.
В игре присутствуют отличия от оригинальной игры 2048.
Так как алгоритм разрабатывал вслепую. Тыкал и смотрел что выходит. Пытался повторить это в командной строке cmd batch-файлом.
1. не меняется цвет ячеек. Понял как это сделать. Но еще не реализовал эту возможность.
Можно с помощью FINDSTR или сторонней DOS утилиты.
2. отсутствует анимация.
Поправил графическое отображение. Оказывается в FAR можно добавлять символы псевдографики. А то я до этого набирал текст, в Блокноте
Поправил синтаксис. Использовал кое, что из батника созданного AAbrosov
Теперь управляющие батники стали в 4 раза короче.
Перемещение и сложение выделил в отдельные файлы, которые вызываю при помощи CALL.
На каждое направление свой отдельный файл.
WASD — выбираем направление, стрелочки так и не получилось заставить.
X — выход из игры в любой момент, если только не зависла. Тогда можно просто закрыть окно cmd.
R — начать заново, в любой момент.
Сам не программист, и наверно допустил много глупостей. Но главное что работает. На все это потратил уже 4 недели. Вдумчиво рассматривал исходный код странички coffee2048.com, мало чего понял. За то упорно изучал командную строку и создание батников. Мне еще на первом компе 386 нравилось писать autoexec.bat и config.sys для запуска игр. Иногда этот процесс был интересней самой игры. Еще вдохновился шуткой от Microsoft на 1 апреля. MS-DOS для Windows Phone там понравилась камера и танцы с бубном, что бы запустить игру «камень-ножницы-бумага». Cortana прикольно помогает.
Были проблемы с dynamic variable. сначала нужно было понять, что это такое и с чем это едят, а потом найти как это можно использовать в cmd. Еще были проблемы с IF. Как оказалось туда можно вставлять только дно действие. Пришлось использовать GOTO. Не получилось использовать цикл FOR. Вышел из ситуации с помощью IF и GOTO.
Для управление в игре использовал команду CHOICE. Пока искал как отдавать команды игре, наткнулся на игру змейку тоже в батнике. Там управление передавалось через SET /P но я так и не понял как вводить буквы и не нажимать после этого ВВОД. Остановился на CHOICE. Хотя мне не нравится то что эта команда пищит, иногда очень громко, если нажата клавиша которая не обозначена в «choice /C wasdxr /N >nul».
содержимое батника muffe9.bat
@echo off title muffe (Game 2048 for Command prompt) if not exist muffe_BestSc.txt echo 0>muffe_BestSc.txt (set /p BestSc=)<muffe_BestSc.txt set BestSc=%BestSc: =% :Begin1 cls SETLOCAL ENABLEDELAYEDEXPANSION set "echo2=echo ЪДДДДїЪДДДДїЪДДДДїЪДДДДї" set "echo3=echo АДДДДЩАДДДДЩАДДДДЩАДДДДЩ" set contor=0 ::::::::::::::::::::::::::::::::::::::::::::::::: set contentR11=0 set contentR12=0 set contentR13=0 set contentR14=0 set contentR21=0 set contentR22=0 set contentR23=0 set contentR24=0 set contentR31=0 set contentR32=0 set contentR33=0 set contentR34=0 set contentR41=0 set contentR42=0 set contentR43=0 set contentR44=0 ::::::::::::::::::::::::::::::::::::::::::::::::: set /a "X=%RANDOM% * 100 / 32768 + 1" if [%X%] LEQ [90] set cell=2 if [%X%] GEQ [91] set cell=4 ::::::::::::::::::::::::::::::::::::::::::::::::: set /a "X=%RANDOM% * 4 / 32768 + 1" set /a "Y=%RANDOM% * 4 / 32768 + 1" set contentR%Y%%X%=%cell% set "content%Y%%X%= %cell%" set exitC=0 ::::::::::::::::::::::::::::::::::::::::::::::::: if [%contentR11%] == [0] (set "content11= ") if [%contentR12%] == [0] (set "content12= ") if [%contentR13%] == [0] (set "content13= ") if [%contentR14%] == [0] (set "content14= ") if [%contentR21%] == [0] (set "content21= ") if [%contentR22%] == [0] (set "content22= ") if [%contentR23%] == [0] (set "content23= ") if [%contentR24%] == [0] (set "content24= ") if [%contentR31%] == [0] (set "content31= ") if [%contentR32%] == [0] (set "content32= ") if [%contentR33%] == [0] (set "content33= ") if [%contentR34%] == [0] (set "content34= ") if [%contentR41%] == [0] (set "content41= ") if [%contentR42%] == [0] (set "content42= ") if [%contentR43%] == [0] (set "content43= ") if [%contentR44%] == [0] (set "content44= ") set version=1 :Direction :::::::::::::::::::::::::::::::::::::::: set exitC=0 :Rand set /a "exitC+=1" if [%exitC%] == [60] (goto Exit1) set /a "X=%RANDOM% * 100 / 32768 + 1" if [%X%] LEQ [90] set cell=2 if [%X%] GEQ [91] set cell=4 set /a "X=%RANDOM% * 4 / 32768 + 1" set /a "Y=%RANDOM% * 4 / 32768 + 1" set name=contentR%Y%%X% if [!%name%!] == [0] (set %name%=%cell% ) else (goto Rand) set "content%Y%%X%= %cell%" if [%version%] == [0] goto Anulare :::::::::::::::::::::::::::::::::::::::: if %contor% GTR %BestSc% set BestSc=%contor% :Cls1 cls %echo2% echo і%content11%іі%content12%іі%content13%іі%content14%і Score = %contor% %echo3% %echo2% echo і%content21%іі%content22%іі%content23%іі%content24%і %echo3% %echo2% echo і%content31%іі%content32%іі%content33%іі%content34%і %echo3% %echo2% echo і%content41%іі%content42%іі%content43%іі%content44%і BestS = %BestSc% %echo3% echo( echo WASD or X or R choice /C wasdxr /N >nul if errorlevel 6 (goto Begin1) if errorlevel 5 (goto Exit1) if errorlevel 4 (goto D4) if errorlevel 3 (goto S3) if errorlevel 2 (goto Aa2) if errorlevel 1 (goto W1) if errorlevel 0 (goto Direction) ::::::::::::::::::::::::::::::::::::::::: :D4 call muffe_D4.bat goto Direction :S3 call muffe_S3.bat goto Direction :Aa2 call muffe_Aa2.bat goto Direction :W1 call muffe_W1.bat goto Direction ::::::::::::::::::::::::::::::::::::::::: :Anulare set contentR%Y%%X%=0 set "content%Y%%X%= " goto Cls1 :Exit1 echo %BestSc% >muffe_BestSc.txt
содержимое управляющих батников:
muffe_Aa2.bat
:Aa2 set version=0 call :ToZero if [%contentR11%] == [%contentR12%] (call :Sum1000 contentR11 contentR12 content11 content12) if [%contentR12%] == [%contentR13%] (call :Sum1000 contentR12 contentR13 content12 content13) if [%contentR13%] == [%contentR14%] (call :Sum1000 contentR13 contentR14 content13 content14) if [%contentR21%] == [%contentR22%] (call :Sum1000 contentR21 contentR22 content21 content22) if [%contentR22%] == [%contentR23%] (call :Sum1000 contentR22 contentR23 content22 content23) if [%contentR23%] == [%contentR24%] (call :Sum1000 contentR23 contentR24 content23 content24) if [%contentR31%] == [%contentR32%] (call :Sum1000 contentR31 contentR32 content31 content32) if [%contentR32%] == [%contentR33%] (call :Sum1000 contentR32 contentR33 content32 content33) if [%contentR33%] == [%contentR34%] (call :Sum1000 contentR33 contentR34 content33 content34) if [%contentR41%] == [%contentR42%] (call :Sum1000 contentR41 contentR42 content41 content42) if [%contentR42%] == [%contentR43%] (call :Sum1000 contentR42 contentR43 content42 content43) if [%contentR43%] == [%contentR44%] (call :Sum1000 contentR43 contentR44 content43 content44) call :ToZero exit /B :ToZero set rrnn=1 :PPNN if [%contentR11%] == [0] (call :Zero1000 contentR11 contentR12 content11 content12) if [%contentR12%] == [0] (call :Zero1000 contentR12 contentR13 content12 content13) if [%contentR13%] == [0] (call :Zero1000 contentR13 contentR14 content13 content14) if [%contentR21%] == [0] (call :Zero1000 contentR21 contentR22 content21 content22) if [%contentR22%] == [0] (call :Zero1000 contentR22 contentR23 content22 content23) if [%contentR23%] == [0] (call :Zero1000 contentR23 contentR24 content23 content24) if [%contentR31%] == [0] (call :Zero1000 contentR31 contentR32 content31 content32) if [%contentR32%] == [0] (call :Zero1000 contentR32 contentR33 content32 content33) if [%contentR33%] == [0] (call :Zero1000 contentR33 contentR34 content33 content34) if [%contentR41%] == [0] (call :Zero1000 contentR41 contentR42 content41 content42) if [%contentR42%] == [0] (call :Zero1000 contentR42 contentR43 content42 content43) if [%contentR43%] == [0] (call :Zero1000 contentR43 contentR44 content43 content44) set /a "rrnn+=1" if [%rrnn%] LEQ [3] (goto PPNN) exit /B :Sum1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %1=%PP% set %3=%PP% set /a contor+=%PP% IF %PP% LSS 1000 set "%3= %PP%" IF %PP% LSS 100 set "%3= %PP%" IF %PP% LSS 10 set "%3= %PP%" set "%4= " set %2=0 set version=1 exit /B :Zero1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %3=!%4! set %1=!%2! set "%4= " set %2=0 set version=1 exit /B
muffe_D4.bat
:D4 set version=0 call :ToZero if [%contentR14%] == [%contentR13%] (call :Sum1000 contentR14 contentR13 content14 content13) if [%contentR13%] == [%contentR12%] (call :Sum1000 contentR13 contentR12 content13 content12) if [%contentR12%] == [%contentR11%] (call :Sum1000 contentR12 contentR11 content12 content11) if [%contentR24%] == [%contentR23%] (call :Sum1000 contentR24 contentR23 content24 content23) if [%contentR23%] == [%contentR22%] (call :Sum1000 contentR23 contentR22 content23 content22) if [%contentR22%] == [%contentR21%] (call :Sum1000 contentR22 contentR21 content22 content21) if [%contentR34%] == [%contentR33%] (call :Sum1000 contentR34 contentR33 content34 content33) if [%contentR33%] == [%contentR32%] (call :Sum1000 contentR33 contentR32 content33 content32) if [%contentR32%] == [%contentR31%] (call :Sum1000 contentR32 contentR31 content32 content31) if [%contentR44%] == [%contentR43%] (call :Sum1000 contentR44 contentR43 content44 content43) if [%contentR43%] == [%contentR42%] (call :Sum1000 contentR43 contentR42 content43 content42) if [%contentR42%] == [%contentR41%] (call :Sum1000 contentR42 contentR41 content42 content41) call :ToZero exit /B :ToZero set rrnn=1 :PPNN if [%contentR14%] == [0] (call :Zero1000 contentR14 contentR13 content14 content13) if [%contentR13%] == [0] (call :Zero1000 contentR13 contentR12 content13 content12) if [%contentR12%] == [0] (call :Zero1000 contentR12 contentR11 content12 content11) if [%contentR24%] == [0] (call :Zero1000 contentR24 contentR23 content24 content23) if [%contentR23%] == [0] (call :Zero1000 contentR23 contentR22 content23 content22) if [%contentR22%] == [0] (call :Zero1000 contentR22 contentR21 content22 content21) if [%contentR34%] == [0] (call :Zero1000 contentR34 contentR33 content34 content33) if [%contentR33%] == [0] (call :Zero1000 contentR33 contentR32 content33 content32) if [%contentR32%] == [0] (call :Zero1000 contentR32 contentR31 content32 content31) if [%contentR44%] == [0] (call :Zero1000 contentR44 contentR43 content44 content43) if [%contentR43%] == [0] (call :Zero1000 contentR43 contentR42 content43 content42) if [%contentR42%] == [0] (call :Zero1000 contentR42 contentR41 content42 content41) set /a "rrnn+=1" if [%rrnn%] LEQ [3] (goto PPNN) exit /B :Sum1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %1=%PP% set %3=%PP% set /a contor+=%PP% IF %PP% LSS 1000 set "%3= %PP%" IF %PP% LSS 100 set "%3= %PP%" IF %PP% LSS 10 set "%3= %PP%" set "%4= " set %2=0 set version=1 exit /B :Zero1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %3=!%4! set %1=!%2! set "%4= " set %2=0 set version=1 exit /B
muffe_S3.bat
:S3 set version=0 call :ToZero if [%contentR41%] == [%contentR31%] (call :Sum1000 contentR41 contentR31 content41 content31) if [%contentR31%] == [%contentR21%] (call :Sum1000 contentR31 contentR21 content31 content21) if [%contentR21%] == [%contentR11%] (call :Sum1000 contentR21 contentR11 content21 content11) if [%contentR42%] == [%contentR32%] (call :Sum1000 contentR42 contentR32 content42 content32) if [%contentR32%] == [%contentR22%] (call :Sum1000 contentR32 contentR22 content32 content22) if [%contentR22%] == [%contentR12%] (call :Sum1000 contentR22 contentR12 content22 content12) if [%contentR43%] == [%contentR33%] (call :Sum1000 contentR43 contentR33 content43 content33) if [%contentR33%] == [%contentR23%] (call :Sum1000 contentR33 contentR23 content33 content23) if [%contentR23%] == [%contentR13%] (call :Sum1000 contentR23 contentR13 content23 content13) if [%contentR44%] == [%contentR34%] (call :Sum1000 contentR44 contentR34 content44 content34) if [%contentR34%] == [%contentR24%] (call :Sum1000 contentR34 contentR24 content34 content24) if [%contentR24%] == [%contentR14%] (call :Sum1000 contentR24 contentR14 content24 content14) call :ToZero exit /B :ToZero set rrnn=1 :PPNN if [%contentR41%] == [0] (call :Zero1000 contentR41 contentR31 content41 content31) if [%contentR31%] == [0] (call :Zero1000 contentR31 contentR21 content31 content21) if [%contentR21%] == [0] (call :Zero1000 contentR21 contentR11 content21 content11) if [%contentR42%] == [0] (call :Zero1000 contentR42 contentR32 content42 content32) if [%contentR32%] == [0] (call :Zero1000 contentR32 contentR22 content32 content22) if [%contentR22%] == [0] (call :Zero1000 contentR22 contentR12 content22 content12) if [%contentR43%] == [0] (call :Zero1000 contentR43 contentR33 content43 content33) if [%contentR33%] == [0] (call :Zero1000 contentR33 contentR23 content33 content23) if [%contentR23%] == [0] (call :Zero1000 contentR23 contentR13 content23 content13) if [%contentR44%] == [0] (call :Zero1000 contentR44 contentR34 content44 content34) if [%contentR34%] == [0] (call :Zero1000 contentR34 contentR24 content34 content24) if [%contentR24%] == [0] (call :Zero1000 contentR24 contentR14 content24 content14) set /a "rrnn+=1" if [%rrnn%] LEQ [3] (goto PPNN) exit /B :Sum1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %1=%PP% set %3=%PP% set /a contor+=%PP% IF %PP% LSS 1000 set "%3= %PP%" IF %PP% LSS 100 set "%3= %PP%" IF %PP% LSS 10 set "%3= %PP%" set "%4= " set %2=0 set version=1 exit /B :Zero1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %3=!%4! set %1=!%2! set "%4= " set %2=0 set version=1 exit /B
muffe_W1.bat
:W1 set version=0 call :ToZero if [%contentR11%] == [%contentR21%] (call :Sum1000 contentR11 contentR21 content11 content21) if [%contentR21%] == [%contentR31%] (call :Sum1000 contentR21 contentR31 content21 content31) if [%contentR31%] == [%contentR41%] (call :Sum1000 contentR31 contentR41 content31 content41) if [%contentR12%] == [%contentR22%] (call :Sum1000 contentR12 contentR22 content12 content22) if [%contentR22%] == [%contentR32%] (call :Sum1000 contentR22 contentR32 content22 content32) if [%contentR32%] == [%contentR42%] (call :Sum1000 contentR32 contentR42 content32 content42) if [%contentR13%] == [%contentR23%] (call :Sum1000 contentR13 contentR23 content13 content23) if [%contentR23%] == [%contentR33%] (call :Sum1000 contentR23 contentR33 content23 content33) if [%contentR33%] == [%contentR43%] (call :Sum1000 contentR33 contentR43 content33 content43) if [%contentR14%] == [%contentR24%] (call :Sum1000 contentR14 contentR24 content14 content24) if [%contentR24%] == [%contentR34%] (call :Sum1000 contentR24 contentR34 content24 content34) if [%contentR34%] == [%contentR44%] (call :Sum1000 contentR34 contentR44 content34 content44) call :ToZero exit /B :ToZero set rrnn=1 :PPNN if [%contentR11%] == [0] (call :Zero1000 contentR11 contentR21 content11 content21) if [%contentR21%] == [0] (call :Zero1000 contentR21 contentR31 content21 content31) if [%contentR31%] == [0] (call :Zero1000 contentR31 contentR41 content31 content41) if [%contentR12%] == [0] (call :Zero1000 contentR12 contentR22 content12 content22) if [%contentR22%] == [0] (call :Zero1000 contentR22 contentR32 content22 content32) if [%contentR32%] == [0] (call :Zero1000 contentR32 contentR42 content32 content42) if [%contentR13%] == [0] (call :Zero1000 contentR13 contentR23 content13 content23) if [%contentR23%] == [0] (call :Zero1000 contentR23 contentR33 content23 content33) if [%contentR33%] == [0] (call :Zero1000 contentR33 contentR43 content33 content43) if [%contentR14%] == [0] (call :Zero1000 contentR14 contentR24 content14 content24) if [%contentR24%] == [0] (call :Zero1000 contentR24 contentR34 content24 content34) if [%contentR34%] == [0] (call :Zero1000 contentR34 contentR44 content34 content44) set /a "rrnn+=1" if [%rrnn%] LEQ [3] (goto PPNN) exit /B :Sum1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %1=%PP% set %3=%PP% set /a contor+=%PP% IF %PP% LSS 1000 set "%3= %PP%" IF %PP% LSS 100 set "%3= %PP%" IF %PP% LSS 10 set "%3= %PP%" set "%4= " set %2=0 set version=1 exit /B :Zero1000 set /a "PP=!%1!+!%2!" if [%PP%] == [0] (exit /B) set %3=!%4! set %1=!%2! set "%4= " set %2=0 set version=1 exit /B
лучший счет
muffe_BestSc.txt
0
скачать архив yadi.sk/d/Glgq4y1igcvoa
кое что позаимствовано у AAbrosov
старые версии
скачать архив yadi.sk/d/s7cmQlLXgKbng
добавил проверку изменений, теперь 2 не появляются если не было смещения и/или сложения
не очень элегантно вышло, но работает. нужно будет доработать и использовать переключатель
скачать архив 2 yadi.sk/d/fZXAQi9ngLGDE
скачать архив 3 yadi.sk/d/-YxSIUXpgQf2n
добавил проверку изменений, теперь 2 не появляются если не было смещения и/или сложения
не очень элегантно вышло, но работает. нужно будет доработать и использовать переключатель
скачать архив 2 yadi.sk/d/fZXAQi9ngLGDE
скачать архив 3 yadi.sk/d/-YxSIUXpgQf2n
