Вторник, 16 Октября 2018, 11:45

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

Меню сайта
Категории каталога
Создание игр [312]
Статьи об общих понятиях связанных с созданием игр.
Программирование [69]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [123]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [94]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [69]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Сколько всего игр вы прошли?
Всего ответов: 3666
Главная » Статьи » Программирование

Lua для всей семьи. Урок 1: установка и первые программы
В этой серии уроков, которую я задумал, будет обсуждаться язык программирования Lua. Я постараюсь сделать изложение как можно более доступным для начинающих, и именно на них буду ориентироваться. То есть, опытные Lua-кодеры, скорее всего, не почерпнут отсюда ничего нового (уверен, тут они найдут только простор для придирок и замечаний, которые, собственно, с их стороны даже приветствуется), но если у вас за плечами нет богатого опыта программирования, то, думаю, кое-что вы вынесете.

Вся серия не будет подчиняться какой-то системе. Уроки будут последовательно вводить ряд конструкций языка, чтобы уже к третьему или четвёртому уроку вы уже могли писать свои программы. Моя цель - подтолкнуть вас к самостоятельному изучению языка, помочь ощутить его, а не разъяснить от А до Я - если хотите освоить язык полностью, читайте справочное руководство (которое, хоть и скверно, переведено на русский язык: http://www.lua.ru/doc/). Чем раньше вы перейдёте от уроков "для чайников" в Сети к изучению справочника, тем лучше.

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

Lua - популярный, несложный для освоения встраиваемый интерпретируемый динамически типизированный язык программирования общего назначения. Нет, вам необязательно понимать и половины слов, сказанных в предыдущем предложении - главное знайте, что он популярный и несложный. Кстати, простотой, а также маленьким размером дистрибутива (около 150 килобайт), он и заслужил свою популярность. Скрипты на Lua поддерживаются большим количеством приложений, в том числе играми. World of Warcraft и S.T.A.L.K.E.R. используют язык Lua. Мой любимый игровой движок, LÖVE, позволит вам с помощью Lua с лёгкостью создавать разнообразные игры. Как видите, Lua открывает вам немалые горизонты!

Прежде чем мы начнём, вам следует обустроить среду для программирования: то есть, найти программу, которая принимала бы написанный вами код на Lua и исполняла его: интерпретатор. Тут есть три варианта:

1. Скачать официальный дистрибутив Lua с одного из сайтов, поставляющих их.

С официального сайта Lua можно скачать только исходные коды интерпретатора. Однако поизучав http://lua.org/download.html в разделе Binaries, вы можете обнаружить ссылки на сайты с исполняемыми файлами для Windows. Один из них: http://joedf.users.sourceforge.net/luabuilds/. Загрузите оттуда один из архивов (совпадающий с вашей платформой: Win32 или Win64) и распакуйте его куда-нибудь, желательно в каталог с коротким путём: вроде C:\lua. Отныне я буду полагать, что вы пользуетесь Windows, и ваш интерпретатор лежит именно там.

Пользователям операционных систем на базе Linux в этом смысле проще: им достаточно воспользоваться пакетным менеджером и установить Lua из репозиториев. В Debian и Ubuntu это делается командой apt-get install lua, а в Fedora, Red Hat и производных дистрибутивах - yum install lua. Однако не доверяйте мне слепо и обратитесь к справочнику вашей операционной системы, чтобы узнать, как именно это делается у вас.

2. Использовать онлайн-интерпретатор.

Находится по адресу http://www.lua.org/demo.html. На первых порах его может хватить, однако в дальнейшем, когда мы коснёмся модулей, вы будете вынуждены использовать оффлайн-версию. Пользоваться онлайн-интерпретатором очень просто: введите в окошко с текстом вашу программу и нажмите кнопку Run. Программа будет исполнена, в окошке Output покажется вывод вашей программы, а также отчёты об ошибках, если таковые были вами допущены.

3. Использовать IDE.

Например ZeroBrane Studio: http://studio.zerobrane.com/. Есть и другие - поищите в Интернете.

В ходу сейчас две несколько различающиеся версии Lua: 5.1 и 5.2. Я буду ориентироваться на самую последнюю версию - версию 5.2, но обязательно укажу на важные различия между ей и 5.1, так как последняя тоже достаточно распространена. Кстати, Lua 5.1 исполняет код в полтора раза быстрее, чем Lua 5.2, чтобы вы знали.

=== Урок №1 ===


Итак, начнём. Создайте в изолированной от посторонних файлов папке файл main.lua и напишите в него:

Код

-- main.lua --
print("Hello world!")


После чего запустите в командной строке (не забудьте переместиться в директорию с main.lua с помощью команды cd):

Код

> C:\lua\lua.exe main.lua


В ответ интерпретатор Lua выдаст:

Код

Hello world!


В принципе, этого следовало ожидать. В программе мы вызвали функцию print. Функция print принимает произвольное число параметров и последовательно выводит их на экран. В данном примере мы передали ей строку (цепочку символов) "Hello world!". С таким же успехом можно передать в качестве параметра:

Код

print(8) -- какое-нибудь десятичное число
-- выведет: 8

print(0xDEADBEEF) -- шестнадцатиричное число
-- выведет: 3735928559

print("0xDEADBEEF") -- а это строка, не число! Видете кавычки?
-- выведет: 0xDEADBEEF

print(1.35e-4) -- число с плавающей запятой (дробное число)
-- Выведет 0.000135. 1.35e-4 следует понимать как "1.35, умноженное
-- на десять в минус четвёртой степени", если кто не знает.

print( (198*99)-3*500 + 14/88) -- выражение
-- Выведет значение выражения: 18102.159090909. Неплохая альтернатива
-- настольному калькулятору!

print(198/7, "fertilizer", 2^9) -- несколько параметров произвольного
-- типа. Будут выведены значения каждого из них, разделённые знаками
-- табуляции:
-- 28.285714285714 fertilizer 512
-- Обратите внимание, что кавычки вокруг fertilizer не выводятся!

print(1,35) -- два числа, а не десятичная дробь 1,35!
-- Запятая используется для разделения параметров.
-- Выведет:
-- 1 35


Знак "--" - не просто имитация знака тире, которая вставлена для красоты. Знаком "--" в Lua отмечаются комментарии: подсказки для программиста, которые игнорируются интерпретатором, и предназначенные для того, чтобы в коде было легче разобраться. Можете попробовать написать в программе:

Код

-- print("nothing")


Интерпретатор подумает, что это комментарий, и не станет выполнять инструкцию.

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

Код

print "Just one string"


Удобство, безусловно, сомнительное: просто имейте ввиду, что так можно. Вместе с тем, такие вызовы недопустимы:

Код

print 2 -- не сработает, 2 - не строка.
print 2*2 + 6 -- тем более не сработает

str = "string!!" -- присвоили переменной str значение "string!!"
  -- о переменных читайте ниже
print str -- тоже не сработает.


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

В любом хорошем языке программирования возможно объявлять переменные: маленькие контейнеры, которые могут содержать какие-нибудь данные. В Lua это делается таким образом:

Код

<имя_переменной> = <выражение>


Например:

Код

star = 8 -- Теперь в переменной star хранится число 8
wars = "owl" -- В переменной wars - строка "owl"
jedi = 42/2 -- В переменной jedi - число 21
luke = star*jedi -- В переменной luke - число 168 (да, 21 умножить на 8)


Значения переменных и выражений с ними также можно вывести на экран:

Код

print(star, wars, jedi, jedi-star+luke)
-- Выведет:
-- 8 owl 21 181


Только не пытайтесь сложить переменные star и wars - попытавшись прибавить 8 к "owl", вы ничего хорошего не добьётесь!

Как вы должны были заметить, имя у переменной может быть практически любым: главное, чтобы оно не начиналось с цифры. Серьёзно, вы даже можете объявить переменную с названием print, и тогда функция print перестанет работать, потому что имя print станет ссылаться на вновь объявленную переменную. Но есть группа слов, которые запрещено использовать в качестве названий переменных - это ключевые слова языка, с которыми мы пока не познакомились, но на которые точно стоит посмотреть:

Код

  and break do else elseif end
  false for function goto if in
  local nil not or repeat return
  then true until while


Создав переменную с одним из этих названий, вы вызовете ошибку в программе, и работать она точно не будет. Обратите внимание: в Lua 5.1 ключевого слова goto нет, и переменную так назвать можно, но вы лучше так не делайте.
Также учтите, что имена переменных чувствительны к регистру. Это означает, что foo, fOo, fOO и FOO - четыре разные переменные, так что если вы написали имя какой-то переменной строчными буквами, а позднее написали его прописными, то, скорее всего, программа не будет работать корректно.

А теперь один важный момент: что будет если вы, случайно или преднамеренно, обратитесь к несуществующей переменной? В большинстве других языков это вызовет ошибку, но в Lua такая ситуация допустима. Она трактуется так, как будто несуществующая переменная на самом деле существует, но её значение равно nil. nil - запомните это слово! - особый тип значения в Lua, который означает "ничто". Не нуль и не пустую строку (строку вида "" - попробуйте её вывести на экран), а просто ничто. Сравните это с такой моделью: есть два человека, у одного из них есть банковский счёт, но на нём нет денег, а у другого банковского счёта нет вообще. В терминах Lua будет считаться, что на счету у первого - 0 долларов, а на счету у второго - nil. И даже не долларов, а просто nil. Надеюсь, я вас не запутал.

Попробуйте, например, запустить такую программу:

Код

-- main.lua --
foo = "bar"
print(foo, baz)
-- Выведет:
-- bar nil


Таким образом, у переменной baz, которой нет, но считается, будто она есть, значение nil, и функция print понимает это и выводит его на экран в виде строки "nil". В Lua есть хороший метод проверки существования переменной: если значение переменной не равняется nil, то она по крайней мере объявлена. С другой стороны, можно явно объявить переменную, равную nil:

Код

cool_var = nil


Так можно делать, и, хотя это на первый взгляд и кажется глупым, так иногда делают. В последующих уроках вы узнаете, кто и зачем, и наверняка начнёте делать так же. Иногда, конечно же.
Будьте осторожны с nil'ом: напечатать nil можно, но совершать с ним арифметические операции нельзя! То есть, если print(nil) сойдёт вам с рук, то конструкция вроде 99+nil вызовет ошибку, даже если вам бы хотелось, чтобы 99+nil равнялось 99. Поверьте, я тоже огорчился, когда узнал.

Резюме:
1. Мы узнали про функцию print, что она умеет и как правильно вызывать её без скобок.
2. Узнали, как объявлять переменные, как вычислять выражения (правда, совсем немножко), какие могут быть имена у переменных.
3. Узнали про nil, прониклись его мистической загадочностью и обрели уверенность в том, что в будущем многое будем связано с ним.


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

2 + "string";
6 + "14";
"box" - "vox";
1 * "11b"
"148" * "1e6";

3. Напишите программу, которая обменивает две переменные значениями. То есть:
Код

a = 6502
b = 8086

Сделайте так, чтобы a стала равна 8086, а b - 6502. Для этого создайте третью переменную и совершите нехитрые перестановки. Убедитесь, что задача решена правильно, вызвав print(a,b) до обмена и print(a,b) после.
Категория: Программирование | Добавил: -l33t-h4xx- (08 Января 2014) | Автор: Андрей Липовалов
Просмотров: 48179 | Комментарии: 7 | Рейтинг: 4.7/49 |
Теги: Урок 1, Первые программы, скриптинг, урок, установка, для начинающих, для всей семьи, Программирование, Electronic Arts, LUA
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Lua для всей семьи. Урок 1: установка и первые программы», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 7
+0-
6 Дарек   (07 Июля 2016 18:20)
Когда я запустил скрипт у меня выскочило:
stdin:1: <name> expected near '\'
Как это понимать?

+0-
7 supercake2015   (30 Августа 2016 21:39)
supercake2015Бро, запусти через батник, как это сделал я...
C:\lua\works\main.lua\lua.exe main.lua -- Мой путь к программе и моему скрипту Луа
pause -- Переменная "Паузы", то есть что-бы окно консоли не закрылась после завершения сценария скрипта и ожидала подтверждения выхода...

+1-
5 BuRRaTiNOO   (05 Декабря 2014 10:39)
BuRRaTiNOOСтатья добавлена 8 января 2014 года?????Он в будущем?

+0-
4 Black_Ritsar   (26 Июня 2014 22:22)
Black_RitsarВсем привет!
Дайте пожалуйста ответ как пользоваться интерпретатором луа если он даже не запускается а скаченная версия с другова ресурса не работает?
Благодарю за ответ!

+1-
3 -l33t-h4xx-   (10 Января 2014 06:02)
-l33t-h4xx-Я работал не с таким большим количеством движков, чтобы сделать достаточно удачный обзор, хотя идея хорошая, спасибо.

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

+1-
2 beril   (09 Января 2014 02:20)
berilдавно хотел начать изучать луа

+1-
1 sstas   (08 Января 2014 21:59)
sstasдля начала неплохо

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • ShiVa 3D
  • Dark BASIC
  • Imperial Game Engine
  • StemCell Game Engine
  • 3D Rad
  • Mokoi Gaming
  • FBA
  • WindMill
  • Android FPS Maker
  • Clickteam Fusion
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг