Пятница, 29 Марта 2024, 12:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: Gnomov  
Форум игроделов » Создание игр и всё, что с этим связано » Обсуждение геймдева » Готовы ли вы выложить свой код?
Готовы ли вы выложить свой код?
afqДата: Воскресенье, 12 Мая 2019, 11:42 | Сообщение # 1
Разработчик
Сейчас нет на сайте
Есть пример программы aseprite, которая есть на github, но также продаётся и в steam. Готовы ли вы выложить код на github, чтобы любой желающий мог понять как ваша игра работает? В таком случае возможно что её никто не будет покупать, все будут качать на github. Я бы например не хотел бы выкладывать код. Пусть мне и нравиться как код написан, но я всё равно не хочу, чтобы кто нибудь его читал и играл бесплатно, кроме меня.
TimKruzДата: Воскресенье, 12 Мая 2019, 13:14 | Сообщение # 2
старожил
Сейчас нет на сайте
Цитата afq ()
чтобы любой желающий мог понять как ваша игра работает

Если в коде нет какого-то know-how (секретный трюк, о котором мало кто знает), который ты хотел бы использовать в своих будущих проектах – то почему бы не выложить? Уверен, 99% игровых проектов не представляют ценности в плане кода...

Цитата afq ()
В таком случае возможно что её никто не будет покупать, все будут качать на github

Этого не произойдёт по ряду причин:
1. Многим удобнее пользоваться Steam, даже если это дороже (удобства стоят денег);
2. Про GitHub знают лишь те, кто хоть как-то связан с IT и хоть как-то шарит в ПО;
3. Не всякий даже продвинутый пользователь осилит сборку игры из исходников;
4. Для сборки потребуется установка компилятора, фреймворков и прочей чепухи;
5. Кроме того, если игра хорошая, всегда найдутся те, кто захочет отблагодарить тебя.

Да и вообще, если ты выкладываешь код в публичном месте – это не означает, что ты разрешаешь что-то с этим кодом делать. Ты можешь написать лицензию, которая разрешает "читать и изучать" этот код, но не разрешает его компилировать и напрямую использовать в других продуктах. Разумеется, это будет уже не "open source", но в образовательных целях кому-то да пригодится...

Или, как вариант, может быть лицензия, которая разрешает компилировать и использовать код только в случае покупки приложения, т.е. игроку по закону всё равно нужно сначала купить, прежде чем "качать на github" (ну это для тех, кто любит всё собирать из исходников, даже если есть готовые бинарики).

Цитата afq ()
но я всё равно не хочу, чтобы кто нибудь его читал и играл бесплатно, кроме меня

ИМХО, если ты выкладываешь код под свободной лицензией, то больше будет проблема от форков, т.е., по сути, клонов игры, которые могут распространяться как и твоя игра (и могут стать лучше и успешнее твоей). Но, опять же, тебя никто не заставляет выкладывать код под свободной лицензией... хотя могу ошибаться (надо почитать правила гитхаба).

Вообще, вся концепция open source, насколько я понимаю, предназначена для того, чтобы люди могли коллективно разрабатывать сложные проекты, использовать чужие наработки для ускорения собственных, поддерживать то, что уже не поддерживается оригинальным автором и т.д. Если переносить на игры, то игра с открытым исходным кодом позволяет любому желающему:
– исправить ошибки, которые не исправил автор;
– добавить любые возможности и контент, которые не хотел/не смог добавить автор;
– убрать или изменить любые имеющиеся возможности и контент;
– взять на себя ответственность дальнейшего развития продукта (например, если автор умер);
– перенести проект на другую платформу (Windows -> Linux, Linux -> Windows и т.д.);
– забрать из игры полезный код, чтобы на его основе сделать совсем другую игру;
– и прочее, и прочее.
Здесь преимущества в том, что твоя игра не остаётся лежать мёртвым грузом после того, как ты бросил/завершил работу над ней, она будет жить и развиваться до тех пор, пока к ней есть интерес хотя бы одного разбирающегося в разработке ПО человека (или хотя бы одного человека с лишними деньгами). С одной стороны ты теряешь контроль над последующими изменениями игры (не можешь наложить вето на какие-либо изменения), с другой стороны разделяешь контроль над игрой на всё человечество, таким образом увеличивая шансы на её благополучное развитие (если она хоть кому-то кроме тебя интересна). Вопрос в том, чего тебе хочется больше – иметь полный контроль или повысить шансы на выживание?..

Т.е. по сути:
Если приоритет на "заработать денег, много денег, а дальше хоть трава не расти" – лучше не выкладывай код.
Если приоритет на "подарить человечеству что-то разумное, доброе, вечное" – разумеется, выкладывай код.

Лично я так и не определил свою сторону в этом вопросе. :D
Правда, меня удерживает от окончательного выбора в пользу open source то, что созданное мной может быть извращено, искалечено и использовано с каким-либо злым умыслом... Всё-таки как-то спокойнее, когда никто чисто физически не может внести изменения в то, что ты ценишь (ну в идеале вообще не публиковать, даже бинарики и скриншоты, ага). Но это уже маразм и я пытаюсь с этим как-то бороться)))


