1230 / 66 / 16
Регистрация: 23.04.2007
Сообщений: 127
|
||||||
1 | ||||||
Сетевой Морской Бой на BAT31.10.2011, 19:54. Показов 7520. Ответов 18
Сетевой Морской Бой на BAT В своей работе я часто сталкиваюсь с написанием пакетных файлов и мне стало интересно, на что способны BAT. Сначала написал несколько функций для математических расчетов (Lib\ExtFunc.bat). Позже пришла мне в голову мысль сделать игру - Морской Бой. В первой версии игры ввод координат и управление было организовано через "Set /P ...", а текст выводился на экран очень большими блоками, что затрудняло понимание и написание кода. Написание игры было отложено на неопределенное время. Через полгода собравшись с силами, было решено доделать игру. Тогда и был написан модуль (Lib\ScreenBufferFunc.bat) значительно упростивший работу по выводу текста в окно CMD. Появилась необходимость обработки команд по нажатию кнопок клавиатуры. Данная задача была организована через временную программку, автоматически создаваемую через debug.exe и считывающую скан-код нажатой клавиши. Позже был написан алгоритм автоматической расстановки кораблей (устал расставлять корабли при каждом тестировании) и загрузка/сохранение параметров в конфигурационном файле. Поддержка сетевой игры была добавлена в завершении разработки (Lib\NetWorkFunc.bat). А вот и сама игра… Я не буду приводить тут всего кода, так как это порядка 2000 строк в основном файле игры (SeaBattle.bat) и порядка 1500 строк кода в дополнительных файлах. Ниже приведен основной блок игры:
Я понимаю что программа на assembler - это не BAT, но по другому не получилось, так что будем считать что игра написана на BAT+ASM. Пакетный файл начинается с команды SetLocal с аргументом ENABLEDELAYEDEXPANSION. Далее идет проверка на существование библиотек ExtFunc.bat, ScreenBufferFunc.bat, NetWorkFunc.bat, которые должны находиться в каталоге "Lib". После этого выполняется процедура "Create" в которой читается конфигурационный файл и идет подготовка к запуску игры. Создается программа по считыванию скан-кода клавиши во временном каталоге и управление передается на процедуру "Application". Эта процедура есть не что иное как бесконечный цикл с последовательным выводом текста на экран, расчетами и передачей управления пользователю. Выход из программы осуществляется переходом на метку "ExitApp". - Так как файл работает не очень быстро, возможны небольшие задержки перерисовки экрана при управлении с клавиатуры и при выводе диалоговых окон. - Навигация по меню осуществляется с помощью стрелок "Up", "Down" и кнопок "Enter", "Escape". В диалоговом окне: "Enter" - ОК, "Escape" - Отмена. И на закуску, вращающийся 3D куб (Add\Cube3D.bat): В модуле Lib\ExtFunc.bat меются функции для выполнения простых арифметических операций с большими числами, а так же еще несколько интересных функций, работа которых представлена в файлах: Add\AROP.bat, Add\TRFC.bat, Add\Others.bat Все файлы собраны в 1 архив. Содержание архива SeaBattle.rar:
BAT-файлы тестировались на Windows XP x86 и на Windows 7 x64 (Кроме игры, так как отсутствует debug.exe). Вот в принципе и все. Возможно, кто-то найдет во всем этом что-то новое и полезное для себя. Спасибо за внимание! С Уважением Delphiist.
28
|
31.10.2011, 19:54 | |
Ответы с готовыми решениями:
18
Морской бой Морской Бой Морской бой Морской бой |
178 / 29 / 3
Регистрация: 29.08.2010
Сообщений: 228
|
|
31.10.2011, 21:02 | 2 |
а можно получить debug.exe хочется протестировать игру )
0
|
CEO
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
|
|
31.10.2011, 21:09 | 3 |
Delphiist, одно слово - уже сама реализация это круто
0
|
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
|
|
31.10.2011, 21:09 | 4 |
debug.exe это стандартный отладчик и он входит в состав всех версий Windows. Должен быть в папке system32.
0
|
178 / 29 / 3
Регистрация: 29.08.2010
Сообщений: 228
|
|
31.10.2011, 21:18 | 5 |
0
|
0 / 1 / 1
Регистрация: 31.10.2011
Сообщений: 10
|
|
31.10.2011, 22:00 | 6 |
А если ОС Windows 7, то его там не будет. В описание написано, что игра только для ХР.
1
|
1230 / 66 / 16
Регистрация: 23.04.2007
Сообщений: 127
|
|
31.10.2011, 22:43 [ТС] | 7 |
Как уже было сказано выше debug.exe есть в Windows XP. В Windows 7 x64 такого файла нет (про Windows 7 x86 ничего сказать не могу).
Данный BAT-файл игры разрабатывался с тем учетом, что никакие доп. файлы ему нужны (кроме тех, что имеются в Windows XP). Так что для запуска игры в Windows XP должно хватить того, что лежит в архиве.
0
|
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
|
01.11.2011, 18:15 | 8 |
Delphiist, после того как я выиграл и потопил последний одинарный корабль - в списке кораблей соперника отображается не 0, а 1.
И еще я не смог сделать скриншот - по F5, выдается сообщение
0
|
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
|
|
01.11.2011, 18:25 | 9 |
Суперкруто! Масштабный для данного языка проект! только вроде "чистый" BAT закончился если не в dos622 то уж точно в win98-me а это уже CMD. Хотя безусловно выглядит впечатляюще, и эти "ассемблерные вставки" здесь весьма уместны!
0
|
1230 / 66 / 16
Регистрация: 23.04.2007
Сообщений: 127
|
|||||||||||
01.11.2011, 20:31 [ТС] | 11 | ||||||||||
1. По поводу отображения в списке 1 корабля по завершении игры: условие проверки выигрыша или проигрыша стоит в самом начале цикла , поэтому не происходит последней перерисовки экрана, а выполнение передается сразу на вывод диалогового окна.
Данную проблему исправить можно, но я не стал (трудоемкий процесс отладки ), если есть необходимость я могу посмотреть. 2. По поводу скриншота, моя недоработка. Возможно игра запускается не с загрузочного раздела жесткого диска, а с другого или с сетевого диска. Ошибка с строке 1901. Попробуйте изменить данный кусок кода:
0
|
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
|
|
03.11.2011, 17:59 | 12 |
0
|
1230 / 66 / 16
Регистрация: 23.04.2007
Сообщений: 127
|
|
10.11.2011, 21:17 [ТС] | 13 |
Спасибо всем за тестирование и оценку игры.
Прикрепил файл SeaBattle_bat.rar с измененной 1901 строкой (проблема со скриншотом). И, кстати, у меня на виртуальной Win XP установленной под Win 7 батник работает быстрее, чем на реальной Win XP .
2
|
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
|
||||||
22.12.2011, 02:00 | 14 | |||||
Не работал ScreenShotViewer.bat, названия файлов в команде dir использовано без кавычек, хотя в названии есть пробел. Во-вторых с usebackq не работало.
А почему ты использовал copy /y "%%i" con>nul, а не type? Вот рабочий вариант:
0
|
1230 / 66 / 16
Регистрация: 23.04.2007
Сообщений: 127
|
|
23.12.2011, 18:20 [ТС] | 15 |
Не помню чтобы там были пробелы. Возможно какая то ошибка при подстановке даты-времени в имя файла. Во всяком случае спасибо за корректировку.
Не знай, это первое что пришло в голову. (Возможно из-за того, что постоянно работал с файлом CreateDosText.bat)
1
|
17 / 17 / 1
Регистрация: 14.11.2011
Сообщений: 94
|
|
27.12.2011, 19:41 | 16 |
...если честно мне очень понравилась реализация Жаль не смог найти чела что бы вдвоем испробовать игру.
Не по теме: Я когда то сам хотел создавать игры на ВАТ.....пока не увидел их язык :D
0
|
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 1
|
|
04.01.2019, 11:41 | 17 |
А как сыграть по сети? (я понятия не имею что за путь к расшаренному каталогу)
0
|
0 / 0 / 0
Регистрация: 15.06.2019
Сообщений: 1
|
|
15.06.2019, 08:43 | 19 |
привет а у меня вопрос как играть по сети или пока нелзя посетке
0
|
15.06.2019, 08:43 | |
15.06.2019, 08:43 | |
Помогаю со студенческими работами здесь
19
Морской бой Морской бой=) Морской бой в С Морской бой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |