Battle City на 1С

























Данная обработка представляет из себя реинкарнацию популярной в 90-е годы XX-го века игры на игровых консолях Dendy, Nintendo и пр.: «BattleCity»(c)Namcot (Танчики ). Воспроизведен оригинальный геймплей, уровни и аудиовизуальный контент. Никаких внешних компонент не использовано. Написано на «голом» 1С82 в неуправляемых формах. Добавлен мультиплеер.

Всем доброго дня!

В одной из своих прошлых публикаций, где-то в комментах я высказал примерно следующее: «..на внешних компонентах можно и шутер в 1С написать!».

Так вот, я солгал! Шутер можно написать и на «голом» 1C, не используя никаких внешних компонент!

Единственное что нам пригодится «внешнего» — это объект HTML. В нем мы организуем дополнительный таймер и потоки звуковых спецэффектов с помощью короткого кода на JS. Графическим ядром сегодня у нас станет «табличный документ». Именно сюда по событиям от таймера мы будем выводить каждый кадр анимации.

В итоге, помимо собственно игрухи, у меня родилось некое подобие «игрового движка» для 1С. Конечно, на лавры Unreal Engine или Unity я не претендую, однако и здесь Вы сможете без труда добавить новые уровни, прокачать анимацию или, добавив новые графические ресурсы, полностью визуально изменить игру без всякого программирования.  Ну а если Вы — программист… то 1С = Блупринт (для тех кто в теме) (~)(0)

Информация для программистов:

Кода здесь всего около 1400 строк. При этом сам геймплей — 200 строк, AI ботов — 50 строк! Так что, разобраться в этом не составит никакого труда, тем более, весь код содержит комментарии, а общие процедуры управления и вывода вынесены в отдельные текстовые блоки. Модуль обработки принципиально оставил пустым -код на ладони! Меняйте уровни, колдуйте над интеллектом ботов, придумывайте новые «фишки».

Из «вкусного» здесь :
— Организация стандартного управления игровым процессом с помощью клавиш UDLR.
— Организация  управления второго геймера с помощью мыши.
— Многопоточный вывод звуковых спецэффектов
— HTML таймер, позволяющий повысить скорость вывода графики до приемлемых 20FPS (напрямую зависит от скорости процессора, т.к., разумеется ни о каком аппаратном ускорении речи идти не может). Стандартная обработка ожидания выдает всего 5-6 FPS, да и те не всегда.  (не правда ли, дико звучит «FPS в 1С»)))
— Таймлайн для спрайтовой анимации и озвучки.

Информация для всех пользователей:
Данная обработка представляет из себя реинкарнацию популярной в 90-е годы XX-го века игры на игровых консолях Dendy, Nintendo и пр.: «BattleCity»(c)Namcot  (Танчики ). Воспроизведен оригинальный геймплей, уровни и аудиовизуальный контент. Задача игрока защитить штаб, подбить как можно больше танков противника и заработать как можно больше очков. При уничтожении 20-ти танков игра переходит на новый уровень. В каждом уровне набор танков может меняться. При прохождении игроком 36-го уровня, игра переходит на первый уровень, при этом добавляется скорость.
36 уровень — экспериментальный, он отличается от «классических» уровней увеличенной картой, увеличенным набором противников для демонстрации работы игрового движка.

Есть кнопка Options позволяющая сразу переключиться на желаемый уровень и выставить себе побольше скорости и пуль. По умолчанию заблокирована.

Подробное описание — по кнопке F1 (помощь).
Обработка поставляется в неуправляемом режиме.

11.10.16 Версия 1.0.27 (файл 1C_Танчики_82_Мультиплеер):

1. Полностью переработан граф. движок . Теперь на тестовых стендах — 65-85 FPS. Хорошая скорость на платформе 8.2 на стенде i7-3.0GHz. Отличные результаты показал стенд i3-3.7GHz на платформе 8.3.

2. Добавлен мультиплеер!

3. Добавлен режим Kill’emAll (можно «мочить» друг друга)

4. Добавлен тайловый генератор (моделирование карт)

5. Добавлена возможность масштабировать карту и играть от первого лица

6. 3in1 — в обработке можно выбрать 3 разных по ресурсоемкости игры. Самая требовательная «World of Tanks» c включенной опцией Tile Engine.

Рекомендации: 

— Для максимальной производительности уменьшайте окно с обработкой — чем меньше ячеек табличного документа выводится на экран — тем больше FPS!

-В режиме мультиплеера настоятельно рекомендую играть в стандартном режиме (Classic) в масштабе 100.