drcrackДата: Воскресенье, 12 Мая 2019, 13:29 | Сообщение # 3
старожил
Сейчас нет на сайте
Цитата
Но, опять же, тебя никто не заставляет выкладывать код под свободной лицензией... хотя могу ошибаться (надо почитать правила гитхаба).

не ошибаешься, есть например https://github.com/Unity-Technologies/UnityCsReference и куча других реп с весьма ограниченными лицензиями
k0feДата: Воскресенье, 12 Мая 2019, 13:54 | Сообщение # 4
BRONX
Сейчас нет на сайте
Цитата TimKruz ()
ИМХО, если ты выкладываешь код под свободной лицензией, то больше будет проблема от форков, т.е., по сути, клонов игры, которые могут распространяться как и твоя игра (и могут стать лучше и успешнее твоей). Но, опять же, тебя никто не заставляет выкладывать код под свободной лицензией... хотя могу ошибаться (надо почитать правила гитхаба)

Но это насколько простой должен быть проект и насколько упорным должен быть тот, кто над этим кодом строит свой проект :)

Добавлено (12 Мая 2019, 13:55)
---------------------------------------------
Я, например, выкладываю код в надежде на то, что кто-нибудь однажды сделает код ревью и укажет на проблемные места.
Для обучения опенсурс отлично подходит.


мой стрим, который я редко включаю, но зато на нём я делаю игры
TimKruzДата: Воскресенье, 12 Мая 2019, 14:49 | Сообщение # 5
старожил
Сейчас нет на сайте
Цитата k0fe ()
Но это насколько простой должен быть проект и насколько упорным должен быть тот, кто над этим кодом строит свой проект

Посмотри на:
– десятки китайских донатных мобильных ММО, отличающиеся только набором спрайтов и парой фич;
– десятки браузерок, построенных на исходниках однажды выстрелившей древней (00-е) браузерки;
– десятки "глобальных" модов на игры типа GTA, которые прикидываются самостоятельными играми;
– сотни модов на большие и старые игры, которые могут менять оригинальную игру очень сильно;
– кучи геймплейно одинаковых мини-игр, созданных для фарма денег с рекламных баннеров.
Очевидно, что будет значительно проще делать некоторые проекты на базе готовой игры, чем разрабатывать с нуля или на каком-то универсальном движке. Разумеется, в итоге получится в той или иной степени клон, и чем меньше будет приложено сил и ресурсов, тем более похожим на оригинал будет этот клон, но в определённых условиях это выгодно. Тем более когда автор оригинала сам предоставил права на модификацию и распространение/продажу производных продуктов.

Ну и потом, если у тебя есть идея игры, и два пути её реализации – целиком с нуля (на универсальном движке) или на базе очень похожей готовой игры – естественно будет выбрать второй путь, если тебе разрешает это делать её автор (или тебе пофиг на копирайт и всё такое, как это было принято раньше). Потому что тогда, возможно, достаточно будет заменить контент и написать свои сценарии, вместо того, чтобы самостоятельно прорабатывать рутину вроде загрузки карты, контроля персонажа, ИИ и т.д.

Так что, возможно, брать за основу сложные проекты даже проще, чем какие-то простые, потому что в них всё за тебя уже сделали)

...Окей, это в случае сферического в вакууме проекта, в котором нет лапши вроде "если поменять эту модель, то код сломается в 20 местах, а если перекрасить второй слева пиксель в этой текстуре, то код сломается в 42 местах". Ну и если тебе для твоего проекта не нужно каких-то супер-пупер фич, а только модельки/картинки свои воткнуть и сюжет запилить...


OrdanДата: Понедельник, 13 Мая 2019, 03:42 | Сообщение # 6
Главный зомби
Сейчас нет на сайте
Для меня мой код это что то интимное) У каждого свои тараканы в голове и всё это отражается в коде, большинство кода что я видел или правил вызывало у меня отвращение потому, что не соответствует моим кодовым фетишам и образу мышления)

Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
martukДата: Понедельник, 13 Мая 2019, 12:30 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Ordan, Обычно это проблемы тех, кто никогда не работал в команде. Я в последнее время пытаюсь идти в сторону шаблонного проектирования, ведь сейчас уже выдумали множество удобнейших архитектур, не говоря уже о различных стандартах оформления кода. Тогда уже и читать чужой код будет удобно, и показывать свой без стыда.

Но свой код я все ровно не покажу =)
TimKruzДата: Понедельник, 13 Мая 2019, 22:18 | Сообщение # 8
старожил
Сейчас нет на сайте
Цитата Ordan ()
Для меня мой код это что то интимное) У каждого свои тараканы в голове и всё это отражается в коде, большинство кода что я видел или правил вызывало у меня отвращение потому, что не соответствует моим кодовым фетишам и образу мышления)

