Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
13.11. Сколько END'ов нужно добавить?
В: Сколько `END`ов нужно добавить?
Пишу такой код:
if силы>0:
if энергия>9:
act "Носить воду с колодца":
ведро=ведро+2
энергия=энергия-10
"Я принёс воды с колодца."
elseif энергия>3:
act "Уныло лежать и ждать, когда восстановятся силы":
энергия=энергия+1
"Я немного полежал. Голова уже не кружится"
end
END
end
end
end
if энергия>9:
act "Носить воду с колодца":
ведро=ведро+2
энергия=энергия-10
"Я принёс воды с колодца."
elseif энергия>3:
act "Уныло лежать и ждать, когда восстановятся силы":
энергия=энергия+1
"Я немного полежал. Голова уже не кружится"
end
END
end
end
end
Плеер говорит, что в многострочной форме оператора остуствует `END`. Но сколько бы `END`ов я ни добавлял, ошибка не пропадает.
О:
Если понимаешь, зачем нужны `END`ы, то становится проще. `END`ом закрывается многострочная форма оператора.
Так выглядит многострочная форма действия:
! ОТКРЫВАЕМ ДЕЙСТВИЕ
act 'действие':
! команда 1
! команда 2
! ...
! команда N
! ЗАКРЫВАЕМ ДЕЙСТВИЕ
end
act 'действие':
! команда 1
! команда 2
! ...
! команда N
! ЗАКРЫВАЕМ ДЕЙСТВИЕ
end
Так может выглядеть многострочная форма условия:
! ОТКРЫВАЕМ УСЛОВИЕ
if условие=1:
! если условие 1 сработало
! команда 1
! команда 2
! ...
elseif условие=2:
! если условия 1 не сработало, но сработало условие 2
! команда 15
! команда 16
! ...
else
! иначе, если ни одно условие не сработало
! команда 49
! команда 50
! ...
! ЗАКРЫВАЕМ УСЛОВИЕ
end
if условие=1:
! если условие 1 сработало
! команда 1
! команда 2
! ...
elseif условие=2:
! если условия 1 не сработало, но сработало условие 2
! команда 15
! команда 16
! ...
else
! иначе, если ни одно условие не сработало
! команда 49
! команда 50
! ...
! ЗАКРЫВАЕМ УСЛОВИЕ
end
Если действие лежит внутри условия, то и закрываться оно должно внутри условия:
! ОТКРЫВАЕМ УСЛОВИЕ
if условие=1:
! если условие 1 сработало
! ОТКРЫВАЕМ ДЕЙСТВИЕ
act 'действие':
! команда 102
! команда 103
! ...
! ЗАКРЫВАЕМ ДЕЙСТВИЕ
end
! команда 1
! команда 2
! ...
elseif условие=2:
! если условия 1 не сработало, но сработало условие 2
! команда 15
! команда 16
! ...
else
! иначе, если ни одно условие не сработало
! команда 49
! команда 50
! ...
! ЗАКРЫВАЕМ УСЛОВИЕ
end
if условие=1:
! если условие 1 сработало
! ОТКРЫВАЕМ ДЕЙСТВИЕ
act 'действие':
! команда 102
! команда 103
! ...
! ЗАКРЫВАЕМ ДЕЙСТВИЕ
end
! команда 1
! команда 2
! ...
elseif условие=2:
! если условия 1 не сработало, но сработало условие 2
! команда 15
! команда 16
! ...
else
! иначе, если ни одно условие не сработало
! команда 49
! команда 50
! ...
! ЗАКРЫВАЕМ УСЛОВИЕ
end
Таким образом исходный пример можно исправить так:
! открываем общее условие
if сила>0:
! открываем вложенное условие
if энергия>9:
! открываем действие
act "Носить воду с колодца":
ведро=ведро+2
энергия=энергия-10
"Я принёс воды с колодца."
! закрываем действие
end
! если первое условие не сработало
elseif энергия>3:
! открываем действие
act "Уныло лежать и ждать, когда восстановятся силы":
энергия=энергия+1
"Я немного полежал. Голова уже не кружится"
! закрываем действие
end
! закрываем вложенное условие
end
! закрываем общее условие
end
if сила>0:
! открываем вложенное условие
if энергия>9:
! открываем действие
act "Носить воду с колодца":
ведро=ведро+2
энергия=энергия-10
"Я принёс воды с колодца."
! закрываем действие
end
! если первое условие не сработало
elseif энергия>3:
! открываем действие
act "Уныло лежать и ждать, когда восстановятся силы":
энергия=энергия+1
"Я немного полежал. Голова уже не кружится"
! закрываем действие
end
! закрываем вложенное условие
end
! закрываем общее условие
end