RU 📌 Pinned

Как сделать?

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

Aleks Versus Moderator 10.03.2016 18:39 (9 years ago)

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, спасибо, сложно вникнуть во все эти программерские штуки, если я не программер ))я при помощи Адженты немного изменила код (он не такой оптимизированный, как у вас, но зато понятный мне) и все получилось с дверьми :) И даже герой рандомно генерится теперь. Можно переходить к предметам. :)

Aleks Versus Moderator 11.03.2016 16:57 (9 years ago)

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?

http://wiki.qsp.su/

см. раздел “Разработчикам” вверху сайта

Совёнок,
KILLALL - уничтожает и предметы, и переменные.
KILLOBJ - только предметы.
KILLVAR - только переменные.

Log in or Register to post comments.