Люто плюсую. Обычно стараюсь писать код "красиво", вне зависимости от языка, чтоб читать было приятно и понятно. Соответственно видя то, что накодили другие люди – порой хочется просто бросить всё, ибо человечество обречено(

Цитата martuk ()
Обычно это проблемы тех, кто никогда не работал в команде

Типа, поработав в команде, становишься таким как все?


pixeyeДата: Понедельник, 13 Мая 2019, 23:37 | Сообщение # 9
Red Winter Software
Сейчас нет на сайте
Цитата afq ()
Есть пример программы aseprite, которая есть на github, но также продаётся и в steam. Готовы ли вы выложить код на github, чтобы любой желающий мог понять как ваша игра работает? В таком случае возможно что её никто не будет покупать, все будут качать на github. Я бы например не хотел бы выкладывать код. Пусть мне и нравиться как код написан, но я всё равно не хочу, чтобы кто нибудь его читал и играл бесплатно, кроме меня.


Кому надо найдут и прочтут ; )
Например на юнити сейчас каждая третья игра) ну в любом случае оч распространненый движок. Если собран под моно то открыть код игры не сложно.



это вот например с этой игрушки

Скажу больше - еще заинджектить можно разного чтобы интереснее игралось XDD
Вопрос твой не имеет смысла ибо выложив проект в доступ ты уже поделился своим кодом.

Цитата
Так что, возможно, брать за основу сложные проекты даже проще, чем какие-то простые, потому что в них всё за тебя уже сделали)

Не проще.


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю



Сообщение отредактировал pixeye - Вторник, 14 Мая 2019, 07:52
afqДата: Вторник, 14 Мая 2019, 00:30 | Сообщение # 10
Разработчик
Сейчас нет на сайте
TimKruz,
Цитата
Так что, возможно, брать за основу сложные проекты даже проще, чем какие-то простые, потому что в них всё за тебя уже сделали)

Ну вот мой проект ты мог бы осилить? https://github.com/xverizex/hacker_version

Там не очень обдуманно я сделал. Но если подправить, то можно и свои задания сделать. Это я писал когда не мог создать свою файловую систему программно. Выложил код, чтобы любой желающий смог создать уровни.

Щас например у меня ежу есть продуманней игра и с программной файловой системой. Всё никак не придумаю взаимодействие с сетью. В той, которую я выложил сеть была статическая. То есть был адрес в файле и он пинговался. А я хочу сделать чтобы добавил компьютер, подсоединил к узлу, дал ip, и можно пинговать. Чтобы была маршрутизация. Чтобы я мог одним компьютером найти другой за другим роутером. Если у меня это получиться, то создавать новые уровни будет проще простого, а если рассматривать ту игру, которую я выложил, то в ней сложно добавлять новые уровни, да к тому же чтобы создать новый компьютер, надо создать новый файл, потом в этом файле сделать файловую систему. Это всё проблемы, потому что сделать сохранение для такой игры будет накладно. Если не продумать всю архитектуру приложения, то можно накосячить. Да и как ты без общения с автором разберёшься где что добавлять? Как создать новые уровни.

Добавлено (14 Мая 2019, 00:32)
---------------------------------------------
Попробуй разберись что я там в terminal.cpp написал.

martukДата: Вторник, 14 Мая 2019, 10:14 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Цитата TimKruz ()
Типа, поработав в команде, становишься таким как все?

Поработав в команде, ты осознаешь важность стандартов. С точки зрения бизнеса, очень важно когда разработчики на одной волне.
Но можешь говнокодить и в соло, никто не запрещает. Вот только код сможешь потом прочесть только ты, и только какой то начальный период.
Для этого и придуманы код-ревью внутри компании, где тебе пояснят кто ты и что ты со своим "собственным" подходом.

Если собираешься писать какую нибудь программу/игру один, то можно позволить себе некоторые вольности, я и сам так поступаю. Но крупные проекты пишутся зачастую группой людей, где действительно нужно быть "как все", иначе скорость разработки упадет, а сложность возрастет в разы.


Сообщение отредактировал martuk - Вторник, 14 Мая 2019, 10:19
k0feДата: Вторник, 14 Мая 2019, 10:58 | Сообщение # 12
BRONX
Сейчас нет на сайте
Раз уж пошёл разговор о стандартах, то непременно советую:
1) "Совершенный код" Макконнелл С.
2) "Building Maintainable Software" (C# Edition/Java Edition), publisher: O'Reilly Media


мой стрим, который я редко включаю, но зато на нём я делаю игры
JackNazaryanДата: Вторник, 14 Мая 2019, 21:05 | Сообщение # 13
старожил
Сейчас нет на сайте
Цитата TimKruz ()
тебя никто не заставляет выкладывать код под свободной лицензией... хотя могу ошибаться (надо почитать правила гитхаба).

На Гитхабе уже даже приватные репозитории можно бесплатно создавать, лицензия уж тем более любая.

Цитата TimKruz ()

– взять на себя ответственность дальнейшего развития продукта (например, если автор умер);

Это уже делается форк. Но да, в этом тоже идея опенсорса.

Цитата Ordan ()
Для меня мой код это что то интимное) У каждого свои тараканы в голове и всё это отражается в коде, большинство кода что я видел или правил вызывало у меня отвращение потому, что не соответствует моим кодовым фетишам и образу мышления)

