Все мы помним свой первый компьютер, а если вы программист, то и первую программу. Первым компьютером у меня был ZX-Spectrum, а первой написанной под него программой была игрушка «Ящеры» на Бейсике. Ну, если быть честным, то я ее просто переписал из одной книги1, попутно разбираясь в коде и исправляя допущенные автором ошибки :)
Решил я дать вторую жизнь вышеуказанной игрушке. Но переписать ее на любом из известных мне языков было бы слишком просто. А так как я люблю писать батники, то переписал я ее на последних :)
Самая большая сложность в неподдержке батниками массивов, поэтому пришлось немножко поизвращаться :) Игра самообучающаяся (примитивный AI), состоит из самой игры (pangolins.cmd) и базы вопросов (questions.txt).
Описание из книги:
Не знаю, есть ли смысл описывать, как все работает, поэтому если будут конкретные вопросы по коду – спрашивайте в комментариях ;)
Скачать (1,4 кБ)
Решил я дать вторую жизнь вышеуказанной игрушке. Но переписать ее на любом из известных мне языков было бы слишком просто. А так как я люблю писать батники, то переписал я ее на последних :)
Самая большая сложность в неподдержке батниками массивов, поэтому пришлось немножко поизвращаться :) Игра самообучающаяся (примитивный AI), состоит из самой игры (pangolins.cmd) и базы вопросов (questions.txt).
Описание из книги:
Вторая программа (программа № 2) — игра «Ящеры», в которой компьютер отгадывает название животного, задуманного играющим. При этом компьютер задает вопросы, а играющий отвечает только «да» или «нет». Если компьютер не был ранее «знаком» с таким животным, то он «попросит» задать ему наводящие вопросы или «предложит» ему новое название.
Не знаю, есть ли смысл описывать, как все работает, поэтому если будут конкретные вопросы по коду – спрашивайте в комментариях ;)
@echo off :begin set qfile=questions.txt set tfile=questions_tmp.txt set cursor=1 set prew_cursor=1 set count= rem ----------------------------------------------------------------------- echo Задумай животное и нажми любую клавишу для продолжения... pause > nul call :get_current :get_answer set answer= set /p answer=%question% [д]/н: set prew_cursor=%cursor% set prew_answer=%answer% if not "%answer%"=="н" ( set cursor=%yes_id% ) else ( set cursor=%no_id% ) call :get_current if not "%yes_id%"=="0" ( goto :get_answer ) set answer= set /p answer=Это %question%. Я угадал? [д]/н: if not "%answer%"=="н" ( echo Я так и думал. goto :end ) rem ----------------------------------------------------------------------- call :get_count set /a new_animal_id=%count%+1 set /a new_question_id=%count%+2 call :update_current :get_new_animal set new_animal= set /p new_animal=Хм. Странно. Хорошо, а что это?: if "%new_animal%"=="" ( goto :get_new_animal ) echo %new_animal%:0:0>> %qfile% :get_new_question set new_question= set /p new_question=Напиши, пожалуйста, вопрос, который характеризует различия между животными %new_animal% и %question%: if "%new_question%"=="" ( goto :get_new_question ) set right_answer= set /p right_answer=И какой правильный ответ для животного %new_animal% [д]/н: if not "%right_answer%"=="н" ( echo %new_question%:%new_animal_id%:%cursor%>> %qfile% ) else ( echo %new_question%:%cursor%:%new_animal_id%>> %qfile% ) goto :end rem ----------------------------------------------------------------------- :get_count for /f "delims=:" %%i in ('findstr /r /n .* %qfile%') do set count=%%i rem Количество строк на единицу меньше (пустая строка в конце) rem set /a count=%count%-1 exit /b :get_current for /f "tokens=1-4 delims=:" %%i in ('findstr /r /n .* %qfile%') do call :get_current_callback %%i "%%j" %%k %%l exit /b :get_current_callback if "%~1"=="%cursor%" ( set question=%~2 set yes_id=%~3 set no_id=%~4 ) exit /b :update_current if exist %tfile% ( del %tfile% ) for /f "tokens=1-4 delims=:" %%i in ('findstr /r /n .* %qfile%') do call :update_current_callback %%i "%%j" %%k %%l copy /y %tfile% %qfile% > nul exit /b :update_current_callback if "%~1"=="%prew_cursor%" ( if not "%prew_answer%"=="н" ( echo %~2:%new_question_id%:%~4>> %tfile% ) else ( echo %~2:%~3:%new_question_id%>> %tfile% ) ) else ( echo %~2:%~3:%~4>> %tfile% ) exit /b rem ----------------------------------------------------------------------- :end set answer= set /p answer=Еще раз? [д]/н: if not "%answer%"=="н" ( goto :begin )
Скачать (1,4 кБ)
- О.С.Боровик, А.В.Парфенов, В.И.Сырямкин. Увлекательные игры на бытовом компьютере, МГП «Раско», Томск, 1992г.