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 не будет опубликован. Обязательные поля помечены *