— Для каталога мультиплеера выбирайте самый быстрый винт.

— Ник не может быть больше 10 символов. Для правильной работы мультиплеера ники у всех игроков должны быть разными.

— При игре в режиме мультиплеера один игрок всегда должен начинать игру в режиме 3 (Create multiplayer), а остальные игроки — в режиме 4 (Connect to network)

— Проверьте зрение. Попробуйте поиграть в первую игру на масштабе 50. Это забавно)))

Приятного времяпрепровождения, и помните: «Работа прежде всего!»

Слава 1С!

53 Comments

  1. GROOVY

    Круто!

    Reply
  2. Lancelot-2M

    Волшебно)

    Reply
  3. 1v7

    Всегда удивляли такие программисты (в хорошем смысле этого слова). Которые на голом энтузиазме пишут подобные штуковины. Сколько ушло времени на эту разработку!!!))) Можно было написать пару заказных отчётов и заработать N-сумму денег! Нееет… Он пишет игруху из 90-х! Достойная вещица! Респект Вам и уважуха!

    Reply
  4. TODD22

    Так глядишь кто нибудь и Quake с half life сделает на 1с 🙂

    Reply
  5. nagaitseff

    Классно

    Reply
  6. Famza

    А когда Hilf-Life будет на 1С?

    Reply
  7. PrinzOfMunchen

    Не работают:

    {Форма.Форма.Форма(1070)}: Поле объекта не обнаружено (Картинка)

    ЭлементИгры.Картинка = Новый Картинка();

    Reply
  8. slava_1c

    (7) PrinzOfMunchen, Оч. странно — перед тем как выложить проверял на разных платформах и компах, в том числе на удаленке по rdp. Работает в режиме обычного приложения везде, не зависимо от конфигурации. Что за платформа? Если можно — скриншот.

    Reply
  9. slava_1c

    (3) 1v7, Спасибо, рад что понравилось)))

    Да нет, не волнуйтесь времени после того, как я наткнулся на ресурс со спрайтами этой игры прошло чуть больше 2х недель)) Причем основу я написал дня за три — там кода-то всего ничего, потом неделю искал средство увеличить скорость ну и на причесывание (затупливание АИ ботов и проверка столкновений) еще неделя ушла. Не в ущерб отчетам, короче)))

    Reply
  10. slava_1c

    (6) Famza, )) у 1С проблемы с шейдерами. Боюсь здесь уже без ВК не обойтись.

    А с ВК еще под 9 директом уже давно есть — только по сути то это не 1С а просто С…

    Reply
  11. klinval

    Круто:) Первая игра, которую плюсанул и скачал!

    Нашёл отличие от оригинала: твой снаряд не уничтожает снаряд противника. Т.е. они пролетают мимо друг друга и умирают оба!

    Reply
  12. nodalt

    Да, реально круто!

    1С’ники теперь Вам должны — за популяризацию платформы )))

    Reply
  13. slava_1c

    Спасибо, друзья, за столь лестные отзывы! Зашел и прям настоящее пятничное настроение))))

    На счет уничтожения друг друга — это чтоб побольше мяса было (ну экшн все же))

    Чтобы было как в классике, надо строки с 1300 заменить с

    Если Найти(НайдТанк[0].Type,»П») тогда
    //Просто пуля
    ИначеЕсли Найти(НайдТанк[0].Type,»Н»)  тогда
    //Это ништяк
    ИначеЕсли НайдТанк[0] = Actor тогда
    //это тот же объект
    ИначеЕсли НайдТанк[0].Whose = Actor.НомерСтроки-3 тогда
    //это пуля этого танка
    ИначеЕсли НайдТанк[0].НомерСтроки-3 = Actor.Whose тогда
    //это пуля этого танка
    Иначе
    возврат  Новый Структура(«Что,Х,У»,»POS:»+СокрЛП(СтрЗаменить(НайдТанк[0].НомерСтроки,Символы.НПП,»»)),й,ы);
    КонецЕсли;
    

    Показать

    заменить на

    Если НайдТанк[0] = Actor тогда
    //это тот же объект
    ИначеЕсли НайдТанк[0].Whose = Actor.НомерСтроки-3 тогда
    //это пуля этого танка
    ИначеЕсли НайдТанк[0].НомерСтроки-3 = Actor.Whose тогда
    //это пуля этого танка
    ИначеЕсли Найти(НайдТанк[0].Type,»Н»)  тогда
    //Это ништяк
    ИначеЕсли Найти(НайдТанк[0].Type,»П») тогда
    //Это пуля
    возврат  Новый Структура(«Что,Х,У»,»POS:»+СокрЛП(СтрЗаменить(НайдТанк[0].НомерСтроки,Символы.НПП,»»)),й,ы);
    Иначе
    возврат  Новый Структура(«Что,Х,У»,»POS:»+СокрЛП(СтрЗаменить(НайдТанк[0].НомерСтроки,Символы.НПП,»»)),й,ы);
    КонецЕсли;
    

    Показать

    Reply
  14. Alex_E

    Платформа 8.2.19.130:

    {Форма.Форма.Форма(1070)}: Поле объекта не обнаружено (Картинка)

    ЭлементИгры.Картинка = Новый Картинка();

    Так хотел поиграть, и так не хотца разбираться((((

    Reply
  15. ASDF2

    У кого появляется ошибка — запускайте на платформе 8.3. На 8.2 у области ячеек табличного документа не было свойства «Картинка»

    Reply
  16. Alex_E

    (15) ASDF2, Т.е.

    Написано на «голом» 1С82 в неуправляемых формах.

    — неправда?)))

    Reply
  17. slava_1c

    (16) Alex_E, По ходу, да))) Все это было написано на 8.3 на конфе в режиме эмуляции 8.2.13. Я без задней мысли и указал это.И везде где проверял, запускались уже обновленные платформы. Но я исправился!

    И написал-таки под «голый» 8.2 , плюс оптимизировал сам графический вывод, поэтому сейчас на моем тестовом компе — 32 FPS и все работает под 8.2.19.130. Пришлось даже начальную скорость ограничить, т.к. боты не давали пройти даже первый уровень.

    Reply
  18. Жолтокнижниг

    (0) Круто

    Reply
  19. tristarr1

    Круто! А сетевая версия будет?)

    Reply
  20. ixilimuse

    Мужик! Реализация достойная уважения!)))

    Reply
  21. necropunk

    (10) «у 1С проблемы с шейдерами» — на этой фразе заржал в голос.

    Reply
  22. sound

    Чйорт, реально круто, неистово плюсую!

    Пипец рабочему дню 🙂

    Reply
  23. vlad.frost

    Мультиплеер бы ещё запилить )

    Reply
  24. Nuuq

    Круто!

    Reply
  25. Serjik78

    Это песня! 🙂

    Мультиплей по сетке еще сделайте, на работе все юзеры ошалеют 🙂

    Reply
  26. Evil Beaver

    Pr-Mex в свое время сделал эмулятор Денди на чистом 1С без внешних компонент. Думаю, ему статья понравится. У вас, я так понял, не эмулятор оригинального кода, а именно портированная на 1С игра?

    Reply
  27. artik1994

    автору респект)

    побольше бы таких интузиастов…

    Reply
  28. mike_grig

    феерия!!

    Reply
  29. WellMaster

    Так и не понял, какая кнопка отвечает за выстрел.

    В хелпе и в статье также не нашел упоминания.

    Нажимая все кнопки подряд обработка вешается, лечется только перезапуском.

    Reply
  30. avasl

    (17)

    на 8.3 будет работать только с 8.3.5

    > Для объекта ОбластьЯчеекТабличногоДокумента реализованы свойства Картинка

    Reply
  31. premierex

    (0) Круто! Остался без обеда )))

    Reply
  32. slava_1c

    (26) Evil Beaver, На счет Pr-Mex и эмулятора Денди — интересно было бы взглянуть на эту разработку. Да, действительно это не NES, это написанная на 1С обработка. Из самой игры заимствованы ресурсы с картинками и звуки. Остальное — чистой воды вымысел))

    Reply
  33. slava_1c

    (29) WellMaster,

    Игрок 1,клавиатура:

    Клавиша «Enter» — выстрел, выбор пункта меню

    Клавиша «Вверх» — движение танка вперед

    Клавиша «Вниз» — движение танка назад

    Клавиша «Влево» — движение танка влево

    Клавиша «Вправо» — движение танка вправо

    Игрок 2, мышь

    — Движение мыши в специальной области экрана по виртуальным

    кнопкам «U»D»L»R» повторяет действия на клавиатуре,

    остановка — перемещение мыши в центр этой области

    — нажатие левой кнопки мыши — выстрел

    Reply
  34. slava_1c

    (23) vlad.frost,

    Под мультиплеером подразумевается

    А более 2-х танков союзников?

    B управление вражескими танком?

    C второй танк — управляется также но с другого компа в локальной сети

    D второй танк — управляется также но с другого компа в инете?

    Reply
  35. DiBas

    Ностальгия) Почти как Quake на осцилографе)

    Reply
  36. stas1976

    спасибо джедайский человек

    Reply
  37. leasing

    (9) спасибо вам огромное! Вы — волшебник!

    Сейчас объясню. Люди «старой формации», ну те самые, которые начинали свой путь в 1С на 1С 6.0 и на 1С 7.7, со времен появления 8 -ки (и типовых решений для нее), стали время от времени впадать в задумчивость относительно бурного роста в ней числа объектов, свойств, методов, (и, что самое печальное, астрономического роста числа строк, цикломатической сложности и прочих метрических показателей, включая число ошибок на 1000 строк кода).

    Парадоксальность ситуации состоит в том, что бухгалтерия соседней конторы осталась работать на 7 -ке. и прекрасно себя чувствует, выдавая во вне точно такие же отчеты, за меньшие деньги, за меньшее время, за меньшие трудозатраты, при меньших расходах на компьютерные ресурсы.

    Спрашивается, кто и чего ради трудился «во глубине 1С руд»?

    На что ушли человеко-месяцы, человеко- годы, человеко-десятилетие?

    Как там у классика? «1С, куда ж несешься ты? дай ответ. Не дает ответа. Чудным звоном заливается колокольчик; гремит и становится ветром разорванный в куски воздух; летит мимо все, что ни есть на земли, и, косясь, постораниваются и дают ей дорогу другие прикладные системы бухгалтреско- экономического направления.»

    И вот явились Вы и совершили чудо. «Проявили пленочку». Теперь мы видим четкое и ясное изображение вместо сплошной серой заливки.

    Вот же оно!

    Во-первых, нам стало ясно кто — видимо, на рубеже 2000-х руководством 1С было решено подразделение разработчиков экономического софта «укрепить» специалистами из подразделения софта для «игр и развлечений». Которые оттеснив на задний план старую гвардию, привнесли и в платформу, и в типовые решения много занимательного из своей области.

    Во-вторых, нам стало понятно чего ради — а для того, оказывается, чтобы, не выходя из рамок 1С среды программирования, можно было написать игру.

    Поздравляем дружный коллектив с победой в этой гонке с …… А с кем они соревновались-то?

    Reply
  38. sa1m0nn

    Аплодирую стоя!

    А выстрел в позицию полтанка вбок работает? Чо-т в упор стрелял — не убил 🙁

    ЗЫ: Максимально-точный термин!!! 😀 XDXDXD

    Ништяки = Новый Массив();
    Ништяки.Добавить(Спрайты.lopat.Картинка);
    Ништяки.Добавить(Спрайты.granat.Картинка);
    Ништяки.Добавить(Спрайты.star.Картинка);
    Ништяки.Добавить(Спрайты.kaska.Картинка);
    Ништяки.Добавить(Спрайты.tank.Картинка);
    Ништяки.Добавить(Спрайты.freezer.Картинка);
    

    Показать

    Reply
  39. slava_1c

    (38) sa1m0nn, спс)

    Ага, это я в новой версии пофиксил.

    Вот тайловый движок допилю и выкину, будет как в варкрафте.

    Reply
  40. olegmedvedev

    (34)

    второй танк — управляется также но с другого компа в локальной сети

    было бы круто)

    Reply
  41. slava_1c

    (40) olgerd666,

    Ага, сделал уже давно, и можно даже вчетвером))

    Reply
  42. CSiER

    Круть. Марио будет? )

    Reply
  43. dj_serega

    Слава, извините, но Вы Красавец с больших букв 🙂

    Reply
  44. slava_1c

    Спасибо, ребят!

    На всякий случай — все изменения в файле «Game City 1C_82 Multiplayer», а то у меня отображается что скачиваются первые версии.

    Reply
  45. DrBlack

    Мне почему-то файло на почту не приходит… 🙁

    Reply
  46. slava_1c

    (45) Эммм.. ну это скорее вопрос к техподдержке Инфостарта.

    Reply
  47. DrBlack

    (46) Да понятно что вы тут не причем… )

    Reply
  48. maksa2005

    Достойно уважения

    Reply
  49. Evil Beaver

    (32) Нужно найти @Pr-Mex здесь или на гитхабе и попросить у него эту разработку (если он ее не потерял)

    Reply
  50. KazanKokos

    Оставлю заметочку, дома гляну. )) Пока обработочку попилю )

    Reply
  51. Dzenn

    Да, ждём Half-life )

    Reply
  52. olegmedvedev

    (49) Ого, было бы круто посмотреть на эмуль Денди на чистом 1С)

    Reply
  53. sertak

    Чувак, жму твою мужественную руку!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *