Разработка интерактивной литературы, статьи, мастер-классы, метафизика ИЛ.
  • Дата создания
    23 февраля 2015
  • Топиков
    64
  • Ограничение на постинг
    0.000

Динамически генерируемый лабиринт на INSTEAD

Рабочий пример динамически генерируемого лабиринта. В примере можно перемещаться в 6 направлениях, стороны света плюс вверх-вниз. При нажатии на ссылку пути генерируется новая комната с такими же путями, можно вернуться в предыдущую комнату. Она сохраняется. Побочный эффект — чем больше бродишь, тем больше сейв.

Код под спойлером
-- $Name:Нанотест$
-- $Version:0.01$
-- $Name(ru):Нанотест$
instead_version "1.8.0"

require "xact"			-- подключаем модуль xact
require "hideinv"		-- подключаем модуль hideinv
require "para"			-- догадайтесь, что мы подключили в этот раз ;)
require "dash"			-- подключаем dash
require "quotes"		-- подключаем quotes

game.codepage="UTF-8";

game.act = 'Не получается.';
game.inv = 'Хм, странная штука.';
game.use = 'Не сработает.';

global {
x = 0;
y = 0;
z = 0;
roomname = 'room0_0_0';
myrooms = {};
};

function myconstructor()
	local v = {};
	v.nam = roomname;
--в dsc выводится номер текущей комнаты, но также можно генерировать сюда любое описание.
	v.dsc = roomname;
        v.disp = 'Название';
	v.way = {vroom('Север', north), vroom('Восток', east), vroom('Юг', south), vroom('Запад', west), vroom('Вверх', up), vroom('Вниз', down)};
	v.exit = function(s, t)
		if t == north then
			y = y + 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == east then
			x = x + 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == south then
			y = y - 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == west then
			x = x - 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == up then
			z = z + 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == down then
			z = z - 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		end;
	end;
	return room(v);
end;

---Начало---------------------------------------------------------------------------------------------------------------

main = room {
	forcedsc = true;
	nam = 'Начало';
	enter = function()
		myrooms['room0_0_0'] = new('myconstructor()');
		start = myrooms['room0_0_0'];
		take 'stone';
	end;
--	pic = 'gfx/01.jpg';
	dsc = '';
	way = {vroom('Играть', 'start')};
};

--пачка комнат-заглушек, т.к. vroom надо ссылаться на реальную комнату.

north = room {
	nam = 'Заглушка';
};

east = room {
	nam = 'Заглушка';
};

south = room {
	nam = 'Заглушка';
};

west = room {
	nam = 'Заглушка';
};

up = room {
	nam = 'Заглушка';
};

down = room {
	nam = 'Заглушка';
};


Дальнейшие планы: генерация контента при помощи рандома в enter генерируемой комнаты. Отключение путей при необходимости и прочее. В общем это что-то генерируемого открытого мира без ограничений. Можно написать что-нибудь рогаликопобное. Я пока думаю над стратегией в фентезийном стиле. В общем покажу что-нибудь через полгодика. Может раньше.
Читать дальше

Путь героя, ч. 1

Маша Кочакова начала серию статей о «пути героя», мономифе Джозефа Кэмпбелла, в применении к сценариям компьютерных игр. Если не читали Кэмпбелла или он у вас «не пошёл» (как у меня, к примеру) — полюбопытствуйте.

http://linxxa.livejournal.com/88937.html
Читать дальше

Тема для Instead - Книга (да, еще одна)

Выглядит как-то вот так:


Рисовалось для одной игры, так и не дописанной. Так что может кому пригодится. Выкладываю вместе с демонстрационной «игрой».

Перезалил, должно 90 дней лежать.
Скачать.
Читать дальше