|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
Итак, начинаю потихоньку выносить на форум содержимое TeamX-Tech. В хронологическом порядке и с переосмыслением :-) Исследованием это не назовёшь - зато наработка :-) Сегодняшняя тема: Генерация правильных окончаний при использовании чисел в диалогах. Предположим, ваш критер должен назвать число - денег, дней - чего угодно. Число генерируется автоматически, не прописано заранее. После числа - наименование подсчитанного объекта: напр., 15 дней. Скорее всего, вы сделаете это так (пусть get_value - процедура-генератор числа): display_msg(get_value+" дней"); Неприятность в том, что если get_value вернёт 1, 2, 3, 24, 51 и т.д. вы получите царапающее глаза "1 дней", "24 дней" и т.д. Для борьбы с этим можно воспользоваться такой вот процедурой: ------------------------------------- procedure generate_ending(variable num) begin variable last_digit; //последняя цифра variable tens_last_digit; //предпоследняя цифра last_digit:=days%10; tens_last_digit:=days%100-last_digit; //1 день, 21 день, но 11 *дней*. Т.е. если tens_last_digit==1, то окончание "дней" if last_digit==1 and (tens_last_digit>1 or tens_last_digit==0) then return days+mstr(100); //Выбираем окончание else if last_digit>=2 and last_digit<=4 and (tens_last_digit>1 or tens_last_digit==0) then return days+mstr(101); else return days+mstr(102); end ------------------------------------- ------------------------------------- {100}{}{ день} {101}{}{ дня} {102}{}{ дней} ------------------------------------- Меняем первоначальный вариант на: display_msg(generate_days(get_value)); и всё. Теперь будет "21 день", "54 дня", "714 дней"и даже "2567821 день" :-) Аналогично - для монет, патронов и чего угодно ещё. Для этого не придётся менять ничего, кроме msg-файла.
|
Отправлено: 10:44 - 25 Янв., 2005
|
|
Oleg1969
Пользователь
Откуда: Саратов Регистрация: Май 2006
Всего: 168 сообщений
|
Извините, что поднимаю старую тему, но данный скрипт нормально не работает... Попробуйте ему скормить цифирь 14 или 13... Будет работать тока если заменить на tens_last_digit:=(days%100-last_digit)/10; или на (tens_last_digit>10 or tens_last_digit==0) тогна нормальное окончание выводит...
----- За сим прощаюсь, Олег.
|
Отправлено: 15:45 - 3 Авг., 2006
|
|
|
|