LINUX.ORG.RU
ФорумGames

Пишем игру 'Убийца доты!' на RUST, Unity3D.

 , , , ,


2

4

Картинка-скриншот: https://imgur.com/1EnG6PY

https://www.youtube.com/playlist?list=PLJOi03xWjFiZaacMrwG30a_EXfp-dcWcv

Пишем игру.
Жанр: IDC.

Серверная часть на RUST под Ubuntu. Исходники
Клиентская на Unity 3D. Исходники

Смысл игры:
Обучать аборигенов и помогать им в развитии поселения.

Отличительные особенности:
* Саморазвивающийся мир. Растения и животные растут, едят, размножаются. (реализовано)
* Аборигены будут принимать решения самостоятельно. Сами выбирать место для строительства и строить. Развивать сельское хозяйство, сажать растения, собирать их. Самостоятельно создавать отряды воинов, вести «переговоры» с соседями. (в процессе)
* Мир живет и развивается даже если игрок оффлайн. (работает)
* Игрок может отбить поселение у другого игрока, либо взять под свою опеку незанятое никем, либо управлять совместно с другим игроком. (в планах)

На какие игры похоже:
1. Majesty.
2. The Guild.
3. Травиан.
4. Dwarf Fortress.
5. Screeps.

Что сделано:
+1. Запилить чат, с кириллицей.(начало 19 сентября 2016)
+2. Перемещение игрока.
+3. Запилить растения.
+4. Смайлики в чат. (огромное спасибо lokivoid)
+5. Добавить монстров.
+6. Монстры едят растения.
+7. Монстры собираются в группы(стаи).
-8. Добавить аборигенов.
-9. Аборигены едят растения и монстров.
-10. Аборигены объединяются в группы(племена).

Сcылки:
Посмотреть процесс создания на стриме
Анонсы стримов



Последнее исправление: Gexon (всего исправлений: 6)

а убийцу planetside2 - слабо?

anonymous
()
Ответ на: комментарий от Gary

Вот так авторы юнити сделали себе анти-рекламу

О да, ведь манагеры при выборе движка смотрят исключительно на логотипы в других играх.

anonymous
()

А вот с хрена ли вы на Unity3D пишете, делали бы на Urho3D я бы хоть что-нить мог скоммуниздитть? Нету сообщества, братскорго блеча, эх :(

slapin ★★★★★
()
Ответ на: комментарий от Gexon

Прикол Option, в необходимости дважды делать проверку. У меня только в одном острове до 20к живых объектов. И что то не очень хочется лишний раз проверять переменную. А в случае с Option - придётся, т.к. пока не провериш на ошибку/None, данные нельзя извлечь.

Some(integer32).unwrap_or(0)

Где здесь двойная проверка? Есть и другие комбинаторы. Ну ладно, твоё дело. Если вопрос упирается в производительность, возможно подобный подход и оправдан.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от Gexon

Выглядит как преждевременная оптимизация.

Совет дня: сначала пишешь удобный API в концепции языка, не запариваясь о подобных микрооптимизациях, потом смотришь не производительность с профилировщиком и только если это реально будет проблемой (спойлер: не будет) — оптимизируешь.

mersinvald ★★★★★
()
Ответ на: комментарий от Virtuos86

Где здесь двойная проверка?

Да вот жеж =)

pub fn unwrap_or(self, def: T) -> T { match self { Some(x) => x, None => def, } }

По поводу преждевременной оптимизации, вот вы как раз и пытаетесь мне это инжектить. Чем вам не нравиться i32? Не привык я работать со всякими сомами =)

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

Gexon
() автор топика
Ответ на: комментарий от mersinvald

удобный API в концепции языка

Заинтриговал, можно подробнее? АПИ мне вообще нужен, очень, для модов к игре.

Gexon
() автор топика
Ответ на: комментарий от Gexon

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

enum НеПривык {
    АТыПривыкай(u32),
    КТакому,
    Коду,
}
anonymous
()
Ответ на: комментарий от Gexon

Где здесь двойная проверка?

Да вот жеж =)

pub fn unwrap_or(self, def: T) -> T { match self { Some(x) => x, None => def, } }

Ты путаешь паттерн-матчинг с if/else.

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

Можешь попробовать открыть для себя чарующий мир Result и определения кастомных ошибок. Хотя, повторюсь, если хочешь писать на Rust, как на турбопаскале и сишке, то никто не мешает. Правда кода будет побольше даже, чем на этих раритетах, потому что borrowing и лайфтаймы сильно стесняют. Но ведь у тебя есть весь диапазон отрицательных чисел. В любом случае, успехов в нелегком начинании.

Virtuos86 ★★★★★
()

Пишем игру 'Убийца доты!' на RUST, Unity3D.

Гульмэн Зе Миддл.

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)
Ответ на: комментарий от Gexon

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

Антипаттерн прям. Смотри error-chain

mersinvald ★★★★★
()
Ответ на: комментарий от Virtuos86

Хорошо, я ошибался. Мне нужно использовать u32 и перечисления для хранения данных, ошибок и прочей служебной информации. Привет Лесникову.

Хотя я сомневаюсь по поводу match, должен же он использовать if

Gexon
() автор топика
Ответ на: комментарий от Gexon

u32

Можно и usize.

Привет Лесникову.

Кто это?

Хотя я сомневаюсь по поводу match, должен же он использовать if

Под капотом примерно то же самое, что и if, но принципиально чуть оптимизированнее. Степень «чуть» зависит от компилятора. Собственно, что мешает тебе самому посмотреть? Идешь на play.rust-lang.org, пишешь примерный код с if/else и match и смотришь выхлоп ASM, LLVW IR или MIR, там и увидишь, во что код разворачивается. Я подозреваю, что твои проверки на ошибки и прочее тоже требуют if/else обвязки.

Мне нужно

Нужность по-прежнему определяется тобой самим. Если проект достаточно развит, то я бы наоборот отсоветовал начинать глобальный рефакторинг. Тебе скорее высказали некоторые соображения на будущее в пользу идиоматичных для Rust (и не только) метод программирования.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Gexon

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

когда переменная не инициализирована

Option.

что-то пошло не так

Error.

theNamelessOne ★★★★★
()

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

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

anonymous
()
Ответ на: комментарий от anonymous

преимущественно из сиренивых и розовых тонов. Это цвета готовых к спариванию гениталей

Крабы на скриншоте недостаточно готовы к спариварию?

grem ★★★★★
()
Ответ на: комментарий от Virtuos86

Хорошо, не буду проводить глобальный рефакторинг.

Мне RPC сейчас нужен, хочу выделить логику крабов в отдельную программу.

Может есть кто опытный в этом?

Gexon
() автор топика
Ответ на: комментарий от Gexon

Может и есть, но не я. Я бы пошел на crates.io и посмотрел, что выдаст поиск по «RPC». Обычно более лучшие пакеты имеют большее число закачек. Выбрал подходящие по описанию возможностей и опробовал на тестовых хелловорлдах. Такой вот алгоритм.

Virtuos86 ★★★★★
()

Когда кто-нибудь уже напишет игру с клиентом на Qt и с сервером на ней же?

EternalNewbie
()
Ответ на: комментарий от grem

Крабы на скриншоте недостаточно готовы к спариварию?

Если перекрасить кактусы, получится вполне популярная игра среди девочек-подростков.

anonymous
()

Unity3D.

Не взлетит.

th3m3 ★★★★★
()

Завершена работа над группами монстров.

Монстры теперь объединяются в группы.

Gexon
() автор топика
Ответ на: комментарий от Deleted

Это был не шоколад

Cuphead, Divinity: Original Sin, Divinity: Original Sin 2, Pillars of Eternity, Ori and the Blind Forest, Cities: Skylines, Firewatch, SUPERHOT, Endless Legend. Это только из списка тех, во что я лично играл.

X10Dead ★★★★★
()

игру 'Убийца доты!' на RUST

Закапывайте.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.