Пользуйтесь на здоровье
systime()
sysdate() --возвращают дату и время в формате системных функций (т.е. это шестандцатерично-десятичные числа). Надеюсь, в будущем эти функции будут заменены на более цивилизованные функции libc
drawpixel(x,y,c) --поставить точку в окне
drawline(x,y,x1,y1,c) --нарисовать линию
Что еще нужно?:)
Новые функции:Порт LUA (5.2.0)
Спасибо. Лично мне пока хватит. Напишу пару полезных программ и выложу.
Пример 1.lua в самой новой версии Lua не работает.
Не поможешь немного разобраться?
Программа по нажатиям кнопок корректно рисует таблицу умножения (DrawTable), а затем по кнопке должна проверять её (LineChekTable), но что-то не так, не запускается.
Не поможешь немного разобраться?
Программа по нажатиям кнопок корректно рисует таблицу умножения (DrawTable), а затем по кнопке должна проверять её (LineChekTable), но что-то не так, не запускается.
Code: Select all
i=0 --for first myltiply
j=2 --for second multiply
sum=0
x=10 -- first x coordinate
y=30 -- first y coordinate
iy=12 --for next y coordinate
ix=7 -- x coordinate for each next symbol
iTemp=2; --for remember i
result=0; --for result human point in LineChekTable(0
function DrawTable()
for i=2,9,1 do
for j=2,9,1 do
if iTemp<i then
x=x+45
if i<6 then y=30 end
if i>=6 then y=130 end
end
if i==6 then x=10 end
sum=i*j
textout(x,y,0,i)
textout(x+6,y,0,"*")
textout(x+12,y,0,j)
textout(x+18,y,0,"=")
textout(x+24,y,0,sum)
y=y+iy
iTemp=i
end
end
end
function LineChekTable()
for i=2,9,1 do
for j=2,9,1 do
if iTemp<i then
x=x+45
if i<6 then y=30 end
if i>=6 then y=130 end
end
if i==6 then x=10 end
sum=i*j
textout(x,y,0,i)
textout(x+6,y,0,"*")
textout(x+12,y,0,j)
textout(x+18,y,0,"=")
event chekevent()
if event==2 then key=getkey() end
if key==sum then
textout(x+24,y,0,sum)
result=result+1
end
if key<>sum then textout(x+24,y,0,"?") end
y=y+iy
iTemp=i
end
end
end
function drawwin(press)
--here we draw window
redraw(1)
window(10,10,320,240,65069280,2147483903,0)
textout(3,3,0,"Hello world!")
makebutton(240,60,60,30,3,13619151)
textout(245,75,0,"Line test")
makebutton(240,30,60,30,2,13619151)
textout(245,45,0,"Remember")
if press==2 then DrawTable() end
if press==3 then LineChekTable()
redraw(2)
end
press=0
--main loop
while 1==1 do
event=checkevent()
if event==1 then drawwin(press) end
if event==2 then key=getkey()
drawwin(press) end
if event==3 then button=getbutton()
if button==1 then sysexit() end
if button==2 then press=2 end
if button==3 then press=3 end
drawwin(press)
end
end
1) В lua5.2-lib следует вместо redraw(1) и redraw(2) использовать новые функции paintstart и paintend.
2) Если нет необходимости постоянно проверять события (то есть в основном цикле программа ничего не делает), лучше поставить waitevent вместо checkevent, это снизит нагрузку на процессор (хотя, как говорят умные люди, в этом ничего особенно плохого нет - при нормальном планировщике).
3) Что это за строчка -
event chekevent() ?
На нее lua ругается в первую очередь..
Может, event=checkevent() ? Даже если так, лучше использовать другой принцип построения программы. И жить станет лучше, жить станет веселее... За подробностями можно в ЛС
4)Кстати, хинт: lua выводит сообщения об ошибках на доску отладки.
5) Вместо <> нужно использовать ~=. Выпендрились разработчики
6) В одной из функций потерялся end. (В drawwin после if press==3) Чтобы их не терять, советую использовать редактор с подсветкой синтаксиса, использовать табуляцию и всё такое.
7) После нажатия Remember получаю таблицу умножения, а после нажатия Line test она вся расползается, и непонятно, что нужно делать. При этом происходит постоянная перерисовка. Я ничего не делал для убирания её в calc, потому что это была просто маленькая демо-программа, но по-хорошему нужно перерисовывать лишь ту часть окна, где перерисовка требуется. Чтобы облегчить эту задачу, в ближайшее время я добавлю функцию рисования прямоугольника.
Немного исправленный код (в последней версии работает по крайней мере):
2) Если нет необходимости постоянно проверять события (то есть в основном цикле программа ничего не делает), лучше поставить waitevent вместо checkevent, это снизит нагрузку на процессор (хотя, как говорят умные люди, в этом ничего особенно плохого нет - при нормальном планировщике).
3) Что это за строчка -
event chekevent() ?
На нее lua ругается в первую очередь..
Может, event=checkevent() ? Даже если так, лучше использовать другой принцип построения программы. И жить станет лучше, жить станет веселее... За подробностями можно в ЛС
4)Кстати, хинт: lua выводит сообщения об ошибках на доску отладки.
5) Вместо <> нужно использовать ~=. Выпендрились разработчики
6) В одной из функций потерялся end. (В drawwin после if press==3) Чтобы их не терять, советую использовать редактор с подсветкой синтаксиса, использовать табуляцию и всё такое.
7) После нажатия Remember получаю таблицу умножения, а после нажатия Line test она вся расползается, и непонятно, что нужно делать. При этом происходит постоянная перерисовка. Я ничего не делал для убирания её в calc, потому что это была просто маленькая демо-программа, но по-хорошему нужно перерисовывать лишь ту часть окна, где перерисовка требуется. Чтобы облегчить эту задачу, в ближайшее время я добавлю функцию рисования прямоугольника.
Немного исправленный код (в последней версии работает по крайней мере):
Code: Select all
i=0 --for first myltiply
j=2 --for second multiply
sum=0
x=10 -- first x coordinate
y=30 -- first y coordinate
iy=12 --for next y coordinate
ix=7 -- x coordinate for each next symbol
iTemp=2; --for remember i
result=0; --for result human point in LineChekTable(0
function DrawTable()
for i=2,9,1 do
for j=2,9,1 do
if iTemp<i then
x=x+45
if i<6 then y=30 end
if i>=6 then y=130 end
end
if i==6 then x=10 end
sum=i*j
textout(x,y,0,i)
textout(x+6,y,0,"*")
textout(x+12,y,0,j)
textout(x+18,y,0,"=")
textout(x+24,y,0,sum)
y=y+iy
iTemp=i
end
end
end
function LineChekTable()
for i=2,9,1 do
for j=2,9,1 do
if iTemp<i then
x=x+45
if i<6 then y=30 end
if i>=6 then y=130 end
end
if i==6 then x=10 end
sum=i*j
textout(x,y,0,i)
textout(x+6,y,0,"*")
textout(x+12,y,0,j)
textout(x+18,y,0,"=")
event=checkevent()
if event==2 then key=getkey() end
if key==sum then
textout(x+24,y,0,sum)
result=result+1
end
if key~=sum then textout(x+24,y,0,"?") end
y=y+iy
iTemp=i
end
end
end
function drawwin(press)
--here we draw window
paintstart()
window(10,10,320,240,65069280,2147483903,0)
textout(3,3,0,"Hello world!")
makebutton(240,60,60,30,3,13619151)
textout(245,75,0,"Line test")
makebutton(240,30,60,30,2,13619151)
textout(245,45,0,"Remember")
if press==2 then DrawTable() end
if press==3 then LineChekTable() end
paintend()
end
press=0
--main loop
while 1==1 do
event=checkevent()
if event==1 then drawwin(press) end
if event==2 then key=getkey()
drawwin(press) end
if event==3 then button=getbutton()
if button==1 then sysexit() end
if button==2 then press=2 end
if button==3 then press=3 end
drawwin(press)
end
end
Last edited by SoUrcerer on Sat Mar 19, 2011 6:31 pm, edited 1 time in total.
Пример 1.lua должен выглядеть так:
Code: Select all
function drawwin(press)
--рисуем окно
paintstart()
--начинаем рисовать.
--раньше с этого места начиналась боль :D
window(10,10,300,200,65069280,2147483903,0)
--создаем окно
textout(3,3,0,"Hello world!")
--выводим текст
if press==1 then
--создаем кнопку первого цвета, если press==1
makebutton(13,40,180,20,2,3619151)
textout(16,43,0,"It was a button")
end
if press==0 then
--создаем кнопку другого цвета, если press==0
makebutton(13,40,180,20,2,13619151)
textout(16,43,0,"This is a button")
end
paintend()
--заканчиваем перерисовку
end
press=0
--константа перед главным циклом. неплохо было бы вынести их все в отдельный файл, но пока что это не поддерживается
drawwin(press)
--создадим окно
while 1==1 do
--и начинаем вечный цикл
event=waitevent()
--ждем события
if event==1 then
--нужна перерисовка
drawwin(press)
end
if event==2 then
--нажата кнопка на клавиатуре
key=getkey()
--ну и хрен с ней
end
if event==3 then button=getbutton()
--нажата кнопка на экране
if button==1 then sysexit() end
--если у нее номер 1, то программе пора завершить свою работу
if button==2 then
--а если два, то сменим значение press.
if press==1 then press=0 else press=1 end
--Для этого можно было бы использовать логические операторы, но мы прикинемся ветошью и сделаем вид, что не знаем, как это делается
drawwin(press)
--нужно перерисовать окно, потому что цвет кнопки изменился
end
end
end
Кстати новый пример 1.lua не запускается, на доске отладки говориться что-то про символ "#".
ЧЯДНТ?
У меня Lua 5.2, делаю Ctrl+C, открываю gedit, Ctrl+V, сохраняю, копирую в образ с помощью mcopy. Все работает.
У меня Lua 5.2, делаю Ctrl+C, открываю gedit, Ctrl+V, сохраняю, копирую в образ с помощью mcopy. Все работает.
Вот скрин.
- Attachments
-
-
21.jpg (70.43 KiB)Viewed 10187 times
-
Что-то я не пойму. В качестве 1.lua нужно использовать тот код, который я выложил в предыдущем сообщении.
Lua ругается на символ # в строке 42.
Никаких # в этом фрагменте кода нет и в помине. Если используется именно последняя версия lua и последняя версия 1.lua,то возможно, какие-то проблемы с файловой системой. Попробуй скопировать файл на rd и запустить оттуда.
Lua ругается на символ # в строке 42.
Code: Select all
if event==2 then
--нажата кнопка на клавиатуре
key=getkey()
--ну и хрен с ней
end
if event==3 then button=getbutton()
--нажата кнопка на экране
Хотел предложить портировать на Колибри TinyBasic (есть исходники на Си), но почитал про Луну, передумал. Вот интересный материал http://www.gamedev.ru/code/articles/Lua
Соединяй, и здравствуй.
2Sorcerer: Есть у Lua возможность работы с портами? Нужны LPT и СОМ.
Соединяй, и здравствуй.
Для новичков:
Чтобы увидеть результаты работы оператора print () , запустите Board (Доску Отладки и сообщений) и тюкните по кнопке (Kern), чтобы переключить её на (User)
к ТС:
Пока вопросы копятся. Запустил Lua, пример с таблицей вылетает с символом #, только номер строки другой. Стал исключать строки для поиска ошибки. Вот этот код ошибку не дает:
Но стоит после 19 стороки добавить любой код, генерит ошибку:
.....
.....
Еще непонятно, скармливаю выражение :
i[1] = 1
Прога вылетает без сообщений об ошибке на доске. Так и должно быть?
Чтобы увидеть результаты работы оператора print () , запустите Board (Доску Отладки и сообщений) и тюкните по кнопке (Kern), чтобы переключить её на (User)
к ТС:
Пока вопросы копятся. Запустил Lua, пример с таблицей вылетает с символом #, только номер строки другой. Стал исключать строки для поиска ошибки. Вот этот код ошибку не дает:
Code: Select all
i=0
j=2
sum=0
x=10
y=30
iy=12
ix=7
iTemp=2
result=0
function DrawTable()
for i=2,9,1 do
for j=2,9,1 do
print (i, x, iTemp)
if iTemp<i then
x=x+45
if i<6 then y=30 end
if i>=6 then y=130 end
end
end
end
end
function drawwin(press)
paintstart()
window(10,10,320,240,65069280,2147483903,0)
textout(3,3,0,"Hello world!")
makebutton(240,60,60,30,3,13619151)
textout(245,75,0,"Line test")
makebutton(240,30,60,30,2,13619151)
textout(245,45,0,"Remember")
if press==2 then DrawTable() end
if press==3 then LineChekTable() end
paintend()
end
press=0
while 1==1 do
event=checkevent()
if event==1 then drawwin(press) end
if event==2 then key=getkey()
drawwin(press) end
if event==3 then button=getbutton()
if button==1 then sysexit() end
if button==2 then press=2 end
if button==3 then press=3 end
drawwin(press)
end
end
.....
Code: Select all
for i=2,9,1 do
for j=2,9,1 do
print (i, x, iTemp)
if iTemp<i then
x=x+45
if i<6 then y=30 end
if i>=6 then y=130 end
end
print (i, x, iTemp)
end
end
Еще непонятно, скармливаю выражение :
i[1] = 1
Прога вылетает без сообщений об ошибке на доске. Так и должно быть?
Соединяй, и здравствуй.
На доске отладки в режиме kern появляется ошибка с информацией о падении программы?Поздравляю,если так.У вас старое ядро,обновитесь до последней ночной сборки.Если пользуетесь kolibri in win,то у вас лишь один выход-использовать настоящую систему.
Было бы здорово иметь возможность использовать функции из динамических библиотек...
Я об этом уже думал. Много думал. И мало что придумал.
Самый простой вариант - добавить обертки к существующим библиотекам в виде обычных функций, и загружать библиотеки по вызову специальной команды. Т.е. нечто вроде
Я легко мог бы добавить функцию загрузки библиотеки, но что это даст? Нужно как-то импортировать функции, а как это сделать - я понятия не имею. Насколько я понимаю, в lua для этих целей обычно создаются обертки на смеси языков lua и Си - например, luaSDL или luasocket. Все равно уходим к первому варианту...
Если более гибкое решение есть - с радостью воплощу его.
Самый простой вариант - добавить обертки к существующим библиотекам в виде обычных функций, и загружать библиотеки по вызову специальной команды. Т.е. нечто вроде
Code: Select all
import(libini)
libini.open(x)
Если более гибкое решение есть - с радостью воплощу его.
Who is online
Users browsing this forum: No registered users and 3 guests