[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Кстати да, есть какие-то успехи?

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Фиг знает) в момент написания той проги я был, я бы сказал, совсем не профи-могут быть баги) пробуй сделать пак карт заново

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
При написании программ часто требуется использовать не только стандартные данные, но и данные, организованные каким-либо образом.
Для этого придумали массивы(а в lua это зовётся таблицами).
Что такое таблица в луа? Это некоторый набор данных, в котором зная некоторый индекс можно узнать соответсвующее значение.
По сути таблица в луа состоит из двух столбцов. Первый - индекс, второй - значение.

Чтобы создать таблицу используется конструктор таблиц.
Пример создания таблиц:

Code
a={}  --пустая таблица
b={1,2,3,4,5}   --таблица с числами
c={"ololo","ulyalyalya"} --таблица со строками
d={"ololo",777} --таблица со разными значениями

Как видно таблица создаётся простым перечислением её элементов в фигурных скобках через запятую.
Данные в таблице могут быть самые разные(любой из восьми типов).
При указанном выше способе индексы у значений будут нумероваться от 1 и по порядку.
Для обращения к элементу таблицы надо использовать квадратные скобки:

Code
c={"ololo","ulyalyalya"}
print(c[1])              --чтение из массива
print(c[2])              --до изменения
c[2]="zzzzzz"            --запись в массив
print(c[2])              --после изменения

Кроме обычного перечисления можно задавать массив таким способом:

Code
a={[1]="zzz",[5]="ppp"}
print(a[1])
print(a[5])

При этом сразу задаются индексы.

Поскольку индекс может быть любым типом, можно в качестве индекса задать строку:

Code
borya={["father"]="petya",["mother"]="marina"}
print(borya["father"])
print(borya["mother"])

Луа позволяет сократить эту запись:

Code
borya={father="petya",mother="marina"}
print(borya["father"])
print(borya["mother"])

То есть эти записи абсолютно эквиваленты(это работает только для текстовых индексов)

Кроме этого для доступа к текстовым индексам можно использовать такую запись:

Code
borya={father="petya",mother="marina"}
print(borya.father)
print(borya.mother)

Данный код очень близок ко многим так называемым объектно-ориентированным языкам, идея которых состоит в том, что данные представляются в форме описания объектов какого-либо класса объектов.
При этом у объектов имеются свойства и доступ к ним обычно произвоится через точку, как в примере выше. В нашем случае у объекта borya есть свойство father и mother.

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

Code
c={}
c[1]=67
c["Vasya"]=22
c[23]={4,5,7,4}

Вы заметили, что элемент с индексом 23 - таблица? Всё верно, элементы могут быть любого типа-числом, строкой, таблицей, функцией и т.д.
Поэтому можно обратиться ко второму элементу таблицы, хранянящейся по индексу 23 в таблице c:

Code
c={}
c[1]=67
c["Vasya"]=22
c[23]={4,5,7,4}
print(c[23][2])      --выведет 5

Так, к примеру, можно создавать двумерные массивы(как таблички в экселе). Для примера переделаем пример из прошлого урока с таблицей умножения так, чтобы все числа хранились в двумерной таблице
Code
umn={}               --тут будет таблица умножения

for i=1,9 do
       umn[i]={}          --добавляем строку(строка-это массив)
       for j=1,9 do
         umn[i][j]=i*j    --в i-ую строку, j-ый столбец записываем произведение
       end
end

--Дальше примерно такой же код как в прошлом уроке
stroka=" "
for j=1,9 do
       stroka=stroka.."  "..j
end
print(stroka)

for i=1,9 do
       stroka=i
       for j=1,9 do
         if umn[i][j]<10 then
           stroka=stroka.."  "..umn[i][j]
         else
           stroka=stroka.." "..umn[i][j]
         end
       end
       print(stroka)
end

Давайте рассмотрим всякие фишки массивов.

Чтобы узнать длину массива используется символ #. Пример:

