RU 📌 Pinned

Как сделать?

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

extensive:

1)Как сделать в игре смену дня и ночи,чтобы на каждое действие уходило какое-то время.

Ответ есть в FAQ: Как сделать время?

Открывай пример, запускай, читай, разбирай код. Что будет непонятно, спрашивай.

extensive:

Например в 21:00 базар закрывается,а в 7 открывается.

дни = время / (24*60)
часы = (время - дни*24*60) / 60
IF (часы >= 7) AND (часы < 21):
    'С базара слышится оживлённый гомон. Торговцы, зазывалы, покупатели, попрошайки. Ворота приветливо распахнуты.'
    ACT 'Зайти':
        GOTO 'Базар'
    END
ELSE
    'Базар закрыт. Приду утром.'
END

extensive:

И самое главное - отсчёт дней недели.

! В начале игры
$неделя[1] = 'Понедельник'
$неделя[2] = 'Вторник'
$неделя[3] = 'Среда'
$неделя[4] = 'Четверг'
$неделя[5] = 'Пятница'
$неделя[6] = 'Суббота'
$неделя[7] = 'Воскресенье'

! В месте с расчётом текущего дня недели
дни = время / (24*60)
день_недели = (дни MOD 7) + 1
'Сегодня <<$неделя[день_недели]>>.'
IF день_недели = 3:
    'Извините, среда - санитарный день.'
END
Aleks Versus Moderator 22.10.2014 13:26 (11 years ago)

extensive:

3)Как мне прописать зависимость вероятности от навыков.Например,если навык ловли рыбы = 7,то вероятность поймать рыбу была бы 20% + <<Навык ловли рыбы>> = 27%

Это ж просто. Вероятность попадания в одно число из ста как минимум один к ста. Значит попадание в двадцать семь чисел из ста - это грубо 27%.

! задаём вероятность (в тысячных долях):
вероятность = 200
! задаём навык (в тысячных долях):
навык_ловли = 70
! выбрасываем случайное число от 1 до 1000
случай = RAND (1,1000)
! сравниваем выпавшее значение со значением вероятность+навык
if случай > вероятность + навык_ловли:
! если выпавшее число больше 270 - не повезло
	*pl "Ты не поймал рыбу"
else
! если меньше - повезло
	*pl "Ты поймал рыбу"
end

extensive:

Ещё в некоторых играх я видел,что есть не три,а 4

В классическом плеере 4 окошка по-умолчанию.

Aleks Versus,
5.

Большое всем спасибо! :) Пойду разбираться
P.S.Ещё один тупой вопрос:У меня такой алгоритм:
ACT’Охотиться на уток’:
If Ружье >= 1:
ADDOBJ’Утка’
ELSE
‘Из пальца никого не затрелишь:нужно ружье’
end
end
Проблема такая:когда у тебя нету ружья тебе выскакивает то,что я написал,но если нажать два и больше раз,то ’тот текст “Из пальца никого не затрелишь:нужно ружье” беспонечными строчками проецируется вниз,Хотелось бы,чтобы только 1 раз.Пробовал $Curloc , GOTO Curloc , GOTO ‘Озеро’(изначальная локация),но тогда текст вообще не появляется.

Самое простое решение - убрать это действие:

ACT'Охотиться на уток': 
  If Ружье >= 1: 
    ADDOBJ'Утка' 
  ELSE 
    'Из пальца никого не затрелишь:нужно ружье' 
    DELACT $selact
  end 
end

Самый простой вариант:

ACT 'Охотиться на уток':
    IF Ружье >= 1:
        ADDOBJ 'Утка'
    ELSE
        *CLR
        'Из пальца никого не заcтрелишь: нужно ружье.'
        XGOTO $CURLOC
    END
END

Если нужно, чтобы действие исчезало после выдачи предупреждения, добавляем переменную:

IF (нужно_ружье = 0) OR (Ружье >= 1):
    ACT 'Охотиться на уток':
        IF Ружье >= 1:
            ADDOBJ 'Утка'
        ELSE
            нужно_ружье = 1
            *CLR
            'Из пальца никого не заcтрелишь: нужно ружье.'
            XGOTO $CURLOC
        END
    END
END

Вариант Ньюсаша подойдёт только в том случае, если допустимо, что при любом обновлении локации (будь то переход с другой локации, либо перезаход на текущую по GOTO $CURLOC), действие появится заново.

Aleks Versus Moderator 22.10.2014 21:04 (11 years ago)

Nex,
пятое - поле ввода? Забываю его считать.

ЗакТеррен #1266 25.10.2014 16:45 (11 years ago)

подскажите пожалуйста как установить максимальное и минимальное значения для жизни, маны и т.д.?

ЗакТеррен:

подскажите пожалуйста как установить максимальное и минимальное значения для жизни, маны и т.д.?

Легко. Создай локацию счетчик, в которой выставь

if HP>максимальное_HP:
 HP=максимальное_HP
end
ЗакТеррен #1266 25.10.2014 17:43 (11 years ago)

спасибо

RomaDova:

Создай локацию счетчик

На форуме вопрос уже много раз обсуждался. Подход с локацией-счетчиком, хоть и выглядит простым и понятным, но ошибочен.
Нормальным путём будет сделать, например, локацию “change_HP” с кодом

HP = HP + args[0]
if HP > max_HP: HP = max_HP
if HP < min_HP: HP = min_HP

и менять здоровье вызовом этой локации:

!Добавим 10 HP
GS 'change_HP', 10
!Отберём 20 HP
GS 'change_HP', -20

Когда по игровой механике допустим кратковременный выход параметра за границу (например, было 10/10, вылечили на 5 и ударили на 12 в течение одного хода 10+5=15, 15-12=3 или 10-12=-2, -2+5=3), то нужен другой подход - сделать локацию ‘check_HP’ и выполнять её перед моментом, когда HP должно укладываться в рамки.

ЗакТеррен #1266 25.10.2014 20:28 (11 years ago)

спасибо

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

ЗакТеррен,
основное описание меняется при каждом обновлении локации. При переходе на эту локацию с другой, или при перезаходе на текущую (”GOTO $CURLOC”).

Дополнительное описание, обновляется только принудительно. Для его обновления нужно специально написать вызов очистки окна и заполнить по новой.

ЗакТеррен #1266 26.10.2014 08:50 (11 years ago)

Nex,
спасибо, мне это помогло) получился вот такой код:

Spoiler
if money>=10:
         act 'Купить воду':
         Вода+=1
         money-=10
         clear
         pl'Вас зовут <<$Имя>> <<$Фам>>.'
         pl'В кошельке <<money>> денег.'
         pl'Здоровье <<HP>>.'
         pl'Голод: <<Сытость>>.'
         pl'Жажда: <<Жажда>>.'
         pl'Бодрость <<Сон>>.'
         end
     end

Вопрос: можно ли вот эту часть заменить одним словом/кодом ибо если все это каждый раз писать, то получится много текста((

Spoiler
pl'Вас зовут <<$Имя>> <<$Фам>>.'
         pl'В кошельке <<money>> денег.'
         pl'Здоровье <<HP>>.'
         pl'Голод: <<Сытость>>.'
         pl'Жажда: <<Жажда>>.'
         pl'Бодрость <<Сон>>.'

ЗакТеррен,
одним - нет, двумя - можно.

Помести код вывода в отдельную локацию. Например, назовём локацию “статус”. Кстати, “CLEAR” туда же стоит поместить.

Далее, где нужно обновить статус, пишешь вызов этой локации:

GS "статус"

Log in or Register to post comments.