Как сделать?
…
zeek17,
потому что в одном случае плеер справляется с ошибками при инициализации переменных, а в другом нет.
$rooms - это текстовый массив, а rooms_hall числовой.
Но насколько я вижу, второй код написан без ошибок. Значит в обоих случаях ты перепутал типы переменных.
Угу. Попробуйте так:
$rooms_hall[VAL($rooms[t])] = ARRSIZE('$halls')-1
Aleks Versus,
evp,
Пасиб! Пока всё работает. Завтра буду пытаться соединить эти коридоры в сеть..
Ого, я коридоры совсем по другому генерирую. У меня у них есть свойства - наличие развилки/поворота, освещенность, покрытие пола и кол-во комнат. И так для каждого коридора. Покрытие и освещенность нужны, чтобы потом рассчитать побег от монстра по этим самым коридорам.
С комнатами все получилось, еще раз спасибо. Толкьо непонятно, если у меня в коридоре 2 и более комнат, что делать. Он мне одну и ту же выдает.
локация коридор
=========================
gs ‘room’
x = ARGS[0]
act ‘Открыть западную дверь’:
if $door[x] = ‘NULL’:
n = RAND(0, ARRSIZE(’$destination’) - 1)
$door[x] = $destination[n]
KILLVAR ‘$destination’, n
end
dynamic $door[x]
end
x = ARGS[0]
act ‘Открыть восточную дверь’:
if $door[x] = ‘NULL’:
n = RAND(0, ARRSIZE(’$destination’) - 1)
$door[x] = $destination[n]
KILLVAR ‘$destination’, n
end
dynamic $door[x]
end
=================
И как быть с предметами?
Вета, кажется вы все перепутали.
!Локация коридор
gs 'door', 0, 'западную'
gs 'door', 1, 'северную'
gs 'door', 2, 'восточную'
!Локация door
x = ARGS[0]
$name = $ARGS[1]
act 'Открыть <<$name>> дверь':
if $door[x] = 'NULL':
n = RAND(0, ARRSIZE('$destination') - 1)
$door[x] = $destination[n]
KILLVAR '$destination', n
end
gt $door[x]
end
!Стартовая локация
n = 0
:next_destination
$destination[] = 'room<<n>>'
$door[] = "NULL"
n += 1
if n < 40: jump 'next_destination'
Можно еще другой вариант использовать. Просто прочтите, что я вам писал. И определитесь, как вам нужно.
Предметами заниматься не имеет смыла, пока вы с дверьми не разобрались как следует.
Вета:
Толкьо непонятно, если у меня в коридоре 2 и более комнат, что делать. Он мне одну и ту же выдает.
Да, моя ошибка. gs ‘door’ добавляет действия не так как было задумано (но я в disclaimer честно сказал, что код не тестировал). Вот фикс:
!Локация коридор
act 'Открыть восточную дверь': gs 'door', 2
act 'Открыть западную дверь': gs 'door', 0
act 'Открыть северную дверь': gs 'door', 1
!Локация door
x = ARGS[0]
if $door[x] = 'NULL':
n = RAND(0, ARRSIZE('$destination') - 1)
$door[x] = $destination[n]
KILLVAR '$destination', n
end
gt $door[x]
Но вы можете вообще избавиться от локации door, если сделаете как написано тут.
Как сделать так, что бы картинки выводились не сверху вниз, а слева на право?
evp, спасибо, сложно вникнуть во все эти программерские штуки, если я не программер ))я при помощи Адженты немного изменила код (он не такой оптимизированный, как у вас, но зато понятный мне) и все получилось с дверьми :) И даже герой рандомно генерится теперь. Можно переходить к предметам. :)
WeReT,
в самой первой локации:
usehtml = 1
В нужном месте:
*p '<img src="путь к файлу картинки/1.png">'
*p '<img src="путь к файлу картинки/2.png">'
*p '<img src="путь к файлу картинки/3.png">'
! ...
*p '<img src="путь к файлу картинки/N.png">'
Aleks Versus,
Благодарю
Вета:
Можно переходить к предметам.
!Стартовая локация
!Формируем список комнат
number_of_rooms = 30
n = 0
:next_destination
$destination[] = 'room<<n>>'
n += 1
if n < number_of_rooms: jump 'next_destination'
!Формируем список соответствия дверей комнатам
x = 0
:next_door
n = RAND(0, ARRSIZE('$destination') - 1)
$door[] = $destination[n]
KILLVAR '$destination', n
x += 1
if x < number_of_rooms: jump 'next_door'
!Составляем список предметов
$item[] = 'камень'
$item[] = 'ножницы'
$item[] = 'бумага'
$item[] = 'стол'
$item[] = 'стул'
$item[] = 'ключ'
$item[] = 'замок'
$item[] = 'карандаш'
!Раскидываем предметы по комнатам
n = 0
:next_item
m = RAND(0, ARRSIZE('$door') - 1)
dynamic '$item_in_<<$door[m]>>[] = $item[n]'
n += 1
if n < ARRSIZE ('$item'): jump 'next_item'
!Локация $ONNEWLOC
! Я просто вывожу список предметов в описание локации
! для демонстрации того, как работать с предметами.
! Вы можете делать то, что вам требуется.
KILLVAR '$item_here'
COPYARR ('$item_here', '$item_in_<<$CURLOC>>')
if ARRSIZE ('$item_here'):
n = 0
:next_item_in_room
if $item_here[n] = 'камень':
*nl '<font color="blue"><b><<$item_here[n]>></b></font>'
elseif $item_here[n] = 'ножницы':
*nl '<font color="red"><b><<$item_here[n]>></b></font>'
elseif $item_here[n] = 'бумага':
*nl '<font color="green"><b><<$item_here[n]>></b></font>'
else
*nl $item_here[n]
end
n += 1
if n < ARRSIZE ('$item_here'): jump 'next_item_in_room'
end
!Коридор
act 'Войти в восточную дверь': gt $door[0]
act 'Войти в западную дверь': gt $door[1]
act 'Войти в северную дверь': gt $door[2]
Игра на QSP. Как отчистить окно описания предметов после начала игры заново? И где можно найти список всех операторов для QSP?
Совёнок:
И где можно найти список всех операторов для QSP?
см. раздел “Разработчикам” вверху сайта
Совёнок,
KILLALL - уничтожает и предметы, и переменные.
KILLOBJ - только предметы.
KILLVAR - только переменные.