Название: Battle City.Net Жанр: mmo/ RPG -action На каком движке:Windmill 2D Game Engine В каком пространстве: 2D Какой вид в игре: сверху Какие есть похожие игры: Battle City, Танчики, Battle City World Какой Язык Пр. используется в игре: основной C#, возможно C++ для сервера. Предоставление исходного кода игры: Open Source Какой тип лицензии распространения: GNU GPL Сроки разработки: идея появилась примерно 10.06.2012, к написанию кода приступил 7.07.2012.
Данная игра является ремейком известной Battle City, вышедшей для приставки Dendy еще в 1980 году. Основное отличие от оригинала, возможность игры против живых противников по сети. Помимо этого в игре будет больше разнообразных бонусов и типов врагов. Надеюсь получится более интересный геймплей, поскольку появятся РПГ элементы, танк можно будет модифицировать не столько за звезды, сколько приобретая различные улучшения. Звезды же будут давать возможность приобрести танк следующего поколения, но заработать звезду будет не просто. Было бы неплохо подвести под это дело какой-нибудь сюжет, но пока мыслей нет. Графике в игре пока будет из дендевской игры.
Сейчас занимаюсь базовым функционалом. На текущий момент сделано немного: Перемещение танка. Коллизии. Стрельба. Загрузка уровня, но она сделана только что, и танк с ним не взаимодействует. Редактора пока тоже нет, уровень генерится рандомом, естественно, что получается бяка. Отчитываться о прогрессе и показывать новые демо я буду в процессе работы, ну а код буду выкладывать реже, примерно раз в неделю.
Почему С#? Я люблю с++, но… на С# проще программировать, да и быстрее. Чего только стоит автоматическая работа с памятью. К тому же этот язык имеет больший функционал, не только в смысле наличия готовых функций для реализации различных вещей, например работы с файлами, xml, криптографией и сжатием данных, но и поддержкой непосредственно языком таких вещей, как динамическая типизация, рефлексия. Да и полностью русская справка с гигами примеров занимает не последнее место.
Почему проект опенсорс? Ну, во первых, с меня не убудет, мне не жалко. Также я надеюсь, что кто-то сможет дать полезный совет по коду. Кроме того, на этом форуме было три или четыре подобных проекта, но до релиза они не дожили, а имея исходники проект может легко найти помощников и последователей, которые продолжат улучшать игру. Немного напрягает возможность нечестной игры путем модификации клиента, но до этого еще далеко и я что-нибудь придумаю, или же закрою часть сетевого кода сервера.
Кто нужен в команду: Да, в принципе, пока никто. Но позже понадобится художник, который подправит/добавит графику. И нужен будет человек, который согласится держать у себя сервер, желательно со статическим IP, поскольку разные хамачи меня не вдохновляют.
Обещанные исходники (50 кб). Для работы нужна Visual Studio 2010. В исходниках немножно нехватает комментариев, это я со временем поправлю. С радостью послушаю критику и советы.
9.07.2012 • Перемещение танка. • Коллизии. • Стрельба. • Загрузка уровня, но она сделана только что, и танк с ним не взаимодействует. Редактора пока тоже нет, уровень генерится рандомом, естественно, что получается бяка. 12.07.2012 • Гусеницы у танка при движении анимируются (довольно таки геморным способом, увидите код, поймете. день на это убил) • Танки и снаряды взаимодействуют со стенами, танками, снарядами. • Снаряды взрываются. 14.07.2012 • Чуть подправленные коллизии, теперь их расчет интерполируется, и нет такого бага, как пролетание пули сквозь стены или застревания танков при большой скорости движения или тормозах. • Вражеские танки уничтожаются. Пока без взрыва. • Простенький редактор карты. Игра автоматически грузит карту с именем "1.lvl". 15.07.2012 MapEditor v.0.2: • Добавлен скроллинг мира. Теперь можно создать воистину громадный мир. • Добавлено масштабирование мира. • "Создать", "Открыть", "Сохранить" выведены на панель. • Добавлена сетка. • Добавлена кисть изменяемого размера. 16.07.2012 • Добавлен скроллинг мира в игре. • Уничтожение стен. • Анимация взрыва при уничтожении танка.
18.07.2012 • Некоторая реорганизация кода. Добавлен класс MotionSystem, который заменил собой BulletSystem и теперь включает в себя не только пули но и все движущиеся обьекты. • Добавил примитивных ботов.
20.08.2012 • Подгонка координат танка при повороте. • При генерации боты больше не появляются внутри стен. • Плавное смещение вида.
21.08.2012 • Начал делать систему эффектов. Теперь взрыв танка выводится в правильном месте. • Статический класс для видимой области экрана. • Обработка выхода пули за экран.
22.08.2012 • Доведение до ума вписывания в повороты. • Убрал падение редактора при выходе кисти за пределы карты. • Вылечил баг сетки при создании неквадратной карты.
23.08 • Сделал отдельные списки для статических и динамических боксов. Колизии проверяются только для ближайшей статики. ПРирост производительности примерно в 20 раз.
29.08 • Алгоритм пространственного разделения для просчета коллизий.
31.08 • Множественные оптимизации. Цель в 30 фпс при 5000 ботов пока не достигнута(только 15-20). MapEditor v.0.3: • Оптимизировано отображение карты. • Изменен формат файла карты, теперь он является архивом.
2.09 • Задействовал звуковой движок. Добавил несколько звуков.
6.09 • Переделал интерполяцию движения пуль. Завершил оптимизации. План перевыполнил. 40 фпс при 5000 ботов.
Точка зору окремо взятого індивіда завжди суб'єктивна!
Пока конечно обсуждать особого нечего, "карта" ужасна, коллизии только с танками обрабатываются. Но проект очень интересен. Буду следить за темой. Многие вопросы по Windows отпадут, если посмотреть тут
Это да, по привычке ляпнул ( : Но тогда и столкновения с танками должны на серве обрабатываться, нет ? Многие вопросы по Windows отпадут, если посмотреть тут
я предлагаю сделать + к этому чтобы можно было танкистом еще играть, с автоматом бегать + добавить симс элементы и получится онлайн тамагочи про танк Делаю самый супер сервер C.S. 1.6
Но тогда и столкновения с танками должны на серве обрабатываться, нет ?
Ну в идеале да. Мы просто как-то раз думали, а что будет, если написать онлайновые танчики =) И думали, какие подходы использовать. Тут либо обрабатывать все на сервере, чем его грузить, либо кешировать карту в клиенте, но тогда надо заботиться об актуальности кеша и защиту от подмены делать, хз, как по мне, первый вариант и проще, и надежнее.
Встроенный в движок сервер для шарпа жрет очень много памяти на каждый клиент. На 2 гига нормально будут работать максимум 100 клиентов. Тогда как на плюсах несколько тысяч.
Quote (Vinchensoo)
Это редкость для шарпа, похвально)
Да какая там редкость, декомпилятор в руки и все резко становится опенсорс)
Quote (Vinchensoo)
Выложи сервера в паблик, кому надо играть- пусть сам хостит и играет с друзьями.
Он и будет выложен, сразу как только появится, но нужен же какой-то типа официальный, захотел поиграть - зашел, чтоб не искать где-то что-то.
Quote (Vinchensoo)
Коллизии в клиенте обрабатываются? Это win =)
Пока так, начну делать сервер, начну думать, как быть. Но грузить сервер не хотелось бы. Там и так будет напряг, например, нужен большой мир, и если все препятствия в игре можно уничтожить, то скоро играть станет неинтересно, нужны возрождающиеся стены.
Quote (Vinchensoo)
Я думаю, ты один из немногих тех, кто может что-то доделать до конца. Надеюсь поиграем в августе)
Спасибо за веру. Но до августа я разве что однопользовательский функционал доделаю. Точка зору окремо взятого індивіда завжди суб'єктивна!
Встроенный в движок сервер для шарпа жрет очень много памяти на каждый клиент. На 2 гига нормально будут работать максимум 100 клиентов. Тогда как на плюсах несколько тысяч.
Так ты не юзай его, а просто пиши на С#, чистом. Там есть класс сокеты, многопоточность и тд. Сложнее, конечно, но проще, чем на цпп, хотя бы из-за отсутствия утечек памяти на шарпе.
Quote (x-and1988)
zodiak, уж если на джава серверах висят по 2к+ клиентов, чем шарп хуже то? Думаю ,всё зависит от реализации
уж если на джава серверах висят по 2к+ клиентов, чем шарп хуже то? Думаю ,всё зависит от реализации
Да, от кривизны рук разработчика. В движке используются синхронные(блокирующие) сокеты, причем на каждый клиент(сокет) выделяется отдельный поток. Каждый поток в шарпе жрет около 10 мб.
Quote (Vinchensoo)
Так ты не юзай его, а просто пиши на С#, чистом. Там есть класс сокеты, многопоточность и тд.
Вот на многопоточности я и прогадал. Зато, пока хватает памяти все работает быстро и стабильно. Во второй версии движка сеть переработана, используются асинхронные сокеты, по 100 штук(задается в ручную и зависит от нагрузки на сервер) на поток максимум. Тестовый сервер выдержал больше 6000 подключений.
Это как бы оффтоп, желающим поговорить о движке сюда. Windmill 2
Да, от кривизны рук разработчика. В движке используются синхронные(блокирующие) сокеты, причем на каждый клиент(сокет) выделяется отдельный поток. Каждый поток в шарпе жрет около 10 мб.
Оу, дофига. Либо я не замечал, либо в яве такого просто нет. Сегодня подниму сорцы своего курсовика, попырим. Жрет именно поток или сокет? У меня сейчас на сервере 1 клиент = 1 тренд, причем сокеты используются синхронные. Я открывал во время тестов до 10к потоков, все вполне работало, никакого прожорства оперативки не было. Но это ява, сеть на шарпе я не мучал, не было необходимости.
Quote (nilrem)
Это как бы оффтоп, желающим поговорить о движке сюда.
А мы обсуждаем сервер для игры, а не твой движок =)
Vinchensoo, жрут память именно потоки, так как у каждого из них свой стек(по дефолту каждому по 1 мб в винде). Уточни что значит открывал, что происходило в твоей thread_func, мне почему-то кажется она у тебя сразу или почти сразу возвращала управление и поток прибивался, ибо тут не только в памяти дело, при 10к поток планировщик просто подавится. Обычно создается некое разумное число потоков(до нескольких десятков), которые лежат в пуле и достаются оттуда по мере необходимости и возвращаются в пул, когда становятся не нужны. Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Среда, 11 Июля 2012, 11:44
не знаю, я специально писал тестер, чтобы посмотреть, сколько потоков одновременно удасться запустить. Писал на ява, поэтому потоками рулила явамашина, хз, может она с ними что-то делает, когда их число становится критическим. Сама архитектура 1 клиент = 1 поток- достаточно распространена, я долго гуглил на эту тему и чего-то более-менее подходящего по соотношению время реализации\эффект не нашел. Естетственно, функция была простая, она считала что-то типа n-кратной суммы большого массива, мерялось время ее работы и я смотрел, как будет отличаться выполнение одной и той же функции, если запущен всего 1 поток и если запущено n-потоков. У нас многие фирмы, которые пишут клиент-серверное ПО, используют такую архитектуру, вроде жуется. Конечно, реальное число одновременных клиентов будет в разы меньше, но все-таки)) Ну и желательно сделать асинхронные сокеты, это тоже добавило бы профиту, имхо
nilrem, Вобщем непонятки какие-то. Тестировал, сколько же памяти будет использовать в шарпе каждый поток с клиентом. Затраты незначительны, от 10 до 100 кб. Но я же помню как раньше 100 клиентов сжирало всю память. Может от винды зависит, тогда стояла Windows XP, сейчас 7. Точка зору окремо взятого індивіда завжди суб'єктивна!
zodiak, оно же на виртуальной машине исполняется, не должно отличаться в зависимости от ОС. Тогда тебе надо сразу на МОНО проверять, сервер-то скорее всего на никсах будет стоять.
оно же на виртуальной машине исполняется, не должно отличаться в зависимости от ОС.
Действительно, может был виноват Net Framework. Сейчас то у меня последний. Вот программа для теста, попробуйте кто-нибудь. Запускаем сервер, стартуем. Запускаем клиент, указываем максимум клиентов, стартуем. Сбой это разорванное или неудачное подключение. Занимаемую память можно посмотреть в диспетчере задач. Точка зору окремо взятого індивіда завжди суб'єктивна!
Кода пока немного (771 строка), но пришлось потратить пару часов на оптимизацию. а все началось с того, что создал я для теста уровень размером 1000 на 1000 клеток, содержащий примерно 50000 активных обьектов. Активных в смысле обьектов для которых просчитываются коллизии. Изображения я так и не увидел, все время сожрали 2,5 миллиарда просчетов столкновений. Да ну нафиг. Система столкновений была забракована и переписана заново. Если раньше каждый кадр просчитывалось все для всех, то теперь подход изменился. Двигающиеся обьекты, при смещении, теперь сами посчитывают себе столкновение. Причем если раньше все действия над ними при столкновении выполняла CollisionSystem, то теперь просто вызывается внутренняя функция объекта, в которой прописаны разные действия.
Добавлен новый функционал: • Гусеницы у танка при движении анимируются (довольно таки геморным способом, увидите код, поймете. день на это убил) • Танки и снаряды взаимодействуют со стенами, танками, снарядами. • Снаряды взрываются.
Настала пора делать редактор карты, а то теперь, при работе столкновения со стенами и водой генерация в 9 случаях из 10 создает уровень, в котором вообще нельзя двинутся с места. Потому новой демки не выкладываю. Верьте на слово.
Quote (Vinchensoo)
zodiak, у меня сплошной сбой
Может фаервол блокирует сетевую активность.
Добавлено (14.07.2012, 17:19) --------------------------------------------- Новая демка. (140 кб)
Изменения: То, что в предыдущем посте + • Чуть подправленные коллизии, теперь их расчет интерполируется, и нет такого бага, как пролетание пули сквозь стены или застревания танков при большой скорости движения или тормозах. • Вражеские танки уничтожаются. Пока без взрыва. • Простенький редактор карты. Игра автоматически грузит карту с именем "1.lvl". Танки все еще генерятся рандомно, так что не удивляйтесь их появлению в стенах.
Ну и обещанные исходники (50 кб). Для работы нужна Visual Studio 2010. В исходниках немножно нехватает комментариев, это я со временем поправлю. С радостью послушаю критику и советы.
Добавлено (14.07.2012, 20:27) --------------------------------------------- И да, можете начинать рисовать карты. Удачные элементы обязательно попадут в финальный, большой мир. И мир этот будет поначалу минимум 1000 на 1000 клеток.
Точка зору окремо взятого індивіда завжди суб'єктивна!