Пока это просто хобби, вы фрилансер или предприниматель - оно и нормально. Но в корпоративной среде приходиться адаптироваться. И кстати, умение адаптироваться собственно очень важно для подобной карьеры. Как выше верно сказали - мы работаем на бизнес, а ему нужен хороший пульс команды.

Цитата TimKruz ()
Типа, поработав в команде, становишься таким как все?

Если стандарты стоят на каждый оператор и каждый чих - действительно уже армия клонов. Но с точки зрения бизнеса это хорошо.
TimKruzДата: Среда, 15 Мая 2019, 08:50 | Сообщение # 14
старожил
Сейчас нет на сайте
Цитата pixeye ()
Цитата
Так что, возможно, брать за основу сложные проекты даже проще, чем какие-то простые, потому что в них всё за тебя уже сделали)
Не проще.

Ну окей, что проще:
1. Написать 10000 строк кода, предварительно разработав общую архитектуру. Добавить картинки.
2. Выдернуть старые картинки и воткнуть новые картинки. Код никак не изменять.
В обоих случаях тебе нужны новые картинки, но во втором случае ты экономишь кучу времени, взяв готовый проект. И чем сложнее этот проект (чем больше возможностей игры реализовано), тем больше времени ты экономишь, не написав ни одной строчки кода. А если этот код написан хорошо – то и времени на добавление нового будет меньше.

Разумеется, я сейчас говорю о тех самых бизнес-проектах, где всё делается ради выкачивания денег. Здесь, как говорится, "все средства хороши", и использовать свободную опенсурсную игру – только снизить риски, которые возникают при обычном воровстве кода.

А если бы речь шла о расширении кода игры, то тут та же ситуация, что и с готовыми игровыми движками. Можно писать целиком с нуля, а можно взять чужие наработки. И тут уж либо изобретать свой велосипед, либо перебирать детали чужого велосипеда. Вопрос только в том, сколько придётся изобретать и сколько перебирать...

Цитата afq ()
Ну вот мой проект ты мог бы осилить? https://github.com/xverizex/hacker_version

Речь шла про абстрактный, хорошо выполненный проект, а не наброски новичка)
Хотя, мне кажется, такой стиль кода характерен для C/C++ (за это я и не люблю вот это всё си-подобное)... :(

Цитата afq ()
Попробуй разберись что я там в terminal.cpp написал.

Ну дык, писать разборчиво всегда сложнее, чем абы как. Вспомнилось вот чьё-то высказывание (нагуглить не получилось), что-то типа: «Писать код легко. Сложно писать поддерживаемый код.» Или, как вариант: «Легко написать программу, которую поймёт компьютер. Сложно написать программу, которую поймёт другой человек.»

Конечно, я сам тот ещё "программист", но могу посоветовать следующее:
1. Нужно обязательно разбивать любые большие подпрограммы на маленькие, иначе пока дочитаешь до середины, забываешь, с чего всё началось, где ты и кто ты. В идеале тело подпрограммы не должно содержать больше 6-8 отдельных сущностей, поскольку большее число сущностей мозг удержать во внимании одновременно не может (читая следующую строку, одна из предыдущих "вылетит из головы").

2. Обязательно давать читаемые имена. Даже классический счётчик "i" лучше назвать читаемо, чтобы было понятно, что конкретно он будет считать (например, Row и Column вместо i и j для счётчиков строк и столбцов таблицы). Даже если из самого кода понятно, что может обозначать имя из одной-двух букв, всё равно на мысленный разбор кода будут потрачены время и силы, тогда как читабельные имена распознаются мозгом практически мгновенно. Да, печатать дольше, но лучше потратить больше времени на печать, чтобы сэкономить время на чтении в будущем.

3. Извлекать все константы, не связанные с логикой кода, куда-нибудь в другое место. Лучше в отдельный файл. И обращаться к ним по читабельным именам, а не по индексам. В случае числовых констант гораздо проще понять имя FirstElement, чем разбираться, "почему здесь не ноль?" (не важно, почему так; важно, что это "первый элемент"). В случае текстовых констант (строк) нам требуется знать только то, что "здесь вывод строки GreetingMessage", и не цепляться взглядом за лишнюю информацию, которая содержится в строке (мало ли какое там "приветствие", оно в будущем может на три экрана раздуться, а логика останется прежней).

В идеале в коде вообще не должно быть безымянных констант. Разумеется, если где-то нужен "просто ноль" – называть его "Zero" не нужно, но если этот ноль имеет какое-то важное значение, которое с чем-то связано (мы не зануляем переменную, а присваиваем ей конкретное значение), то нужно показать, с чем это значение связано. Можно, конечно, писать комментарии, но всегда лучше выглядит обращение по имени, чем лишняя строчка комментария.

4. Не делать далеко идущих связей. В идеале, если из твоего кода выдернули одну подпрограмму, то она должна продолжать работать, как будто ничего не изменилось (разумеется, пока известны все вложенные в неё подпрограммы). И самое главное, эта выдернутая из кода подпрограмма должна быть понятна без ознакомления с остальным кодом. Заголовок говорит, что эта подпрограмма делает, тело говорит, как она это делает, и не должно быть необходимости "сбегать в другой файл, чтобы понять, что здесь вообще происходит". Потому что если подпрограмма ничего не говорит о себе без ознакомления с её соседями, можно попасть в ловушку, когда ты уже три часа исследуешь код, пытаясь понять, чем занята первая попавшаяся функция.

Короче, хороший код – это когда ты ткнул пальцем в любую строчку, и уже знаешь, кому она принадлежит, чем занимается и зачем здесь нужна. Но для этого код нужно писать человеческим языком, а не кучей закорючек и спецсимволов. И любой ЯП это позволяет сделать (даже Ассемблер с макросами-вставками).

Да, кстати, есть такая холиварная тема, как "читабельность языков", и многие языки стремятся её повысить (Ada - за счёт многословия, Python - за счёт строгого требования отступов, и т.д.). Вот только на самом деле читабельность кода зависит от того, кто его пишет, а не от того, на каком языке он написан. Невозможно правилами языка заставить программиста давать корректные имена переменным, например. Так что возможные оправдания "я пишу на C++, он по определению сложный" сразу не катят, C++ не запрещает писать код понятно.

А так и я могу скинуть исходники тетриса, который я написал в 2012, и, попытавшись через несколько лет добавить новый пункт в главное меню, сломал вообще всё. При том код компилировался нормально, но в его поведении я так и не разобрался, потому что приходилось бегать глазами по более чем двум тысячам строк))) С тех пор стараюсь такой запутанный код не делать.

