Форум переехал на новый адрес: http://qsp.su



АвторСообщение





ссылка на сообщение  Отправлено: 02.10.09 23:16. Заголовок: портирование книги "космический коммандос"


вопрос:
проигрыватель утверждает что в данной конструкции ошибка - не хватает слова end завершающего многострочную форму оператора...
что не так?

if #спротивника>0 and #стойкость > #корректировка: 
if #laz=1:
act 'Выстрелить из лазера':
*pl'Вы стреляете в робота из лазера.'
if rand(1,6)+rand(1,6)>#мастерство:
*pl'Вы промахнулись.'
else
#спротивника=#спротивника-2
end
if #спротивника>0:
if rand(1,6)+rand(1,6)>#мпротивника:
*pl'Противник промахнулся.'
else
if #защита > 0:
if rand(1,6)+rand(1,6)>#защита:
#корректировка=#корректировка+rand(1,6)
end
#защита=#защита-1
else
#корректировка=#корректировка+rand(1,6)
end
end
end
end
if #blast=1:
act 'Выстрелить из бластера':
*pl'Вы стреляете в робота из бластера.'
if rand(1,6)+rand(1,6)>#мастерство:
*pl'Вы промахнулись.'
else
#спротивника=#спротивника-rand(1,6)
end
if #спротивника>0:
if rand(1,6)+rand(1,6)>#мпротивника:
*pl'Противник промахнулся.'
else
if #защита > 0:
if rand(1,6)+rand(1,6)>#защита:
#корректировка=#корректировка+rand(1,6)
end
#защита=#защита-1
else
#корректировка=#корректировка+rand(1,6)
end
end
end
end
if #laz=1 and #blast=0:
if rand(1,6)+rand(1,6)>#мастерство:
*pl'Вы промахнулись.'
else
#спротивника=#спротивника-1
end
if #спротивника>0:
if rand(1,6)+rand(1,6)>#мпротивника:
*pl'Противник промахнулся.'
else
if #защита > 0:
if rand(1,6)+rand(1,6)>#защита:
#корректировка=#корректировка+rand(1,6)
end
#защита=#защита-1
else
#корректировка=#корректировка+rand(1,6)
end
end
end
end
if #стойкость <= #корректировка:
*pl'Вы были убиты.'
end
end




Спасибо: 0 
Профиль Цитата Ответить
Ответов - 39 , стр: 1 2 All [только новые]







ссылка на сообщение  Отправлено: 02.10.09 23:22. Заголовок: яшко, а ты говориш ...


яшко, а ты говориш ....

 цитата:
123th, зачем вот это выкладывать было? Это НИЧЕГО. Вообще. Доделай чуть-чуть, чтобы было хоть чтото а не просто тупые клики. Тогда выкладывай. ИМХО.


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

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 02.10.09 23:33. Заголовок: if #спротивника>..


Я отформатировал код. Итого у тебя 2 отсутствующих END'а, о чем тебе и сообщил ранее интерпретатор.

Советую форматировать свой код впредь самостоятельно, используя табуляцию, разделяя большие участки кода пустой строкой.

 
if #спротивника>0 and #стойкость > #корректировка:
if #laz=1:
act 'Выстрелить из лазера':
*pl'Вы стреляете в робота из лазера.'
if rand(1,6)+rand(1,6)>#мастерство:
*pl'Вы промахнулись.'
else
#спротивника=#спротивника-2
end
if #спротивника>0:
if rand(1,6)+rand(1,6)>#мпротивника:
*pl'Противник промахнулся.'
else
if #защита > 0:
if rand(1,6)+rand(1,6)>#защита:
#корректировка=#корректировка+rand(1,6)
end
#защита=#защита-1
else
#корректировка=#корректировка+rand(1,6)
end
end
end
end
if #blast=1:
act 'Выстрелить из бластера':
*pl'Вы стреляете в робота из бластера.'
if rand(1,6)+rand(1,6)>#мастерство:
*pl'Вы промахнулись.'
else
#спротивника=#спротивника-rand(1,6)
end
if #спротивника>0:
if rand(1,6)+rand(1,6)>#мпротивника:
*pl'Противник промахнулся.'
else
if #защита > 0:
if rand(1,6)+rand(1,6)>#защита:
#корректировка=#корректировка+rand(1,6)
end
#защита=#защита-1
else
#корректировка=#корректировка+rand(1,6)
end
end
end
end
if #laz=1 and #blast=0:
if rand(1,6)+rand(1,6)>#мастерство:
*pl'Вы промахнулись.'
else
#спротивника=#спротивника-1
end
if #спротивника>0:
if rand(1,6)+rand(1,6)>#мпротивника:
*pl'Противник промахнулся.'
else
if #защита > 0:
if rand(1,6)+rand(1,6)>#защита:
#корректировка=#корректировка+rand(1,6)
end
#защита=#защита-1
else
#корректировка=#корректировка+rand(1,6)
end
end
end
end
if #стойкость <= #корректировка:
*pl'Вы были убиты.'
end
end


Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 02.10.09 23:41. Заголовок: Конкретно этот участ..


Конкретно этот участок кода стоит переписать набело, убрав повторяющиеся участки.

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 02.10.09 23:46. Заголовок: спасибо за абсолютно..


спасибо за абсолютно неинформативный ответ - сразу видно программиста...

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 02.10.09 23:51. Заголовок: 123th чем тебя не ус..


123th чем тебя не устраивает ответ?
Ты спросил - "в чем проблема с кодом".
Я ответил, что действительно в твоем коде два END'а пропущены, еще и отформатировал текст, чтоб ты наглядно смог увидеть, в каком месте нарушается задуманный тобой уровень вложенности IF.
Какой еще информации тебе нехватает?

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 02.10.09 23:53. Заголовок: нет-нет, всё правиль..


нет-нет, всё правильно. именно так программисты и отвечают.

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 02.10.09 23:55. Заголовок: 123th я сдаюсь. Како..


123th я сдаюсь. Какой ответ тебе был нужен? Какой ответ ты бы счел информативным?

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 02.10.09 23:57. Заголовок: ммм... оператор act ..


ммм... «оператор act в данном случае должен заканчиваться словом end»

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 03.10.09 00:08. Заголовок: 123th многострочные ..


123th многострочные формы операторов ACT и IF всегда должны закрываться END'ом, это ты и без меня должен знать. Тем более, что в справку заглядываешь регулярно.

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

P.S. Может, и ты когда-нибудь поймёшь, почему я поступаю так, а не иначе, и даже когда-нибудь избавишься от стереотипов "о программистах".

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 03.10.09 00:46. Заголовок: ... теперь у меня не..


...
теперь у меня не работает оператор перехода по метке (jump)
мне заявляют что метка не найдена.
делал копипаст из примера в справке - работает, в чём дело не пойму.

cls 
*pl'Гравитационная бомба уничтожает дверь; теперь через возникшее круглое отверстие Вы можете попасть в какую-то комнату.'
*pl'Вы не успеваете толком осмотреть комнату через дыру, потому что первое, что Вы видите - это металлический человекоподобный робот с бластером в руках.'
*pl'Обнаружив беспорядок, робот поднимает оружие и цилится в Вас.'
*pl'Вы должны сражаться.'
if #laz=0 and #blast=0:
*pl'Вы вступаете в неравный бой используя подвернувшиеся под руку предметы.'
end
#мпротивника=5
#спротивника=5
:loop
cla
KILLOBJ
add obj "Стойкость = " + str (#стойкость-#корректировка) + " из " + str (#стойкость)
add obj "Мастерство = " + str (#мастерство)
add obj "Везение = " + str (#везение)
add obj "Защита = " + str (#защита)
add obj "***оружие***"
if #laz=1:
add obj "Лазер"
end
if #blast=1:
add obj "Бластер"
end
if #gren>0:
add obj "Граната (" + str (#gren) + " шт)"
end
if #bomb>0:
add obj "Грав. бомба (" + str (#bomb) + " шт)"
end
add obj "***вещи***"
add obj "пиллюли-витализаторы: " + str (#пиллюли)
if #спротивника>0 and #стойкость > #корректировка:
if #laz=1:
act 'Выстрелить из лазера':
*pl'Вы стреляете в робота из лазера.'
if rand(1,6)+rand(1,6)>#мастерство:
*pl'Вы промахнулись.'
else
#спротивника=#спротивника-2
end
if #спротивника>0:
if rand(1,6)+rand(1,6)>#мпротивника:
*pl'Противник промахнулся.'
else
if #защита > 0:
if rand(1,6)+rand(1,6)>#защита:
#корректировка=#корректировка+rand(1,6)
end
#защита=#защита-1
else
#корректировка=#корректировка+rand(1,6)
end
end
end
jump 'LOOP'
end
end
end


он что - в пределах сложной конструкции не видит внешних меток?

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 03.10.09 08:13. Заголовок: Распространенная оши..


Распространенная ошибка.
Код действия (Между ACT и соотв. END) обладает своей областью видимости, которая не пересекается с кодом локации.
Проще говоря, из ACT нельзя делать просто jump на метку в коде локации, следует использовать GOTO либо GOSUB.

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 03.10.09 11:46. Заголовок: ну я так и предполож..


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

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 03.10.09 12:01. Заголовок: В справке это есть, ..


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

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 03.10.09 12:10. Заголовок: 123th метки необходи..


123th метки необходимы для переходов в пределах видимости участка кода.
Они работают по прямому назначению.

Спасибо: 0 
Профиль Цитата Ответить
менеджер по рекламе




ссылка на сообщение  Отправлено: 03.10.09 12:14. Заголовок: Переходы лучше орган..


Переходы лучше организовывать по gt,xgt,gs с аргументами, в начале локации обработчик, который проверяет, передан ли аргумент, и какой. если передан - jump к нужной точке. Примерно так это выглядит:

 цитата:
if args[0]!0:jump '<<args[0]>>'
(много кода)
:1
(код)
if int<35:
gt $curloc,1
else
gt $curloc,3
end
:2
(код)
:3
(код)
if int2>60:gt $curloc,2



Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 03.10.09 12:53. Заголовок: 123th, хочешь я немн..


123th, хочешь я немного облегчу написание кода? =) В цифровых переменных (#), вовсе не обязательно ставить знак "#"- просто название переменной и операции с ней. Гораздо удобней - меньше над переключатца по языкам

Спасибо: 0 
Профиль Цитата Ответить
менеджер по рекламе




ссылка на сообщение  Отправлено: 03.10.09 12:59. Заголовок: Yashko На самом деле..


Yashko На самом деле, таких нюансов очень много. Это не единственный пример, когда можно подсократить код

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 03.10.09 13:20. Заголовок: если честно - мне пр..


если честно - мне просто лень...

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

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 03.10.09 13:36. Заголовок: 123th, лучше доделай..


123th, лучше доделай до какого-либо законченного состояния и выложим на qsp.su

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 03.10.09 20:17. Заголовок: сюда по частям кидай..


сюда по частям кидай - мож баги найдем...

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 39 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 7
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация вкл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия