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, потому что это была просто маленькая демо-программа, но по-хорошему нужно перерисовывать лишь ту часть окна, где перерисовка требуется. Чтобы облегчить эту задачу, в ближайшее время я добавлю функцию рисования прямоугольника.
Немного исправленный код (в последней версии работает по крайней мере):
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