Вообще, идеальный ЯП – Forth. В нём нет ничего лишнего, только объявление новых "слов" (команд) из набора имеющихся. Это просто гениальный язык, который может быть таким, каким хочешь. А форт-машина настолько проста, что любой может написать свою с нуля, и начать на ней работать... Плюс, принципы Форта можно использовать на любом другом ЯП (так-то сам по себе Форт не очень применим на практике, несмотря на все преимущества).

Цитата martuk ()
Поработав в команде, ты осознаешь важность стандартов.

Их много. У Васи один стандарт, у Пети другой. Как им без начальника сработаться? Мы же тут обсуждаем опенсурс, в котором каждый может притащить кусок своего кода в общий проект, и никто никому не обязан. Кроме того, команда команде рознь, команда школьников без опыта работы – тоже "команда".

Цитата martuk ()
Но можешь говнокодить и в соло, никто не запрещает. Вот только код сможешь потом прочесть только ты, и только какой то начальный период.

То есть, по-твоему, если я не могу прочитать чужой код, написанный по стандартам военной секретности*, то я обязательно пишу абы как, без какого-то своего собственного стандарта?

*Имена из одной-двух букв, магических чисел больше чем операций над ними, дёргать глобальные переменные в рандомных местах, подпрограммы на пять экранов, вложенность циклов на три экрана, прыжки по коду через goto (чтобы выбраться из тех самых циклов), использование недочётов языка/компилятора в качестве "оптимизации", принципиальное отсутствие комментариев кроме предсмертных записок и криков о помощи – лишь бы враг не узнал, чем реально занимается эта программа, и всё это выглядит как какой-то негласный стандарт...

Хорошо, хоть автоформатирование придумали. Плохо, что у каждого оно настроено на какую-то свою систему правил.

Цитата martuk ()
пишутся зачастую группой людей, где действительно нужно быть "как все", иначе скорость разработки упадет, а сложность возрастет в разы.

А что, если я не хочу быдлокодить как все? Я хочу писать красивый, понятный код. Чтобы его читать было приятно, не спотыкаясь взглядом о всякую фигню. Я бы мог писать частоколом непонятных символов, как это делают все, но зачем мне делать себе же хуже?

Мне кажется, нечитабельный код пишут хейтеры begin..end из алгол-подобных языков. Ведь это они жалуются, что вынуждены писать 8 символов вместо двух. Конечно, быстрее набрать цепочку из спецсимволов, чем текст, но о том, как люди будут это читать (машине-то всё равно), никто почему-то не задумывается...

И я совершенно не понимаю, почему половина человечества мечтает "общаться с компьютером на человеческом языке", а другая общается с этими компьютерами на максимально нечеловеческих языках, несмотря на возможность так не делать... Можно было бы понять, если эти специальные коды было бы легче воспринимать, чем простой текст, но разве это так? Программирование ни разу не математика, мы оперируем реальными вещами (кроме случаев, когда вычисляется математическая формула, но это всегда делается для чего-то, а не просто так), так не надо втягивать сюда огромные формулы из отдельных символов.

Да, у меня бомбит.
Да, раньше я допускал те же самые ошибки.
Но почему-то я догадался, в чём суть процедурного подхода (назвать кусок кода именем, чтобы он был понятен), а большинство считает это чепухой и продолжает нагромождать безымянные горы команд, говоря "так быстрее".

А ещё кто-то говорит, что, мол, слепой ввод программисту не нужен, скорость печати значения не имеет и т.д. Конечно, когда каждую клавишу ищешь глазами – ни о каких длинных именах и дополнительных конструкциях (объявления подпрограмм) даже думать не хочется, ведь их все печатать нужно.

