Battle City на 1С

Опубликовал Glory S (slava_1c) в раздел Сообщество - Игры

Данная обработка представляет из себя реинкарнацию популярной в 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С!

Скачать файлы

Наименование Файл Версия Размер
BattleCity1C_82
.epf 725,12Kb
11.10.16
57
.epf 1.015 725,12Kb 57 Скачать
BattleCity1C_83
.epf 723,08Kb
11.10.16
192
.epf 1.0 723,08Kb 192 Скачать
Game City 1C_82 Multiplayer
.epf 1,85Mb
11.10.16
10
.epf 1.0.27 1,85Mb 10 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Павел Чистов (GROOVY) 2237 05.08.16 10:11 Сейчас в теме
2. Rom Shpakoff (Lancelot-2M) 91 05.08.16 10:49 Сейчас в теме
3. Артур Коржан (1v7) 197 05.08.16 11:44 Сейчас в теме
Всегда удивляли такие программисты (в хорошем смысле этого слова). Которые на голом энтузиазме пишут подобные штуковины. Сколько ушло времени на эту разработку!!!))) Можно было написать пару заказных отчётов и заработать N-сумму денег! Нееет... Он пишет игруху из 90-х! Достойная вещица! Респект Вам и уважуха!
uncle_Vasya; +1 Ответить 1
4. борян петров (TODD22) 15 05.08.16 11:49 Сейчас в теме
Так глядишь кто нибудь и Quake с half life сделает на 1с :)
5. Евгений Нагайцев (nagaitseff) 7 05.08.16 11:54 Сейчас в теме
6. Иван Иванов (Famza) 80 05.08.16 12:24 Сейчас в теме
А когда Hilf-Life будет на 1С?
7. Вадим Миляев (PrinzOfMunchen) 72 05.08.16 12:49 Сейчас в теме
Не работают:
{Форма.Форма.Форма(1070)}: Поле объекта не обнаружено (Картинка)
ЭлементИгры.Картинка = Новый Картинка();
8. Glory S (slava_1c) 234 05.08.16 13:37 Сейчас в теме
(7) PrinzOfMunchen, Оч. странно - перед тем как выложить проверял на разных платформах и компах, в том числе на удаленке по rdp. Работает в режиме обычного приложения везде, не зависимо от конфигурации. Что за платформа? Если можно - скриншот.
9. Glory S (slava_1c) 234 05.08.16 14:03 Сейчас в теме
(3) 1v7, Спасибо, рад что понравилось)))
Да нет, не волнуйтесь времени после того, как я наткнулся на ресурс со спрайтами этой игры прошло чуть больше 2х недель)) Причем основу я написал дня за три - там кода-то всего ничего, потом неделю искал средство увеличить скорость ну и на причесывание (затупливание АИ ботов и проверка столкновений) еще неделя ушла. Не в ущерб отчетам, короче)))
10. Glory S (slava_1c) 234 05.08.16 14:13 Сейчас в теме
(6) Famza, )) у 1С проблемы с шейдерами. Боюсь здесь уже без ВК не обойтись.

А с ВК еще под 9 директом уже давно есть - только по сути то это не 1С а просто С...
11. Валерий К (klinval) 170 05.08.16 14:18 Сейчас в теме
Круто:) Первая игра, которую плюсанул и скачал!

Нашёл отличие от оригинала: твой снаряд не уничтожает снаряд противника. Т.е. они пролетают мимо друг друга и умирают оба!
корум; SvoyakMartin; +2 Ответить
12. Дмитрий Копейкин (nodalt) 3 05.08.16 15:43 Сейчас в теме
Да, реально круто!
1С'ники теперь Вам должны - за популяризацию платформы )))
13. Glory S (slava_1c) 234 05.08.16 19:35 Сейчас в теме
Спасибо, друзья, за столь лестные отзывы! Зашел и прям настоящее пятничное настроение))))
На счет уничтожения друг друга - это чтоб побольше мяса было (ну экшн все же))
Чтобы было как в классике, надо строки с 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].НомерСтроки,Символы.НПП,"")),й,ы);
				КонецЕсли;	
...Показать Скрыть
14. Алексей Ермилов (Alex_E) 1457 05.08.16 20:16 Сейчас в теме
Платформа 8.2.19.130:
{Форма.Форма.Форма(1070)}: Поле объекта не обнаружено (Картинка)
ЭлементИгры.Картинка = Новый Картинка();
Так хотел поиграть, и так не хотца разбираться((((
15. ASDF2 Егор (ASDF2) 280 07.08.16 09:11 Сейчас в теме
У кого появляется ошибка - запускайте на платформе 8.3. На 8.2 у области ячеек табличного документа не было свойства "Картинка"
16. Алексей Ермилов (Alex_E) 1457 07.08.16 09:17 Сейчас в теме
(15) ASDF2, Т.е.
Написано на "голом" 1С82 в неуправляемых формах.
- неправда?)))
17. Glory S (slava_1c) 234 08.08.16 03:32 Сейчас в теме
(16) Alex_E, По ходу, да))) Все это было написано на 8.3 на конфе в режиме эмуляции 8.2.13. Я без задней мысли и указал это.И везде где проверял, запускались уже обновленные платформы. Но я исправился!
И написал-таки под "голый" 8.2 , плюс оптимизировал сам графический вывод, поэтому сейчас на моем тестовом компе - 32 FPS и все работает под 8.2.19.130. Пришлось даже начальную скорость ограничить, т.к. боты не давали пройти даже первый уровень.
18. Алексей Ко (Жолтокнижниг) 233 08.08.16 21:59 Сейчас в теме
19. Сергей Растатурин (tristarr1) 24 10.08.16 08:23 Сейчас в теме
Круто! А сетевая версия будет?)
20. Евгений Мукомело (ixilimuse) 138 10.08.16 08:37 Сейчас в теме
Мужик! Реализация достойная уважения!)))
21. Сергей (necropunk) 4 10.08.16 09:43 Сейчас в теме
(10) slava_1c, "у 1С проблемы с шейдерами" - на этой фразе заржал в голос.
jeyrico; dj_serega; madonov; sa1m0nn; catsam; shard; pbahushevich; +7 Ответить
22. sound sound (sound) 518 10.08.16 10:46 Сейчас в теме
Чйорт, реально круто, неистово плюсую!
Пипец рабочему дню :)
dj_serega; sa1m0nn; gigapevt; +3 Ответить
23. Владислав Мороз (vlad.frost) 168 10.08.16 11:09 Сейчас в теме
Мультиплеер бы ещё запилить )
Zhilyakovdr; pbahushevich; +2 Ответить 1
24. Андрей Лещанов (Nuuq) 58 10.08.16 12:29 Сейчас в теме
25. Сергей Кобяков (Serjik78) 1263 10.08.16 13:02 Сейчас в теме
Это песня! :)

Мультиплей по сетке еще сделайте, на работе все юзеры ошалеют :)
26. Андрей Овсянкин (Evil Beaver) 3762 10.08.16 13:36 Сейчас в теме
Pr-Mex в свое время сделал эмулятор Денди на чистом 1С без внешних компонент. Думаю, ему статья понравится. У вас, я так понял, не эмулятор оригинального кода, а именно портированная на 1С игра?
27. Артем Артем (artik1994) 10.08.16 16:39 Сейчас в теме
автору респект)
побольше бы таких интузиастов...
28. Михаил Григорьев (mike_grig) 117 11.08.16 08:21 Сейчас в теме
29. WellMaster (WellMaster) 97 11.08.16 09:23 Сейчас в теме
Так и не понял, какая кнопка отвечает за выстрел.
В хелпе и в статье также не нашел упоминания.
Нажимая все кнопки подряд обработка вешается, лечется только перезапуском.
30. Сергей (avasl) 57 11.08.16 10:40 Сейчас в теме
(17) slava_1c,
на 8.3 будет работать только с 8.3.5

> Для объекта ОбластьЯчеекТабличногоДокумента реализованы свойства Картинка
31. Максим *** (premier) 130 11.08.16 12:37 Сейчас в теме
(0) Круто! Остался без обеда )))
32. Glory S (slava_1c) 234 11.08.16 14:47 Сейчас в теме
(26) Evil Beaver, На счет Pr-Mex и эмулятора Денди - интересно было бы взглянуть на эту разработку. Да, действительно это не NES, это написанная на 1С обработка. Из самой игры заимствованы ресурсы с картинками и звуки. Остальное - чистой воды вымысел))
33. Glory S (slava_1c) 234 11.08.16 14:54 Сейчас в теме
(29) WellMaster,

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

Клавиша "Enter" - выстрел, выбор пункта меню
Клавиша "Вверх" - движение танка вперед
Клавиша "Вниз" - движение танка назад
Клавиша "Влево" - движение танка влево
Клавиша "Вправо" - движение танка вправо

Игрок 2, мышь

- Движение мыши в специальной области экрана по виртуальным
кнопкам "U"D"L"R" повторяет действия на клавиатуре,
остановка - перемещение мыши в центр этой области
- нажатие левой кнопки мыши - выстрел
34. Glory S (slava_1c) 234 11.08.16 15:09 Сейчас в теме
(23) vlad.frost,

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

А более 2-х танков союзников?
B управление вражескими танком?
C второй танк - управляется также но с другого компа в локальной сети
D второй танк - управляется также но с другого компа в инете?
35. Dima Basalaev (DiBas) 11.08.16 15:26 Сейчас в теме
Ностальгия) Почти как Quake на осцилографе)
36. Stas Bor (stas1976) 14 12.08.16 15:22 Сейчас в теме
спасибо джедайский человек
37. Евгений Евгений (leasing) 1 17.08.16 00:25 Сейчас в теме
(9) slava_1c, спасибо вам огромное! Вы - волшебник!
Сейчас объясню. Люди "старой формации", ну те самые, которые начинали свой путь в 1С на 1С 6.0 и на 1С 7.7, со времен появления 8 -ки (и типовых решений для нее), стали время от времени впадать в задумчивость относительно бурного роста в ней числа объектов, свойств, методов, (и, что самое печальное, астрономического роста числа строк, цикломатической сложности и прочих метрических показателей, включая число ошибок на 1000 строк кода).
Парадоксальность ситуации состоит в том, что бухгалтерия соседней конторы осталась работать на 7 -ке. и прекрасно себя чувствует, выдавая во вне точно такие же отчеты, за меньшие деньги, за меньшее время, за меньшие трудозатраты, при меньших расходах на компьютерные ресурсы.
Спрашивается, кто и чего ради трудился "во глубине 1С руд"?
На что ушли человеко-месяцы, человеко- годы, человеко-десятилетие?
Как там у классика? "1С, куда ж несешься ты? дай ответ. Не дает ответа. Чудным звоном заливается колокольчик; гремит и становится ветром разорванный в куски воздух; летит мимо все, что ни есть на земли, и, косясь, постораниваются и дают ей дорогу другие прикладные системы бухгалтреско- экономического направления."

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

Поздравляем дружный коллектив с победой в этой гонке с ...... А с кем они соревновались-то?
Lancelot-2M; корум; +2 Ответить
38. Семен Слепаков (sa1m0nn) 21 29.08.16 13:58 Сейчас в теме
Аплодирую стоя!
А выстрел в позицию полтанка вбок работает? Чо-т в упор стрелял - не убил :(
ЗЫ: Максимально-точный термин!!! :D XDXDXD
Ништяки = Новый Массив();
Ништяки.Добавить(Спрайты.lopat.Картинка);
Ништяки.Добавить(Спрайты.granat.Картинка);
Ништяки.Добавить(Спрайты.star.Картинка);
Ништяки.Добавить(Спрайты.kaska.Картинка);
Ништяки.Добавить(Спрайты.tank.Картинка);
Ништяки.Добавить(Спрайты.freezer.Картинка);
...Показать Скрыть
39. Glory S (slava_1c) 234 14.09.16 05:13 Сейчас в теме
(38) sa1m0nn, спс)

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

40. Олег Медведев (olgerd666) 6 22.09.16 15:51 Сейчас в теме
(34) slava_1c,
второй танк - управляется также но с другого компа в локальной сети
было бы круто)
41. Glory S (slava_1c) 234 22.09.16 19:32 Сейчас в теме
(40) olgerd666,
Ага, сделал уже давно, и можно даже вчетвером))
42. Артём Андриянов (CSiER) 30.09.16 14:54 Сейчас в теме
43. Сергей Галюк (dj_serega) 205 11.10.16 11:30 Сейчас в теме
Слава, извините, но Вы Красавец с больших букв :)
44. Glory S (slava_1c) 234 11.10.16 12:49 Сейчас в теме
Спасибо, ребят!
На всякий случай - все изменения в файле "Game City 1C_82 Multiplayer", а то у меня отображается что скачиваются первые версии.