[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.44166 Reply
File: london-lua512.png
Png, 64.68 KB, 512×512 - Click the image to expand
edit Find source with google Find source with iqdb
london-lua512.png
Здравствуй, доброанон. Была у меня в детстве мечта: создать свою игру. Тогда я себе это представлял слабо и туманно, в мыслях всё было просто и за недельку. Сейчас я вспомнил об этом (месяца 2-3 назад) и открыл для себя что без яп получится разве что чуть менее чем ничего. Хочется всё таки осуществить мечту, какой бы глупой она не казалась и я полез искать уроки по LUA. Но оказалось всё не так просто, десу. Термины и примеры хлынули мне в мозг сразу без описания синтаксиса и азов и что то я совсем загрустил, но не сдался.Подскажи мне, добрый кодер, с чего и где начать изучать LUA потихоньку и с подробным описанием? Какие именно статьи пригодятся для написания игровой логики с сайта lua.ru ? Что нужно знать о LUA что бы не утонуть в бесконечно непонятных новичку примеров? Познать азы желаю, так сказать. Буду бесконечно благодарен за помощь в этом нелёгком, пока, для меня деле.
>> No.44167 Reply
>>44166
Почему именно Lua?
Lua — это все-таки больше быстрый встраиваемый скриптовый язык, а не язык для написания полноценных автономных программ, то есть язык предназначенный для расширения каких-то функций готовой программы, написанной на другом языке.
Написать автономную программу на нем, конечно, можно, но это извращение и очень ограничивает тебя в нахождении примеров, помощи, готовых библиотек и так далее, да и на какие-нибудь особенные грабли обязательно наступишь.

Если уж брать язык для новичка, то возьми какую-нибудь более популярный сейчас язык с множеством библиотек. Python, например, может хорошо подойти. Если есть планы на изучение веб-интерфейсов, то JavaScript и Node.js могут быть интересными.
>> No.44168 Reply
>>44167
Ну LUA я выбрал для себя не с потолка. Выбор мой падал на Анриал4 или Юнити, но скриптовая логика там на C++, а почитав отзывы но нему я понял что бы изучить этот яп нужно лет на 5 залипнуть в изучение, да и большинство склоняется к тому что его нужно изучать постоянно, "всюжизнь", так сказать. А почитав по LUA загорелся изучить именно его: легкая изучаемость и мощь, как говорят комментарии.
Хотел Питон сначала пробовать, но нарыл только один движок который позволяет использовать этот язык для програмирования, это BigWorld. А он к сожалению закрыт для большинства смертных. Тем более видел что игру можно написать на LUA без вспомогательных языков. Вов, аллоды написаны на нём, на сколько мне известно.
>> No.44169 Reply
>>44168
Я считаю, что это обман. Что луа, что с++, что пыху одинаково сложно выучить. Но луа имеет прототипную модель наследованания, что делает его инопланетным и даже опытному кодеру он сможет отбить клыки, как и джаваскрипт, хотя его тоже многие считают простым. Кроме того, книгу ты взял скорее всего не для новичков, потому что предисловия и "для кого эта книга" не читаешь. 5 лет изучают не С++, а сам кодинг с ООП и всем прочим. В целом не так важно, какой язык, но нужна книга для новичков.
>> No.44170 Reply
>>44168
C++ сложен, но не настолько, что его требуется для какого-то результата учить пять лет. Пять лет — это скорее срок, за который на нем успеешь поработать со всеми популярными концептами, большими библиотеками, наступишь на все распространенные грабли и выработаешь чутье с рефлексами на прошлые и потенциальные грабли.
Но новичку он будет вдвойне сложен, потому что кроме ООП-модели и логики нужно много задумываться о низком уровне, памяти, указателях и всем таком. Да и вообще язык очень запутанный с множеством сложных для понимания концептов.

Лично я с 3D не работал, но пара запросов к гуглу дает, что для питона из интересных 3D-движков существует Panda3D и Blender Game Engine.

Ни одна крупная игра не написана на скриптовом языке полностью. Тот же ВоВ использует Lua только для аддонов и части интерфейсных плюшек, все основное там на C++, которое просто выдает к Lua-интерпретатору ограниченное количество функций.
>> No.44171 Reply
File: C++21day.jpg
Jpg, 108.25 KB, 743×637 - Click the image to expand
edit Find source with google Find source with iqdb
C++21day.jpg
>>44166
Тебе обязательно 3d? Забей. Лучше возьми RPG Maker и иди пилить игоры. Я серьёзно. Так ты утолишь жажду игродела свою. При том довольно таки быстро. Когда поймёшь, что даже для суперпростой игры надо дофига делать.

А если бы я советовал тебе, какой ЯП выбирать в качестве первого, то вот этот бери https://golang.org/ Один из самых простых ЯП, но в тоже время и современных. В него могут даже дети и китайцы. Начать можно вот отсюда https://golang.org/doc/ :
Ман по установке https://golang.org/doc/install
Туториал https://tour.golang.org/
Расширеная инфа по пользованию https://golang.org/doc/code.html
Всяческие приёмы и прочее https://golang.org/doc/effective_go.html
Алсо https://github.com/golang/go/wiki/Learn
Будут вопросы - спрашивай.

А lua это язык довольно таки специфический. И сфера применения у него узкая.

>>44168
> но скриптовая логика там на C++
Не знаю, как на счёт анриала, а скрипты для unity пишутся на урезаном c# в основном. Совсем не тоже самое, что и c++. Но учить придётся тоже достаточно долго, хоть и не на столько.
> Тем более видел что игру можно написать на LUA без вспомогательных языков. Вов, аллоды написаны на нём, на сколько мне известно.
Нет. Они написаны на C++ если речь идёт о клиенте. На счёт серверов не уверен, но тоже что-то подобное. А lua там используется в качестве вспомогательного ЯП.

>>44169
> Я считаю, что это обман. Что луа, что с++, что пыху одинаково сложно выучить.
Неправда. Есть такие понятия как порог вхождения и кривая обучения. C++ один из самых сложных ЯП из всех существующих. Если учить с нуля его, то это будет сложнее чем к хачкелю подобраться.
> Но луа имеет прототипную модель наследованания, что делает его инопланетным и даже опытному кодеру он сможет отбить клыки, как и джаваскрипт, хотя его тоже многие считают простым.
Согласен. Но вся эта байда с ООП вообще не от мира сего. Впрочем для того, чтоб понять, как работают прототипы достаточно попробовать один раз это на своём любимом ЯП реализовать. И всё встанет на свои места.
>>44170
> C++ сложен, но не настолько, что его требуется для какого-то результата учить пять лет.
Пикрелейтед.
>> No.44172 Reply
>>44171
Но Go ведь компилируемый и статически типизированный. Это конечно само по себе нужно во многих случаях, но для полного новичка все-таки больше подойдет интерпретируемый и динамически типизированный язык.
Плюс у того же Питона можно очень облегчить себе жизнь в обучении, если использовать IPython и его возможности по автодополнению всего и вся.
>> No.44173 Reply
>>44172
> для полного новичка все-таки больше подойдет интерпретируемый и динамически типизированный язык.
Интересно, кто начал распускать эту ересь? Найти бы его и показательно посадить на кол, чтобы остальные распространители думали перед тем, как писать.
> интерпретируемый
"Ололо, я полный новичок, написал сотню строк говнокода, но при определённом сочетании условий он валится с синтаксическими ошибками! Читать ошибку мне лень, сама ошибка проявляется всего лишь при каждом третьем запуске через полчаса использования моей мегасофтины - похуй, пусть будет так! Зато при написании я не продирался через через синтаксические и лексические ошибки компиляции, но мне это и не нужно, я же новичок!"
> динамически типизированный
"Числа, строки, объекты? Чота сложно, я же полный новичок! Пусть лучше всё будет нетипизированным и хуй пойми как преобразуется по необходимости. Подумаешь, мой велосипед тормозит на вашей машине - это не мой велосипед говно, а ваш компьютер говно! Зато мне не пришлось лишний раз напрячь мозги."
А потом такие уёбища пересаживаются на статически типизированные языки пишут какой-нибудь говнокод вроде подобного:
Console.Write("Введите число (00-99): ");
int number = ReadNumberFromConsole();

object o = (object)number;
if (o.ToString().Trim().Substring(0, 2).StartsWith("1"))
{
    if (o.ToString().Trim().Substring(0, 2).EndsWith("0"))
    {
        Console.WriteLine("десять");
    }
    else if (o.ToString().Trim().Substring(0, 2).EndsWith("1"))
    {
        Console.WriteLine("одиннадцать");
    }

    // ...

    else if (o.ToString().Trim().Substring(0, 2).EndsWith("9"))
    {
        Console.WriteLine("девятнадцать");
    }
}
else if (o.ToString().Trim().Substring(0, 2).StartsWith("2"))
{
    // ещё 10 веток...
}
else // ... и ещё куча точно такого же кода для разных значений десятков и единиц
На мой вопрос, зачем столько раз преобразовать число к строке, обрезать его, выделять первые два символа и проверять символы в этой подстроке, это чудо начало рассказывать мне про JS, про функцию charAt() и про то, что "ваш тупой C#" не умеет нормально вычленять цифры из числа, поэтому приходится городить такие костыли. Посмотрим, как он на экзамене будет показывать такое говно своему лектору, лол.
>> No.44174 Reply
>>44171
> Неправда. Есть такие понятия как порог вхождения и кривая обучения. C++ один из самых сложных ЯП из всех существующих. Если учить с нуля его, то это будет сложнее чем к хачкелю подобраться.
Проблема в том, что всё равно надо будет приблизиться к нему, на мой взгляд. Потому что GC не избавляет от утечек памяти, не решает проблему загрытия ресурсов тоже. Потому что ты не будешь понимать, как долго работает та или иная операция над хешом, массивом и прочим. Обучение не с С/С++ будет не вполне фундаментальным.
> Пикрелейтед.
Не ну, я думаю, не пять, а два-три бы хватило, если впрячься.
>>44172
Я не согласен. С динамической типизацией как новичёк будет разбираться, почему 0 и '0' - это разное и т.п? Будет вообще очень слабое понимание.
>> No.44175 Reply
>>44173
А чего этот код вообще пытался добиться?
>> No.44176 Reply
>>44175
Вывести число прописью, видимо.

мимо
>> No.44177 Reply
>>44175
Да, этот код должен был вывести число от 0 до 99 прописью. Изначально нём было ровно 100 веток, но я решил (видимо, ошибочно), что для наглядности будет достаточно и этого фрагмента.
>> No.44178 Reply
>>44174
Десять лет назад все задрачивали плюсы и не жужжали, а теперь сложно им.

Я вот начинал с перловки - си намешан с всякой юниксотой консольной, мощный и приятный язык. Потом смог в си без особых проблем.
мимо
>> No.44179 Reply
>>44172
> Но Go ведь компилируемый и статически типизированный.
И это хорошо. Для обучения в том числе. После питона человек не будет даже знать, в чём отличие между int и float. Там дадут "бесконечные" числа и создастся впечатление, что всё так и должно быть. В худшем случае вообще такое понятие, как "тип" будет отсутствовать. Но это ведь база. Это никуда не годится же.

>>44174
> Потому что GC не избавляет от утечек памяти, не решает проблему загрытия ресурсов тоже.
В 95% случаев избавляет.
> Потому что ты не будешь понимать, как долго работает та или иная операция над хешом, массивом и прочим.
Если мы про golang, то ты ошибаешься. Более того. Go учит подходить к этой проблеме правильно. А именно пилить бенчмарки и от них уже плясать. Заучивать, где и какие операции сколько времени занимают это глупо. Оптимизировать надо на уровне алгоритмов. А это делается вне зависимости от ЯП.
> Обучение не с С/С++ будет не вполне фундаментальным.
Я соглашусь на счёт Няшного Си. Но вот кресты точно не для новичков. Совсем. Ни коим местом. Там слишком много того, на что новичку обращать внимание вредно. Слишком сложный ЯП же. В самом начале требуется любой язык не слишком сложный, но и не слишком простой. Желательно современный.

>>44173
> Интересно, кто начал распускать эту ересь? Найти бы его и показательно посадить на кол, чтобы остальные распространители думали перед тем, как писать.
Не стоит. Лучше постарайся внятно и доходчиво пояснить собственную позицию.
> А потом такие уёбища пересаживаются на статически типизированные языки пишут какой-нибудь говнокод вроде подобного:
Справедливости ради, в этом типизация не виновата. Мне захотелось вот это скопипастить тебе:
static char * number(char * str, int num, int base, int size, int precision, int type)
{
	char c,sign,tmp[36];
	const char *digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	int i;

	if (type&SMALL) digits="0123456789abcdefghijklmnopqrstuvwxyz";
	if (type&LEFT) type &= ~ZEROPAD;
	if (base<2 || base>36)
		return 0;
	c = (type & ZEROPAD) ? '0' : ' ' ;
	if (type&SIGN && num<0) {
		sign='-';
		num = -num;
	} else
		sign=(type&PLUS) ? '+' : ((type&SPACE) ? ' ' : 0);
	if (sign) size--;
	if (type&SPECIAL) {
		if (base==16) size -= 2;
		else if (base==8) size--;
	}
	i=0;
	if (num==0)
		tmp[i++]='0';
	else while (num!=0) {
		tmp[i++]=digits[num % base];
		num = num / base;
	}
	if (i>precision) precision=i;
	size -= precision;
	if (!(type&(ZEROPAD+LEFT)))
		while(size-->0)
			*str++ = ' ';
	if (sign)
		*str++ = sign;
	if (type&SPECIAL) {
		if (base==8)
			*str++ = '0';
		else if (base==16) {
			*str++ = '0';
			*str++ = digits[33];
		}
	}
	if (!(type&LEFT))
		while(size-->0)
			*str++ = c;
	while(i<precision--)
		*str++ = '0';
	while(i-->0)
		*str++ = tmp[i];
	while(size-->0)
		*str++ = ' ';
	return str;
}
>> No.44180 Reply
>>44179
> Заучивать, где и какие операции сколько времени занимают это глупо.
Я подразумеваю заучивать оценки через О(). (А они порой весьма нетривиально выводятся иногда, взять те же сортировки и всеразличные двоичные деревья)
>> No.44181 Reply
File: talking_captcha.png
Png, 1.41 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>44180
А я подразумеваю, что по умолчанию это всё бесполезно. Совсем. Мы не пишем двоичные деревья и сортировки. Всё уже написано до нас. Оптимизации стоит делать тогда, когда они необходимы. И первым пунктом идёт именно определение того, что в этих самых оптимизациях есть нужда. Затем надо провести измерения и зафиксировать их в виде бенчмарков. После этого следует определить, что именно стоит улучшать. Во многих случаях это совсем не производительность. Это могут быть операции ввода/вывода в любом виде. Это может быть перерасход памяти. Тут стоит решить, что именно нужно и до какой степени. Далее стоит провести оптимизации алгоритмического уровня эти ваши O(...) по памяти/производительности и рассмотреть смену железа. Если этого не хватает то провести поверхностные оптимизации с микроменеджментом на уровне текущего ЯП. И вот только в случае, если это всё не помогает стоит притрагиваться ко всяким C++ и прочим ассемблерам.

Кроме того стоит помнить, что оптимальный алгоритм на бумажке может быть совершенно бесполезен в реальном коде. Например в случае, где N в этих ваших O(..) имеет малое значение, "эффективный" алгоритм может показывать очень плохие результаты. Или алгоритм может плохо вести себя на современных процессорах. Или ещё чего.
>> No.44182 Reply
>>44181
Ну вот про ассемблер не надо. Если, например, речь идет о обработке изображений и прочих таких нагрузки, где много математики с массивами данных, то ассемблер с SIMD — это первое, о чем стоит задуматься.
>> No.44183 Reply
File: talking_captcha.png
Png, 1.50 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>44182
Если речь идёт о крупных числодробилках, то стоит задуматься о распараллеливании процесса и о GPU. Разумеется после того, как код будет покрыт бенчмарками.
>> No.44184 Reply
>>44181
Как минимум приходится выбирать, какую структуру данных использовать и думать, как строить запросы и обходить эти структуры данных. И всё это делается сразу. Иначе будешь делать что-то очень глупое.
>> No.44185 Reply
>>44183
C GPU много проблем получается. Я как-то читал очень хорошие выкладки по теме вычислений на GPU от разработчиков x264. Там получается такое дело, что на практике невозможно написать быстрый код, который бы мог общаться между потоками на GPU и мог принимать во внимание результаты вычислений по соседним блокам/пикселям, а без этого у алгоритмов страдает визуальное качество результата. Еще медленнее и сложнее получается если требуется логика и общение с кодом, который исполняется на CPU.
SIMD в этом плане намного выгоднее, потому что из ассемблера можно спокойно обращаться и к памяти, и вызывать без всяких проблем C-функции.
Все-таки чистые параллельные числодробилки — это очень узкое применение.
>> No.44193 Reply
>>44179
> В 95% случаев избавляет.
Ага. А джависты и шарписты пишут using/try-with-resources просто так, для красоты, а не потому, что GC хер знает когда дёрнет финализатор. GC только проблемы с памятью решает, а для остальных ресурсов всё равно приходится юзать другие средства.
>> No.44195 Reply
File: talking_captcha.png
Png, 0.99 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>44193
> А джависты и шарписты пишут using/try-with-resources просто так, для красоты, а не потому, что GC хер знает когда дёрнет финализатор.
Они так пишут только по той причине, что у них неудачная модель обработки ошибок и исключительных ситуаций. На сколько я помню, мы говорили о golang.
А так собсна GC для того и нужно, чтоб не беспокоиться о том, когда именно вызываются финализаторы/деструкоры.
>> No.44196 Reply
File: 7jzymx.jpg
Jpg, 36.69 KB, 512×384 - Click the image to expand
edit Find source with google Find source with iqdb
7jzymx.jpg
>>44171
> порог вхождения и кривая обучения
> C++ один из самых сложных ЯП из всех существующих.
> Если учить с нуля его, то это будет сложнее чем к хачкелю подобраться.
Прошел си, плюсы, осемблеры x86 как первые языки. Не могу понять ни хачкель, ни лисп дальше пары глав.
>> No.44197 Reply
File: 1448128188107.png
Png, 0.83 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1448128188107.png
>>44196
Просто ты уже слишком стар.
>> No.44198 Reply
>>44197
15h. Просто я немного глупенький.
>> No.44199 Reply
File: asuka15.jpg
Jpg, 19.57 KB, 410×453 - Click the image to expand
edit Find source with google Find source with iqdb
asuka15.jpg
>>44196
> Прошел
На каком уровне сложности прошёл? Easy (говнолабы и говнокурсачи) или impossible (продакшен с кучей разнообразных платформ)? :3

Для крестов принцип easy to learn, hard to master актуален как никогда... Первое время вроде бы всё просто, не понимаешь чего это дядьки говорят, что язык сложный. А потом начинаешь юзать его на практике и собирать заботливо разложенные подводные грабли. Десятками, без шуток. Начинается депрессия, многие на этом этапе сваливают на более высокоуровневые языки. А многие из тех, кто всё-таки остался, навсегда запираются в каком-то знакомом и более-менее зачищенном от граблей подмножестве крестов и очень болезненно реагируют на всё, что за его пределами. Людей, которые прошли кресты, очень мало.

И если сейчас такие слова как alignment, pointer aliasing, heap corruption, implementation defined, undefined behavior, one definition rule, precompiled header не вызывают боли в сердце - у тебя всё ещё впереди... И заметь, я нигде даже не упоминал о шаблонной магии.

Да, кресты в руках мастера могут творить чудеса, недостижимые на большинстве других языков. Но стоит ли ради этого проходить через всю эту боль? Решать тебе, няша.

мимокрестоблядь-со-стажем
>> No.44200 Reply
>>44199
> На каком уровне сложности прошёл? Easy (говнолабы и говнокурсачи)
Нахуй тогда нуен универ, если всё - говно? Окончил 11 классов, купил военник и пошёл читать книжки с доками. Я должен сказать, 6 лет - это дохуища времени, чтобы бездарно проёбывать его.
>> No.44201 Reply
>>44200
Практика показывает, что студенческий код пригоден только чтобы сдать и выбросить (если студент, конечно, не подрабатывал где-то, где ему ревью устраивали).

Так что насчёт проёбанных 6 лет я бы согласился, но в универе всё же куче других вещей можно научиться, поэтому не впустую. Ну и сейчас можно 6 лет не тянуть, а уйти через 4 бакалавром.
>> No.44305 Reply
>>44200
По секрету скажу, что не во всех универах лабы и курсачи --- говно. Просто люди с годными лабами и курсачами тут, видимо, не сидят.
>> No.44528 Reply
File: logo.png
Png, 10.23 KB, 373×290 - Click the image to expand
edit Find source with google Find source with iqdb
logo.png
Оставлю здесь на всякий случай
>> No.44601 Reply
http://tylerneylon.com/a/learn-lua/
Если более-меннее знаешь английский то осилишь, зная только это уже много чего можно сделать. А если использовать love2d, то можно достойную игру запилить.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]