И не надо про оптимизации, что лишний вызов подпрограммы замедляет программу, что длинные имена занимают больше места на диске и т.д. Мы не в 90-х, а если хотите что-то оптимизировать – скажите это тем, кто берёт огромный фреймворк ради одной примитивной функции, и весь этот фреймворк загружается из интернета в память браузера при каждом посещении сайта. От читабельного кода никто не помрёт, а сведение высокоуровневого кода к набору спецсимволов убивает весь смысл в высокоуровневых языках (хотите непонятности – пишите сразу в машинных кодах, заодно и наоптимизируетесь).

Сорри за многабукв и если вдруг я снова в чём-то заблуждаюсь)


martukДата: Среда, 15 Мая 2019, 10:06 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
Цитата TimKruz ()
А что, если я не хочу быдлокодить как все? Я хочу писать красивый, понятный код.

Для этого есть корпоративная вики, где описаны правила и приложены ссылки на официальные доки. Если не соблюдать тот или иной стиль кода, то его просто не пропустит git с правильно настроенным валидатором (CI / CD). Каждый грамотный проект, даже если он опен-сорсный и его разработкой занимаются много людей с разных уголков света, должен иметь CI и группу людей, которые модерируют любой ваш коммит.

Добавлено (15 Мая 2019, 10:08)
---------------------------------------------
Цитата TimKruz ()
Сорри за многабукв и если вдруг я снова в чём-то заблуждаюсь)

Может быть и заблуждаешься, но я вижу огонь в твоих глазах - и это хорошо!)


Сообщение отредактировал martuk - Среда, 15 Мая 2019, 10:21
pixeyeДата: Среда, 15 Мая 2019, 10:17 | Сообщение # 16
Red Winter Software
Сейчас нет на сайте
TimKruz,

1. Каким бы понятным код не казался автору - другие не всегда будут его таким находить, ты то его видишь каждый день и очень долго. В слепую можешь сказать примерно что где. Более того скорее всего уже давно в голове визуализировал ( мнемотехника ). Абсолютно не имеет значения для посторонних как ты пишешь. Ваша группа должна быть на одной волне и писать единообразно. Тем кто работает над конкретным кодом он должен быть "понятен" и не более. Если все адекватно и структуризировано можно разобраться при необходимости в чужом коде даже если ты находишь его "некрасивым". ( Тому кто тебе платит глубоко ***** красивый код или нет )

Цитата TimKruz ()
И не надо про оптимизации, что лишний вызов подпрограммы замедляет программу, что длинные имена занимают больше места на диске и т.д. Мы не в 90-х,

Ты очень, очень сильно сейчас заблуждаешься : ) Нормальные люди ( я даже сейчас не применяю это к сфере программирования ) стараются не усложнять себе жизнь. Программиисты тут ничем не отличаются. Но если бы было все так просто все бы писали игры на lua. Ну ты ж не думаешь что одной половине открыто сакральное знание простоты, а эти казалось бы умные программисты зачем-то пишут непонятную простым смертным херь. Просто чтобы позлить другую половину.

Фантазии, амбиции и масштабы игр растут быстрее чем обновляется железо которое на тех же консолях оставляет желать лучшего ( ровно столько сколько надо ).

Оптимизировать все подряд - глупо, но точно не надо принижать труд людей которые делая низкоуровневые вещи позволяют тебе писать так высокоуровнево как ты хочешь : )


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю



Сообщение отредактировал pixeye - Среда, 15 Мая 2019, 10:22
k0feДата: Среда, 15 Мая 2019, 12:27 | Сообщение # 17
BRONX
Сейчас нет на сайте
Цитата TimKruz ()
И не надо про оптимизации, что лишний вызов подпрограммы замедляет программу, что длинные имена занимают больше места на диске и т.д. Мы не в 90-х

Вот поэтому в Стиме так много лоуполи игр и прочие kinda meh graphics, которые грузят мой средний пк (1050, i5-7th) на 90%
"Мы ж не в прошлом" не совсем правильный подход.



мой стрим, который я редко включаю, но зато на нём я делаю игры
afqДата: Среда, 15 Мая 2019, 13:52 | Сообщение # 18
Разработчик
Сейчас нет на сайте
TimKruz,
Цитата
Речь шла про абстрактный, хорошо выполненный проект, а не наброски новичка)

