RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2425916 views

Lisichka, вот вам еще небольшой совет.
Замените код

лицо = rand (1,3) 
    if лицо = 1: 
        $лицо = 'Противник цепко следит за вами немигающим взглядом. Вы замечаете, как по лбу у него стекает капля пота.' 
    end 
    if лицо = 2: 
        $лицо = 'Противник утирает пот с верхней губы. Вы замечаете, что у него непроизвольно дернулся уголок рта.' 
    end 
    if лицо = 3: 
        $лицо = 'Противник чешет затылок. Вы замечаете, как он рефлкторно кусает губу.' 
    end

на

лицо = rand (1,3) 
    if лицо = 1:
        $лицо = 'Противник цепко следит за вами немигающим взглядом. Вы замечаете, как по лбу у него стекает капля пота.' 
    elseif лицо = 2: 
        $лицо = 'Противник утирает пот с верхней губы. Вы замечаете, что у него непроизвольно дернулся уголок рта.' 
    else
        $лицо = 'Противник чешет затылок. Вы замечаете, как он рефлкторно кусает губу.' 
    end

У вас нет ошибки, но второй вариант компактнее и легче читаем. Кроме того, хоть это и совсем несущественно для современных компьютеров, второй, в общем случае, быстрее. Поясню.

В первом варианте при любом значении “лицо” будет произведено три проверки. Даже если лицо=1, игра все-равно будет сравнивать его с двойкой, а потом с тройкой. Так написано в коде и машина не может игнорировать его инструкции.

Во втором варианте будет выполнено от одной до двух операций сравнения. Если лицо=1, то на первом сравнении все и закончится. Если лицо=2 или лицо=3, то узнав, что лицо<>1, игра сравнит его с двойкой и в зависимости от результата выполнит ту или иную инструкцию.
UPD: Убрал “:” после else.

Edited at 22.07.2015 20:39 (10 years ago)

https://qsp.org/forum/305-ogranicenia-qsp - в этой теме почему-то больше нельзя писать, потому спрошу здесь - а есть ли какая возможность узнать количество переменных в игре, чтоб не впучную искать и считать, может команда какая специальная?

evp,
Узнала много нового, спасибо, заменю!

Ааа.. это очень круто) как без этого вообще можно было работать! спасибо! Но сразу же возникают еще вопросы: что значит - “не инициированные переменные”, “не используемые переменные”, и “неверное удаление предметов”, - ведь вроде б как, приведенные там вполне себе инициируются и используются, а в чем может быть “неверность” удаления предмета, вообще не понимаю. Ну, и, собственно, вроде бы, на глазок, этих самых переменных оказалось еще не так уж много, - однако сам анализатор их не подсчитывает?

mkir:

Ну, и, собственно, вроде бы, на глазок, этих самых переменных оказалось еще не так уж много, - однако сам анализатор их не подсчитывает?

Внизу в окошке лога:

Анализатор кода QSP v 1.2.24.0:

Выполняем поиск переменных…
Добавлено переменных: 55
Найдено обращений к неинициализированным текстовым переменным: 1
Найдено обращений к неинициализированным числовым переменным: 11
Найдено неиспользуемых текстовых переменных: 1
Найдено неиспользуемых числовых переменных: 1

А вот еще странная вещь - пишет, например - (Ошибка, локация “newloc”, строка #3880 : Неизвестное действие в выражении) - однако в этой локации строк где-то на триста меньше. Или (Ошибка, локация “Пираты”, строка #15159 : ACT без “:” ), хотя вот здесь строк вообще меньше сотни. Так как же найти эти ошибки?

mkir:

что значит - “не инициированные переменные”,

Выше вы видели, что “Найдено обращений к неинициализированным текстовым переменным: 1”

В примере это переменная $main_bg, к которй было вот такое обращение:

$content_window = '<div class="content_window" style="background: url(<<$main_bg>>)">'

Но при этом этой переменной нигде в коде явно не присваивалось значения. Она пустая с точки зрения анализатора. Вот что значит “неинициализированная”.

Это не всегда может быть верно. Например, я могу инициализировать эту переменную с помощью dynamic:

$varName = '$main_bg'
dynamic '<<$varName>> = "img/bckgrnd1.jpg"'

Но если вы не имеете привычки извращаться подобным образом, то скорее всего, анализатор прав и вы обращаетесь к переменной, не задав ей перед этим значения. Также, возможно, вы просто опечатались в названии переменной.

mkir:

А вот еще странная вещь - пишет, например - (Ошибка, локация “newloc”, строка #3880 : Неизвестное действие в выражении) - однако в этой локации строк где-то на триста меньше.

Пункт 2

mkir:

что значит - “не используемые переменные”

Кэп отвечает. Переменные, которые были инициализированы (им явно было присвоено значение) и к которым более не было обращений в коде, назовем неиспользуемыми.

Но опять с оговоркой:

someValue = 1125
$varName = 'someValue'
dynamic 'myBeautyVar = <<$varName>>'

В этом случае переменная someValue будет причислена к неиспользуемым.
UPD Исправил код в примере на верный

Edited at 22.07.2015 21:29 (10 years ago)

mkir:

что значит - … “неверное удаление предметов”,… в чем может быть “неверность” удаления предмета, вообще не понимаю

Nex:

попытка удалить предмет, который нигде не добавляется

Надо просто читать :)

Ладно, вы уж извиняйте за назойливость, я умнею, но постепенно, не сразу)

Не стоит извиняться. Вы ничего плохого не сказали.

Собстна, в чём ошибка?

ACT 'Купить "Целитель"':
IF money < 15:
	msg 'Пересчитав свои деньги вы понимаете, что не можете этого себе позволить'
	ELSE
	el_hp_col = input ("Ведите количестов покупаемого товара")
	money -= 15*el_hp_col
	el_hp += el_hp_col
 END
END

ACT 'К другим товарам':
GT '3.1.1'
END

Игрок должен вести количество нужного ему эликсира, но, даже если денег меньше, можно купить хоть 10000, и денег будет -10000, проверка IF не помогла((
Может кто знает что делать, с input первый опыт))

Oliver,
а переменная money случайно находится не в одной локации с кодом на покупку? я вставила ваш код и все работает вроде, только переменная money и основной код у меня на разных локациях. вот ссылка

Log in or Register to post comments.