Code
c={}
c[1]=42
c[2]=24
c[3]=63
print(#c)              --выведет 3

Обратите внимание, что если в таблице встречается такой индекс, для которого значение = nil, то это считается концом массива.
Данный код выведет не 3, а 1:

Code
c={}
c[1]=42
c[2]=nil
c[3]=63
print(#c)              --выведет 1

С помощью этого можно перебрать все элементы таблицы с числовыми индексами до первого элемента, не равного nil:

Code
c={3,53,6,467,7,4,3,4,56,7,8,8,4,2}  --по умолчанию нумеруется по порядку от 1 до длины массива
for i=1,#c do
         print(c[i])
end

В lua есть несколько стандартных функций, объединённых в модуль table(о модулях поговорим позже)

Чтобы сделать из таблицы текстовую строку, понятную человеку используют функцию table.concat, для этого указывается сама таблица, строка, которая будет разделять элементы таблицы, и если надо начальный и последний индекс выводимых значений
Вот формат функции(в квадратных скобках принято писать необязательные параметры):

Code
table.concat (table [, sep [, i [, j]]])

Пример использования:
Code
c={1,2,3,4}
print(table.concat (c, ","))      --выведет 1,2,3,4
print(table.concat (c, " < "))    --выведет 1 < 2 < 3 < 4

При этом подразумевается, что массив с числовыми индексами и не содержит "дыр", то есть нет пропусков индексов.

Чтобы вставить в таблицу значение можно использовать функцию table.insert. Формат вызова:

Code
table.insert (table, [pos,] value)

Ей передаётся изменяемая таблица, место, кдуа встваить значение, само значение. При этом, если место не указано, то значение кладётся в конец массива.
Пример:
Code
c={1,2,3,4}
print(table.concat (c, ","))  --до изменения
table.insert (c, 2, 5)        --вставляем число 5 во вторую позицию. Остальные элементы сдвигаются на 1 позицию вправо
print(table.concat (c, ","))  --после изменения
Выведет:
Code
1,2,3,4
1,5,2,3,4

Функция table.maxn ищет в массиве максимальное положительное значение и возвращает его индекс. Если не найдет, то возвращает 0
Формат:

Code
table.maxn (table)

Фунция table.remove делает обратную функции insert процедуру-удаляет элемент из заданной позиции, сдвигая элементы обратно. Если не указан второй параметр, то удаляет последний элемент:
Формат:

Code
table.remove (table [, pos])

Пример:
Code
c={1,2,3,4}
print(table.concat (c, ","))  --до изменения
table.remove (c, 2)           --Удаляем 2-ой элемент
print(table.concat (c, ","))  --после изменения

Выведет:
Code
1,2,3,4
1,3,4

Функция table.sort сортирует таблицу по возрастанию или в заданном порядке.
Формат:

Code
table.sort (table [, comp])

Второй параметр задаёт порядок сортировки, но мы его рассматривать не будем.
Code
c={5,76,2,3,6,3,5,6}
print(table.concat (c, ","))  --до изменения
table.sort(c)
print(table.concat (c, ","))  --после изменения

Выведет:
Code
5,76,2,3,6,3,5,6
2,3,3,5,5,6,6,76

Теперь ещё одна прелесть lua - есть особый вид цикла для перебора всех элементов таблиц: for .. in .. do .. end
Обычно его используют так:

Code
c={}
c.x=30
c[90]=45
c["vasya"]="petya"
for key,value in pairs(c) do
       print("c["..key.."] = "..value)
end

Выведет:

Code
c[vasya] = petya
c[x] = 30
c[90] = 45

Этот цикл пробегает по всем строчкам таблицы c и заносит в первую переменную key значение индекса, а во второе соответствующее значение(value=c[key])

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

Ну вот на этом закончим наш урок=)



[Прошлый урок]|[Список уроков]|[Следующий урок]


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Некто, если проблемы с инглишом - установи Промт и переводи, или онлайн переводчик найди(благо их достаточно в интернете).

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Короче вопрос. Кто-нибудь играл в текстовые игрушки жанра interactive fiction? Если да, хотите попробовать написать свою?
Я это к чему всё клоню.. Несколько энтузиастов написали движок для таких игрушек, называется instead. Игры в нём пишутся на lua и очень легко.
Вот описание на Gamin, вот форум, а тут можно скачать игру и несколько игрушек.

Я всё это к чему. Проект только развивается, написано уже почти всё, чтобы сделать хорошую игру, не хватает только энтузиастов для написания игр. У большинства форумчан каникулы. + это ещё один способ поучиться lua, которому я учу тут =)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Словами просто не ограничивайтесь! Кто ответил да в любой свободный момент включают W3DMapEdit и делают новую карту. Вот и всё!

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Quote (MarkWarT)
Возьмете в модераторы? Опыт работы есть

В принципе я за. Ты следишь за порядком, иногда напоминаешь по жестокости hitman'а(хотя не всегда это есть хорошо). Если готов заниматься этим, то могу назначить. Условие - не дарить всем, кому ни попади баны, не прикрывать все подряд темы, делать это только в виду необходимости. Сейчас по большей части надо пользователей разговаривать на нормальном русском языке, направлять обсуждение в нужное русло(вспомните, что наш сайт относится к червям, а не к флуду) и следить за соблюдением правил, особенно этих(они, по-моему наиболее часто нарушаются):
.
В случае нарушения правила надо в личку отправлять предупреждение, в случае игнора предупреждения, надо что-то посерьёзней принимать.
Всё) Согласен?


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
MarkWarT-модератор

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
у тебя доступа к файловой системе сайта нет)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Я Герыч-потому что я наркотик, а вообще просто я для друзей Герыч(точнее приятелей, ибо для истинных друзей я-Серёга, Серёжка и т.п.), потому что:
1)Фамилия Герасимов
2)Звучит здорово и по-дружески
3)Меня можно понюхать или поколоться мной)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
очень крутая идея)
Тогда уж нужна новогодняя карта.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Тогда читай тут. Я специально для желающих изучить всё это сочинял!

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
хаха) вот, заговорили)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Оригинально) Жду успехов egokarpo, просто интересно даже, успеет ли он?

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Учись. Начальные знания в моих уроках: http://w4tweaks.ru/forum/76

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
то есть?(попонятней напиши)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
то есть уроки непонятные?

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
там есть примеры) их надо пробовать повторить)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Проги пишут люди, к примеру я) Поэтому эти знания полезны)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Система какая? В висте может по-другому быть, я не знаю

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Поиск: