Подскажите книги\материалы по игрострою
| |
puksus | Дата: Суббота, 28 Октября 2017, 17:59 | Сообщение # 1 |
Пчёлка Зоя
Сейчас нет на сайте
| Хочу привести движок своей игрухи в порядок (а если честнее, снести всё и переписать). Во-первых, мне подсказали вот эту очуменную книгу по паттернам, читаю с удовольствием, очень интересно, всем рекомендую, смотрю на собственный код уже со стороны, довольно забавно. ссылька
Кроме того, хочу реализовать многопоточность в игре и поддержку скриптового языка (скорее всего lua) Может кто подсказать книжек по игровой многопоточности? Крайне желательно чтобы книга (или может, цикл статей?) пробегалась по основным моментам, не слишком углубляясь в детали и была ориентирована именно на создание игр. Потому что читать двухтысячестраничную жирную книженцию, описывающую все тонкости работы винды заунывным языком, нет времени (и желания тоже)
Ну и про практику внедрения скриптовых языков в игры тоже хочется что-нибудь годное нарыть, не хочу велосипеды изобретать и спотыкаться. Потому что хардкодить логику отдельных персонажей, например, прямо в движок мне кажется ущербным. Да и не совсем понятно, до какой степени абстрагировать движок от скриптов. В общем, хочется на эту тему чёнибудь почитать и подумать.
Ну и ещё бы что-нибудь по алгоритмизации. Что лучше, читать Кормена или emaxx? Может, есть ещё какие ресурсы, где годно всё разъясняется?
Ну и по сетям что-нибудь желательно. Игра-то моя не будет поддерживать мультиплеер, но основные моменты в разработке сетевых игр, я считаю, нужно знать, ибо может в любой момент припереть.
PS. Тех литературу на английском читаю почти свободно, так что можно предлагать и чтиво на оном языке. PPS. Я понимаю, что нагуглить можно что угодно, но может, кто-то уже гуглил эти дела до меня и отсеял то, что похуже, и может поделиться ценными знаниями в оном достопримечательном вопросе PPPS. Пишу на с++, поэтому крайне желательно найти книги, завязанные именно на этот язык.
https://vk.com/beezoya
|
|
| |
AlexRabbit | Дата: Воскресенье, 29 Октября 2017, 00:18 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Цитата puksus ( ) Ну и ещё бы что-нибудь по алгоритмизации. Что лучше, читать Кормена или emaxx? Может, есть ещё какие ресурсы, где годно всё разъясняется?
1) Кормен "Алгоритмы. Построение и анализ"
2) Кнут "Искусство программирования" + Вирт "Алгоритмы и структуры данных"
Я ленивый, поэтому часто смотрю тут как уже сделано тут http://www.cs.princeton.edu/~rs/AlgsDS07/ , http://algolist.ru/
Сообщение отредактировал AlexRabbit - Воскресенье, 29 Октября 2017, 02:41 |
|
| |
drcrack | Дата: Воскресенье, 29 Октября 2017, 05:28 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Тут вчера хорошая статья на хабре вышла: https://habrahabr.ru/post/341080/ Просто почитай, чтобы понять, насколько сложны современные движки, и может передумаешь свой велосипед писать с нуля
|
|
| |
puksus | Дата: Воскресенье, 29 Октября 2017, 11:37 | Сообщение # 4 |
Пчёлка Зоя
Сейчас нет на сайте
| AlexRabbit, drcrack, спасибо за интересные ссылки)
https://vk.com/beezoya
Сообщение отредактировал puksus - Воскресенье, 29 Октября 2017, 11:38 |
|
| |
Byurrer | Дата: Воскресенье, 29 Октября 2017, 23:52 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Как на счет стандарта оформления кода? К примеру вот https://habrahabr.ru/post/172091/
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Воскресенье, 29 Октября 2017, 23:52 |
|
| |
puksus | Дата: Понедельник, 30 Октября 2017, 01:24 | Сообщение # 6 |
Пчёлка Зоя
Сейчас нет на сайте
| Ну, не знаю, правила разные бывают. Вот такого кода я не видел вообще никогда. Чёт как-то стрёмно выглядит подчёркивание в конце мембера.
Венгерская нотация, например, орёт делать мемберы через m_ ,и я долгое время называл мемберы примерно так "int mVariable", но сколько ни пишу, в 50% случаев всё равно забываю поставить эту буквочку m, в итоге пишу код, спохватываюсь, что оной буквы нет и лезу исправлять. Кроме того, таким макаром очень неудобно вечно зажимать кнопку shift для первой буквы названия члена после m. Так шо теперь подумываю начать ставить подчёркивание после m и начинать с мелкой буквы. Так же оная нотация орёт называть классы, начиная с пуквы C. И я долго действительно так их называл, но чот надоело, неудобно и некрасиво, так что тут соглашусь со статьёй, что надо просто делать первую букву в названии класса большой и не париться - просто и понятно.
Ну и ещё там пара стрёмных моментов есть, мол, никогда не сокращайте initialize до init (всегда пишу только init), не используйте tab(помойму в сумме меньше нервов будет написать парсер, который заменит при надобности все табы на пробелы, чем истерично жать на пробел, когда надо делать отступы, и отступ с табом выглядит намного опрятнее, чем два пробела, а делать больше пробелов - вредно для большого пальца левой руки + меньше боли, например, при удалении отступов), никогда не полагаться на автоприведение типов (да ну, засорять читабельность кода лишними кастами), специально избегать циклов do-while тоже как-то бредово звучит, ну и ещё там есть несколько бредовых, на мой взгляд, идей.
В общем, очень-очень много спорных моментов.
А так в паре мест кое-что полезное почерпнул.
https://vk.com/beezoya
Сообщение отредактировал puksus - Понедельник, 30 Октября 2017, 01:28 |
|
| |
Byurrer | Дата: Понедельник, 30 Октября 2017, 11:22 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Суть (имхо) венгерской нотации в том, чтобы ставить префиксы, по которым идентифицировать имя, да и для автодополнения очень удобно, к примеру в классе проще написать m и будут выведены все возможные мемберы класса, нежели this->. Помнишь что переменная int типа и достаточно написать i и будут выведены все доступные твои intы. Не можешь вспомнить название класса, вводишь C и автодополнение показывается доступные. И так далее.
Цитата puksus ( ) Чёт как-то стрёмно выглядит подчёркивание в конце мембера. ... В общем, очень-очень много спорных моментов. А так в паре мест кое-что полезное почерпнул.
Согласен, надо брать то что нравится/более подходит под конкретную ситуацию, идеала не бывает.
P.S. Если интересно почитай наш стандарт оформления кода, его мы сейчас внедряем в наш движок, и опробовали на нашем скриптовом языке (ссылки в подписи), и честно сказать стандартом довольны, код единообразный, хоть и есть некоторые отступления))
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Понедельник, 30 Октября 2017, 11:23 |
|
| |
drcrack | Дата: Понедельник, 30 Октября 2017, 12:40 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Мне смешно и грустно одновременно, когда люди всерьез рассматривают использование стандартов из прошлого века Неужели в С++ все так плохо, что это действительно все еще актуально — вписывать тип переменной в ее имя?..
Цитата не используйте tab(помойму в сумме меньше нервов будет написать парсер, который заменит при надобности все табы на пробелы, чем истерично жать на пробел, когда надо делать отступы, и отступ с табом выглядит намного опрятнее, чем два пробела, а делать больше пробелов - вредно для большого пальца левой руки + меньше боли, например, при удалении отступов) Да это ж в IDE настраивается, вообще прозрачно для программистов
|
|
| |
Byurrer | Дата: Понедельник, 30 Октября 2017, 12:43 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| Цитата drcrack ( ) Неужели в С++ все так плохо, что это действительно все еще актуально — вписывать тип переменной в ее имя? Суть не в типе переменной, а в префиксе, для того чтобы добавить дополнительную идентификацию. Понятное дело когда кода до 1000 строк, то это просто глупо, но когда счет идет десятками тысяч, и в разработке участвует не один человек (особенно удаленно) то это становится уже серьезной проблемой.
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
|
|
| |
drcrack | Дата: Понедельник, 30 Октября 2017, 12:52 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Цитата Суть не в типе переменной, а в префиксе Нет, суть в том что это стандарты 1980х годов когда и ООП толком не было И если сегодня в твоем ООП коде получается такая ситуация, что в зоне видимости так много разных сущностей, что без префиксов с ними становится неудобно работать — это тупик, лучше начать заново -) Или как минимум полностью отрефакторить тот класс в котором возникает такая проблема
|
|
| |
Byurrer | Дата: Понедельник, 30 Октября 2017, 15:10 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| drcrack, скажи это ребятам из Microsoft
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Понедельник, 30 Октября 2017, 15:10 |
|
| |
PepsiDimon | Дата: Понедельник, 30 Октября 2017, 15:22 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| Ну могу пожелать только удачи, ведь это сложный ЯП, ну как сложный... Требует много времени.
Если я тебе помог - поставь + в репутацию. Разрабатываю игру 2dMMoRPG vk.com/kj_project - KJ Project On-Line. Подпишись! https://gcup.ru/forum/9-99364-1 - Пост где я выкладываю новости и скриншоты про KJ Project!
|
|
| |
puksus | Дата: Понедельник, 30 Октября 2017, 20:35 | Сообщение # 13 |
Пчёлка Зоя
Сейчас нет на сайте
| PepsiDimon, мне с++ кажется одним из самых простых языков из-за своей прозрачности. Вот возьмём джаву, она работает на виртуальной машине, в ней есть сборщик мусора, в ней дженерики (аналог шаблонов в с++) сделаны кривейшим образом (из-за специфики виртуальной машины). В джаве есть ссылочные типы, а есть обычные, а в с++ всё просто, все типы наравне, а хочешь обращаться по ссылке - собсно явно это и указывай с помощью указателя(или ссылки, которую компилятор потом всё равно в указатель переварит). Если хочешь знать язык на профессиональном уровне, эти все тонкости нужно знать, как, где, что и почему работает. Так что лично для меня джава кажется куда сложнее, чем с++. Мне кажется, на неё нужно убабахать больше времени, чтобы полностью освоить.
Поэтому для меня эта тема - скорее о методах, которые будут общими для всех языков. Но поскольку я любитель с++, то было бы намного приятнее читать обо всём этом на с++, ибо понятнее. Но необязательно.
Да, в с++ есть свои маленькие попки, например, размеры стандартных типов не регламентированы и на разныхз компиляторах тот же int может быть разного размера, и свои кое-какие внутренние хитрости есть, но всё же...
https://vk.com/beezoya
Сообщение отредактировал puksus - Понедельник, 30 Октября 2017, 20:38 |
|
| |
FlyOfFly | Дата: Вторник, 31 Октября 2017, 01:51 | Сообщение # 14 |
заслуженный участник
Сейчас нет на сайте
| Цитата puksus ( ) Да, в с++ есть свои маленькие попки, например, размеры стандартных типов не регламентированы и на разныхз компиляторах тот же int может быть разного размера, и свои кое-какие внутренние хитрости есть, но всё же...
Насколько я знаю, C++ почти весь состоит из undefined behaivor, ну ладно, спорить насчет языков, это уже бред
Сообщение отредактировал FlyOfFly - Вторник, 31 Октября 2017, 01:52 |
|
| |
puksus | Дата: Вторник, 31 Октября 2017, 02:22 | Сообщение # 15 |
Пчёлка Зоя
Сейчас нет на сайте
| Цитата FlyOfFly ( ) C++ почти весь состоит из undefined behaivor Это если ошибки допускать, потому что он довольно низкоуровневый. Он работает шустро отчасти потому, что оставляет на вашу совесть следить чтоб всё было в рамках приличного. Но ошибки в любых языках приводят, собсно, к ошибкам, так что не всё так уж плохо. Раньше я думал, что с++ - бох и что все остальные языки мусор, но через некоторое понял, что каждому языку своё применение. Для приложений, для которых производительность не шибко важна, использование с++ может быть нецелесообразным. В Java и c# есть крутые фичи типа сериализации, которую сложно добиться, не делая язык более высокоуровневым и медленным, также джава - прикольно смотрится в серверных приложениях. Lua хорош для скриптов. И т.д.
https://vk.com/beezoya
Сообщение отредактировал puksus - Вторник, 31 Октября 2017, 02:24 |
|
| |
FlyOfFly | Дата: Вторник, 31 Октября 2017, 06:05 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| Цитата puksus ( ) Это если ошибки допускать, потому что он довольно низкоуровневый. Он работает шустро отчасти потому, что оставляет на вашу совесть следить чтоб всё было в рамках приличного. Но ошибки в любых языках приводят, собсно, к ошибкам, так что не всё так уж плохо. Раньше я думал, что с++ - бох и что все остальные языки мусор, но через некоторое понял, что каждому языку своё применение. Для приложений, для которых производительность не шибко важна, использование с++ может быть нецелесообразным. В Java и c# есть крутые фичи типа сериализации, которую сложно добиться, не делая язык более высокоуровневым и медленным, также джава - прикольно смотрится в серверных приложениях. Lua хорош для скриптов. И т.д.
Соглашусь, сам отношусь к C++ довольно хорошо и понимаю от чего взялись эти undefined behaivor, ну я это сказал в тему насчет прозрачности, в C++ тоже некоторые моменты остаются на волю компилятора и программист не может быть точно уверен, что и как вызываться будет и в каком порядке.
Сообщение отредактировал FlyOfFly - Вторник, 31 Октября 2017, 06:37 |
|
| |
Byurrer | Дата: Вторник, 31 Октября 2017, 09:17 | Сообщение # 17 |
почетный гость
Сейчас нет на сайте
| Цитата FlyOfFly ( ) Насколько я знаю, C++ почти весь состоит из undefined behaivor Это один из самых популярных языков, а UB это лишь из-за отсутствия опыта и навыков. Любой язык можно свести на нет при неумелом подходе.Добавлено (31 октября 2017, 09:17) ---------------------------------------------
Цитата FlyOfFly ( ) в C++ тоже некоторые моменты остаются на волю компилятора и программист не может быть точно уверен, что и как вызываться будет и в каком порядке. Это искусственный интеллект, без него никак))
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
|
|
| |
FlyOfFly | Дата: Вторник, 31 Октября 2017, 11:24 | Сообщение # 18 |
заслуженный участник
Сейчас нет на сайте
| Цитата Byurrer ( ) Это один из самых популярных языков, а UB это лишь из-за отсутствия опыта и навыков. Любой язык можно свести на нет при неумелом подходе.
UB же там, из за того что язык очень зависим от платформы(иначе бы пришлось генерировать код не используя , что-то типо эмуляций нужных операций на других платформа, которая отличается от того под которую писался стандарт), а не отсутствием опыта. Отсутствия опыта это когда ты используешь UB, а потом удивляется:"как перестало работать" - это да, это отсутствие опыта, ну не наличие UB в языке - является результатом отсутствия опыта. Я не прав?
|
|
| |
Byurrer | Дата: Вторник, 31 Октября 2017, 11:37 | Сообщение # 19 |
почетный гость
Сейчас нет на сайте
| FlyOfFly, спорить не буду, кроссплатформом не занимался.
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
|
|
| |
Animan2010 | Дата: Вторник, 31 Октября 2017, 11:50 | Сообщение # 20 |
постоянный участник
Сейчас нет на сайте
| Мне сильно помогла книга Стива Макконнела - Совершенный Код, она обо всем сразу
Anima Games Animan Publishing
|
|
| |
|