С чего ты взял, что сможешь разобраться в сложном проекте, если даже в моём не можешь? Зайди в main.cpp и посмотри что получилось в итоге, как создаётся всё. И пофиг что не по 18 строк кода функция. Она требует больше строк кода. Лишние вызовы других функций ни к чему. Если для тебя это наброски, то ты просто должен был узнать что как там работает. А я тебе напишу. Потому что ты не поймёшь. Все действия происходят в файлах. Если ты хочешь перейти в другой каталог, то ты переходишь в файле на нужный inode. Как в файловой системе. Чтобы посмотреть файл. Нужно прочитать блок память с размером в 512 байт, если файл занимает больше места, то после это блока памяти будет указатель на следующий блок памяти, который надо прочитать. Я тебе описал часть работы. В коде это можно сделать в единственное варианте, который приходит на ум. Ты бы не понел как что делать. Но зато можно потом легко создать компьютер и добавитть каталоги и файлы.
Код

    Terminal *zex = new Terminal ( "data/zex.hdd" );

    zex->id = hosts::ZEX;
    zex->debug_off ( );
    zex->cmd_mkdir ( "/home/zex" );
    zex->cmd_mkdir ( "/var/log" );

    /* programs */
    zex->cmd_mkdir ( "/bin" );
    zex->cmd_touch ( "/bin/exit" );
    zex->cmd_touch ( "/bin/cd" );
    zex->cmd_touch ( "/bin/mail" );
    zex->cmd_touch ( "/bin/ls" );
    zex->cmd_touch ( "/bin/ftp" );
    zex->cmd_touch ( "/bin/cat" );
    zex->cmd_touch ( "/bin/telnet" );
    zex->cmd_touch ( "/bin/ssh" );
    zex->cmd_touch ( "/bin/scp" );
    zex->cmd_touch ( "/bin/ping" );
    zex->cmd_touch ( "/bin/phenix" );
    zex->cmd_touch ( "/bin/man" );
    zex->cmd_touch ( "/bin/cash" );
    zex->cmd_touch ( "/bin/nslookup" );
    zex->cmd_touch ( "/bin/traceroute" );
    zex->cmd_touch ( "/bin/whois" );
    zex->cmd_touch ( "/bin/nmap" );
    zex->cmd_touch ( "/bin/wireshark" );
    zex->cmd_touch ( "/bin/harp" );
    zex->cmd_touch ( "/bin/mg" );
    zex->cmd_touch ( "/bin/ape" );
    zex->cmd_touch ( "/bin/ftpaxe" );
    zex->cmd_touch ( "/bin/dnsh" );
    zex->cmd_touch ( "/bin/dhh" );
    zex->cmd_touch ( "/bin/mys" );

    zex->cmd_mkdir ( "/var/mail" );
    zex->cmd_touch ( "/var/mail/zex" );
    zex->set_data ( "/var/mail/zex", mail0 );

Добавлено (15 Мая 2019, 14:09)
---------------------------------------------
TimKruz, я вот читал исходный код nginx. И что ты думаешь, код хорошего программиста легко читается? Это не совсем так. Там записано его мышление. И зачастую его мысли сложнее понять. Я что-то понимал, но долго читал. Каждую функцию. Вроде бы потом становилось легко понять где и что. Но вот если бы я захотел бы модуль написать к nginx, я до сих пор незнаю как модуль написать.

Добавлено (15 Мая 2019, 14:11)
---------------------------------------------
В своей игре я уже сделал мультиязычность, и теперь все тексты беруться из файлов. И данные задаються вот так

Код

zex->set_data ( "/var/mail/zex", words[1] );
TimKruzДата: Пятница, 24 Мая 2019, 10:30 | Сообщение # 19
старожил
Сейчас нет на сайте
Цитата martuk ()
Для этого есть корпоративная вики, где описаны правила и приложены ссылки на официальные доки. Если не соблюдать тот или иной стиль кода, то его просто не пропустит git с правильно настроенным валидатором (CI / CD). Каждый грамотный проект, даже если он опен-сорсный и его разработкой занимаются много людей с разных уголков света, должен иметь CI и группу людей, которые модерируют любой ваш коммит.

С этим согласен... Похоже, я пока просто не встречал грамотных проектов)
...ну, или я просто на самом деле немогутор в серьёзное программирование(

Цитата martuk ()
Может быть и заблуждаешься, но я вижу огонь в твоих глазах - и это хорошо!)

Хорошо, если это тот огонь, о котором ты думаешь, а не пожар моей депрессии)))) *ещё много якобы весёлых скобочек*

Цитата pixeye ()
Тем кто работает над конкретным кодом он должен быть "понятен" и не более

Эм, где-то вычитал, что по отношению к коду "красиво" = "понятно".

Думаю, это как-то связано с психологией, ведь нет никаких биологически обусловленных признаков "красивого кода". Вот если ты легко понимаешь конкретный код, то его чтение доставляет тебе удовольствие (в противовес страданию от состояния ЯНИЧЕГОНЕПОНЯЛ при чтении непонятного кода), а то, что доставляет тебе удовольствие — очевидно, должно быть чем-то "красивым", ибо нечто "уродливое" удовольствия как правило не доставляет.

Кстати, если проводить параллель с текстами на естественных языках — всегда приятнее тот текст, что легче читать. Об этом не говорят как о какой-то "красоте", но ведь именно из-за этого в Интернете не принято писать зАбОрЧиКоМ, писать всё сообщение капсом и т.д., потому что читать становится сложнее и неприятнее. В общем, думаю, "красота" и "понятность" тут связаны.

Совсем другое дело, что понятность субъективна, это да)

Цитата pixeye ()
Тому кто тебе платит глубоко ***** красивый код или нет

Им потом этот код в будущем поддерживать придётся (не лично, а организации, если речь об этом). Что, совсем плевать, какой код поддерживать?

Цитата pixeye ()
Цитата TimKruz ()
И не надо про оптимизации, что лишний вызов подпрограммы замедляет программу, что длинные имена занимают больше места на диске и т.д. Мы не в 90-х,
Ты очень, очень сильно сейчас заблуждаешься : )
Цитата k0fe ()
Вот поэтому в Стиме так много лоуполи игр и прочие kinda meh graphics, которые грузят мой средний пк (1050, i5-7th) на 90%
"Мы ж не в прошлом" не совсем правильный подход.

pixeye, k0fe, я тут опять простыню накатал, но потом одумался.
Если кратко: оптимизации кода не должны быть во вред читаемости кода.
Какой толк от того, что ты выигрываешь 5 микросекунд на исполнении кода, который не можешь расширить, дополнить, и т.д.? Давайте все просто машинные коды набирать, нам же не нужно потом в этих кодах разбираться...
Есть масса способов писать и понятно, и оптимально. Но почему-то люди предпочитают оправдывать свой грязный код мистическими "оптимизациями", в которых они потом сами разобраться не могут...

А игры в стиме такие тормозные, потому что простые движки/конструкторы доступны всем, а технический склад ума и необходимые знания доступны не всем. Сегодня у людей понимание того, чем они занимаются, возникает позже, чем они получают возможность создать новый игровой суперхит и срубить кучу бабла. Потом они понимают, что было бы неплохо улучшить своё творение, но, оглядываясь по сторонам, видят сотни таких же глючных и тормозных проектов, и справедливо решают "ну, раз тут так принято, то зачем мне напрягаться?"... Так что, возможно, во всём этом бардаке виноваты как раз те люди,
Цитата pixeye ()
которые делая низкоуровневые вещи позволяют тебе писать так высокоуровнево как ты хочешь
:D

Цитата afq ()
С чего ты взял, что сможешь разобраться в сложном проекте, если даже в моём не можешь?

В твоём я даже суть не понимаю. Ты создаёшь как бы эмулятор ПК, но при этом у тебя в основном работа с файлами выдуманной файловой системы... Ты же на C++ пишешь? Где ООП? Где Computer.Create("zex")?

Цитата afq ()
Зайди в main.cpp и посмотри что получилось в итоге, как создаётся всё. И пофиг что не по 18 строк кода функция. Она требует больше строк кода. Лишние вызовы других функций ни к чему.

Ты прав. Лишние вызовы ни к чему. Поэтому мой игровой движок максимально прост:
Код
begin
  GameEngine := TGenGECore.Create(Configuration);
  GameEngine.Run;
end.

Дальше он делает всё сам. Магия? Не думаю)


afq, а что должно симулироваться на этих твоих виртуальных ПК, у тебя ведь там не настоящие операционки и программы... Неужели целиком весь терминал эмулируешь, со всеми этими dd, man, sudo?.. Мне просто интересно, насколько быстро я мог бы сделать сравнимый аналог на Pascal (со стороны игрока), но разбираться в чужом коде ради этого совсем не хочется)


afqДата: Пятница, 24 Мая 2019, 12:04 | Сообщение # 20
Разработчик
Сейчас нет на сайте
Цитата
afq, а что должно симулироваться на этих твоих виртуальных ПК, у тебя ведь там не настоящие операционки и программы... Неужели целиком весь терминал эмулируешь, со всеми этими dd, man, sudo?.. Мне просто интересно, насколько быстро я мог бы сделать сравнимый аналог на Pascal (со стороны игрока), но разбираться в чужом коде ради этого совсем не хочется)

TimKruz, нет, весь терминал не эмулирую. Например, которую щас игру делаю, там есть всего несколько функций. Пока что команда запускается если она присутствует в каталоге /bin. Парсер опеределяет какую команду запустить и запускает с аргументом. У меня реализовано всего несколько простых команд, это переход по каталогам, просмотр файлов, просмотр каталогов. Далее будут ещё реализованы другие команды, в основном для сетевой деятельности. Также реализованые команды ping и трассировки маршрута. В игре будет несколько провайдеров интернета, клиент может быть от другого провайдера. Если я нахожусь у одного провайдера, я не могу пропинговать или отследить маршрут до внутренних серверов другой компании. Но если я взломаю хотябы шлюз или клиента компании, то смогу получить доступ к связи к внутренним серверам. Утилиту ping и traceroute делал несколько дней, около двух. Уделяя почти час на это или больше. То есть я сначала сделал, где-то за день за час или более, но потом через несколько дней обнаружил что не совсем логично сделал, и вот тут то я заморочился. Было сложно врубиться в работе рекурсивной функции, но я всё таки справился. Вот например немного с ошибками, но уже что-то есть из создании интернета.
Пока это только тестируется, потом когда доработаю функционал, может быть создание соединений будет ещё упрощено. Пока что у меня надо соединять указывая какой порт подключить к какому.

Я сначала делал сеть отдельным проектом, потом просто наследовался от класса, благо в c++ можно множественное наследование использовать.
Форум игроделов » Создание игр и всё, что с этим связано » Обсуждение геймдева » Готовы ли вы выложить свой код?
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг