Computing: различия между версиями

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показано 18 промежуточных версий 4 участников)
Строка 1: Строка 1:
 
{{computing}}
{{elven}}
'''Вычислениями''' в Dwarf Fortress называют практику создания сложных механических устройств, реализующих логические и численные операции. В идеале, это делается для автоматизации какой-либо функции вашей крепости. Пусть даже сейчас это уже и не новая идея, но она все ещё оставляет достаточно простора для улучшений и исследований, в том числе и по той причине, что одну и ту же проблему можно решить разными способами. Изобретения и усовершенствования только приветствуются!
Компьютеризацией в '''Dwarf Fortress''' называют практику создания сложных механических устройств реализующих логические и численные операции. В идеале, это делается для автоматизации какой-либо функции вашей крепости. Пусть даже сейчас это уже и не новая идея, но она все ещё оставляет достаточно простора для улучшений и исследований. В том числе и по той причине, что одну и ту же проблему можно решить разными способами. Изобретения и усовершенствования только приветствуются!


=== Двоичная информация ===
=== Двоичная информация ===
Информация, представленная в двоичном виде, может принимать всего два состояния: истину или ложь, что соотвествует 1 или 0. В '''Dwarf Fortress''' эти состояния можно хранить разными способами:
Информация, представленная в двоичном виде, может принимать всего два состояния: истину или ложь, что соответствует 1 или 0. В игре эти состояния можно хранить разными способами:
* состояние вкл/выкл или сигнал от [[trigger|триггера]] (pressure plate, lever)
* состояние вкл/выкл или сигнал от [[trigger|триггера]] (pressure plate, lever)
* запитанность энергией или состояние подключенния [[machine component|механизма]]
* запитанность энергией или состояние подключенния [[machine component|механизма]]
Строка 10: Строка 9:
* нажата или отжата [[pressure plate|нажимная плита]]
* нажата или отжата [[pressure plate|нажимная плита]]
* [[water|жидкость]] [[flow|движется или стоит]]
* [[water|жидкость]] [[flow|движется или стоит]]
* наличие/отсутствие [[creature|существ]] или [[dwarf|дварфов]]
* наличие [[creature|существ]] или [[dwarf|дварфов]]
* наличие [[minecart|вагонетки]] на рельсах


Это элементарное представление информации лежит в основе всех электронных устройств и компьютеров. Поэтому если уж вы захотели заняться компьютеростроением то с этим нужно обязательно ознакомиться. [http://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_%D0%B2%D1%8B%D1%81%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9 Логика высказываний]
Это элементарное представление информации лежит в основе всех электронных устройств и компьютеров, поэтому, если вы хотите строить более-менее сложные схемы, с этим нужно ознакомиться: [http://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_%D0%B2%D1%8B%D1%81%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9 Логика высказываний]


=== Ввод/вывод ===
=== Ввод/вывод ===
Устройством ввода может служить любой механизм, который можно связать с другими устройствами. К такими механизмам относятся [[lever|рычаги]] и [[pressure plate|нажимные плиты]]. Нажимная плита, при её установке, может быть настроена, на какой вес воды, лавы и существ она должна реагировать. Так же её можно настроить так, чтобы она могла реагировать и на ваших дварфов тоже. Указав минимальное и максимальное значение уровня воды и лавы для нажимной плиты, вы всегда будете получать от нее состояние ВКЛ (on) для этого интервала, а для всех остальных значений — состояние ВЫКЛ (off). Независимо от уровня воды, лавы или веса существа, действующих на нажимную плиту, это устройство всегда будет посылать или 1 или 0 на другие "элементы" сети. А это значит, что нажимные плиты могут служить основой для двоичных запоминающих устройств.
Устройством ввода может служить любой механизм, который можно связать с другими устройствами. К такими механизмам относятся [[lever|рычаги]] и [[pressure plate|нажимные плиты]]. Нажимная плита, при её установке, может быть настроена, на какой вес воды, лавы и существ она должна реагировать. Также её можно настроить так, чтобы она могла реагировать и на ваших дварфов тоже. Указав минимальное и максимальное значение уровня воды и лавы для нажимной плиты, вы всегда будете получать от нее состояние ВКЛ (on) для этого интервала, а для всех остальных значений — состояние ВЫКЛ (off). Независимо от уровня воды, лавы или веса существа, действующих на нажимную плиту, это устройство всегда будет посылать или 1 или 0 на другие "элементы" сети. А это значит, что нажимные плиты могут служить основой для двоичных запоминающих устройств.


==== Виды ввода ====
==== Виды ввода ====
Строка 21: Строка 21:
* Автоматическое переключение: [[pressure plate|Нажимная плита]] -> двоичный 1 или 0.
* Автоматическое переключение: [[pressure plate|Нажимная плита]] -> двоичный 1 или 0.


В качестве ввода/вывода может служить все что угодно, что умеет реагировать на изменение сигнала. Это могут быть двери, мосты, шлюзы пропускающие или препятствующие течению жидкостей, шестерни связанные с насосами и многое другое. В некоторых случаях — когда используется [[mechanical logic|машинная логика]] — в качестве вывода требуется не сигнал ВКЛ/ВЫКЛ (on/off), а подключение/отключение механизмов от источника энергии.
В качестве ввода/вывода может служить все что угодно, что умеет реагировать на изменение сигнала. Это могут быть двери, мосты, шлюзы пропускающие или препятствующие течению жидкостей, шестерни связанные с насосами и многое другое. В некоторых случаях — когда используется [[mechanical logic|механическая логика]] — в качестве вывода требуется не сигнал ВКЛ/ВЫКЛ (on/off), а подключение/отключение механизмов от источника энергии.


Для обратного преобразования состояния подключенности к источнику энергии в сигнал ВКЛ/ВЫКЛ (on/off) известен (на данный момент) только один способ. Этот способ предполагает использование насоса с неограниченным источником воды и неограниченным сливом. Для обнаружения факта, включен ли насос (т.е.  подключен ли он к источнику энергии) используется нажимная плита размещенная у слива. Она реагирует на наличие потока перекачиваемой жидкости.
Для обратного преобразования состояния подключенности к источнику энергии в сигнал ВКЛ/ВЫКЛ (on/off) известен (на данный момент) только один способ. Этот способ предполагает использование насоса с неограниченным источником воды и неограниченным сливом. Для обнаружения факта, включен ли насос (т.е.  подключен ли он к источнику энергии) используется нажимная плита размещенная у слива. Она реагирует на наличие потока перекачиваемой жидкости.
Строка 98: Строка 98:
|}<br />
|}<br />


Логические выражения, которые используют операции НЕ(NOT), И(AND) и ИЛИ(OR) наиболее легки для понимания человеком. Однако, оказывается, что все возможные логические операции можно реализовать используя только NAND или только NOR вентили. Некоторые логические вентили сделать проще и они потребуют меньше компонентов чем другие. Хотя это зависит от того, какой подход вы используете при построении логических схем. В общем случае, самостоятельное проектирование каждого логического вентиля, который вам действительно необходим (или использование уже придуманных схем) предпочтительнее, чем строительство множества NAND вентилей, так как в результате ваш '''дфарф'''путер будет и быстрее работать и потребует меньше ресурсов на его создание (энергии, воды, котят, строительных материалов и всего остального, что вы задумаете использовать).
Логические выражения, которые используют операции НЕ(NOT), И(AND) и ИЛИ(OR) наиболее легки для понимания человеком. Однако, оказывается, что все возможные логические операции можно реализовать используя только NAND или только NOR вентили. Некоторые логические вентили сделать проще и они потребуют меньше компонентов, чем другие, хотя это зависит от того, какой подход вы используете при построении логических схем. В общем случае, самостоятельное проектирование каждого логического вентиля, который вам действительно необходим (или использование уже придуманных схем) предпочтительнее, чем строительство множества NAND вентилей, так как в результате ваш '''дфарф'''путер будет и быстрее работать, и потребует меньше ресурсов на его создание (энергии, воды, котят, строительных материалов и всего остального, что вы задумаете использовать).


=== Сложные вентили ===
=== Сложные вентили ===
* [[Latch|Триггер]](Latch) — записывает и считывает одно двоичное значение.
* [[Latch|Триггер]] (Latch) — записывает и считывает одно двоичное значение.
* [[Repeater|Генератор импульсов]](Repeater) — посылает периодический сигнал.
* [[Repeater|Генератор импульсов]] (Repeater) — посылает периодический сигнал.
* [[Counter|Счётчик]]/[[Adder|Сумматор]](Counter/Adder) — двоичные вычисления.
* [[Counter|Счётчик]]/[[Adder (Computing)|Сумматор]] (Counter/Adder) — двоичные вычисления.
 
{{заготовка}}


== Принцип работы ==
== Принцип работы ==
Исторически сложилось, что до DF2010 было 3 основных принципа работы '''дварф'''пьютеров, которые определяют, что будет управлять схемой. Каждый из них имел свои достоинства и недостатки. До сих пор в DF2010 на 0.31.01 по существу используются те же самые способы передачи сигналов, за исключением некоторых различий с насосом поднимающим воду (they don’t without the floor between being channeled, apparently). Наука! будет отличаться лишь тем, что в основе будет лежать либо течение воды, либо вращение осей и зубчатых передач, либо поиск пути животным.
Существует четыре основных принципа дварфийских вычислений, в зависимости от того, что будет управлять системой. У каждого из них есть свои преимущества и недостатки.


Три основных принципа:
Четыре основных принципа:


=== Жидкостная логика ===
=== Жидкостная логика ===
[[Infinite flow fluid logic | Логика бесконечного течения жидкости]] управляет течением жидкости по нажимным плитам. Схема с жидкостной логикой может быть легко построена и все известные элементы в Dwarf Fortress уже построены на этом принципе. С другой стороны, этот принцип зависит от неограниченного источника жидкости, поэтому периодически приходится  бороться с [[Water#Water in Fortress Mode | испарением]] и полным [[Water#Water in Fortress Mode | высыханием]].
[[Fluid logic|Жидкостная логика]] управляет течением жидкости по нажимным плитам. Схема с жидкостной логикой может быть легко построена и все известные элементы в Dwarf Fortress уже построены на этом принципе. С другой стороны, этот принцип зависит от неограниченного источника жидкости, так как приходится  бороться с [[Water#Испарение|испарением]] и полным высыханием.


=== Механическая логика ===
=== Механическая логика ===
[[Mechanical_logic | Механическая логика]] использует системы осей и [[gear assembly |шестерёнок]] для постройки логических  схем. Механическая логика реагирует очень быстро и может быть легко построена, за исключением когда жидкосно-насосный сигнал-> преобразователь сигнала в каждый элемент. Так как каждая передача сама по себе может быть связана с триггером (или несколькими триггерами), и автоматически подключаться к соседней шестерне для питания или передачи сигнала, механическая логика являются очень гибкой и не требуют большого числа различных устройств, которые, как правило, используются в жидкостной логике (за исключением, опять же, потребности в жидкостно-насосный сигнал-> преобразователь сигнала в каждый элемент, если вы собираетесь использовать схему для управления насосом). С другой стороны, этот принцип использует ОГРОМНОЕ количество механической энергии, и в связи с отсутствием энергии вы будете вынуждены строить с использованием компонентов жидкостной логики, если вы хотите подключить несколько механических логических элементов вместе или подключить вентили на любой выход, кроме насоса. Существует, однако, в настоящее время полностью функциональная схема жидкостного сберегающего датчика вращения. Так, по правде говоря, текущую механическую логику правильнее называть механико-жидкостной гибридной логикой, так как в ней вы нуждаетесь в некотором источнике жидкости  в первую очередь для датчика вращения вашей схемы.
[[Mechanical_logic|Механическая логика]] использует системы осей и [[gear assembly|шестерёнок]] для постройки логических  схем. Механическая логика реагирует очень быстро и может быть легко построена. Так как каждый [[gear assembly|редуктор]] сам по себе может быть связан с триггером (или несколькими триггерами) и автоматически подключаться к соседним редукторам для питания или передачи сигнала, механическая логика являются очень гибкой и не требуют большого числа различных устройств, которые, как правило, используются в жидкостной логике. С другой стороны, этот принцип использует ОГРОМНОЕ количество механической энергии; кроме того, простейшие механические схемы будут выдавать не сигнал, а энергию, поэтому, если вам нужен сигнал, например, для открытия мостов или дверей, нужна схема, переводящая энергию в сигнал. Впрочем, существуют полностью рабочие схемы перевода энергии в сигнал на основе жидкостей; после введения в игру вагонеток такие схемы стало возможным делать более компактными. С появлением [[Minecart|вагонеток]] стали доступны компактные безжидкостные преобразователи "энергия->сигнал", что сделало [[Minecart logic|вагонеточную логику]] привлекательной альтернативой для развертывания механической логики в вашей крепости. Наряду с передовыми методами построения логических элементов путем "предварительного переключения" узла шестерни (см. [[Mechanical_logic#На_основе_переключения]]), можно построить любую логическую схему, если в игре достаточно места для этого.
К механической логике можно также причислить [[Minecart_logic | вагонеточную логику]], которая является отличным способом создания
логических схем, основанных на движении [[Minecart| вагонеток]].


=== Животная логика ===
=== Животная логика ===
[[Animal logic|Животная логика]] состоит из животных оставленных  в закрытом помещении, с дверью, блокирующей путь туда, куда они хотят пойти, и нажимной плитой под люком, с препятствиями, которые управляются с помощью триггеров. Животное думает, что оно может пройти через дверь, и если у него есть свободный путь к двери, то оно пойдёт и встанет на люке. Когда люк открывается тригером, зверь падает на нажимную плиту. Пока люк открыт, или другие препятствия блокируют путь животного к двери, оно останется на нажимной плите и на выходе будет сигнал "1". Как только зверь увидит путь к двери, он оставит нажимную пластину. Обычно схема основана на том факте, что животные пытаются пойти к их родителям, пока они дети, или просто движутся к еде. Существуют также конструкции, которые используют захваченных врагов.
[[Creature logic|Логика существ]] использует нажимные пластины и ограничения на перемещение существ через постройки, такие как двери и [[hatch cover|люки]], в сочетании с их [[path|поведением]] для построения логических схем. Логика существ требует очень много места, но не требует энергии, жидкости или ценных материалов. Любой вид логической схемы можно построить с помощью логики существ.
 
[[Animal logic|Логика животных]] — это особый вид логики существ, основанный на попытках животных пройти через плотно закрытые двери. Логические схемы животных могут быть гораздо более экономичными, чем другие формы логики существ, но они несколько ненадежны.


Теоретически существует четвёртый принцип, Дварфская логика (она же Борг логика), когда вместо животных используются дварфы но не было ещё сообщено ни об одной рабочей схеме, использующей данную логику.
=== Вагонеточная логика ===
[[Minecart logic|Логика вагонеток]] включает в себя контроль путей [[minecart|вагонеток]] через нажимные плиты для построения логических вентилей. Логика вагонеток легко интегрируется с механической логикой. Энергия, что, возможно, удивительно, не является обязательной. Логика вагонетки полна и компактна. Её не хватает скорости, на которую способны механические схемы, но для некоторых архитекторов проектирование схемы вагонеток может быть намного проще и интуитивно понятнее.


=== Примеры схем, которые вы могли бы создать используя логические элементы ===
=== Примеры схем, которые вы могли бы создать, используя логические элементы ===
* Генератор импульсов (Repeater) : Неоднократно переключается открывая и закрывая люки или двигая шипы вверх-вниз.
* Repeater (Генератор импульсов): многократно переключается. Можно использоваться для открытия и закрытия люков или движения шипов вверх-вниз.
* Триггер (Latch): Делается сбрасывающаяся одноразовая нажимная пластина, которая сбрасывается с помощью рычага.
* Latch (Триггер): запоминает своё состояние, имеет два входа, каждый переключающий на своё состояние. Можно делать, например, одноразовые нажимные пластины, сбрасываемые рычагом.
* НЕ (NOT) элемент: Изменяет на противоположенный сигнал от переключателей или нажимных пластин. Как правило, подключен к реле. Вы конечно же можете модифицировать ваше реле, чтобы оно посылало противоположенный сигнал, и не спользовать этот элемент.
* элемент NOT (НЕ): изменяет сигнал от переключателей или нажимных пластин на противоположный. Обычно привязывается к триггерам.
* AND gate: Requiring more than one condition to be true for something to occur. For instance, you could have a group of AND gates, with a system on/off switch, and and other triggers, with each trigger linked to a different AND gate with the system on/off switch linked to the the second input on all the AND gates, so that when the system on/off switch is OFF the output will be OFF on all the AND gates.
* элемент AND (И): выдаёт сигнал тогда и только тогда, когда подаётся сигнал на все входы. Можно, например, присоединить выход со схемы к одному входу AND и рычаг для управления схемой к другому, и если рычаг будет выключен, то выход AND всегда будет выключен вне зависимости от состояния схемы.
* OR gate: You could link two 1-7 water sensors to an OR gate, and link that to a NOT gate, and link that to some floodgates or doors which act as emergency bulkheads, closing when water is detected in the area. Or, link the OR gate to bridges which raise instead (but you may crush things, and bridges are slower than doors).
* элемент OR (ИЛИ): выдаёт сигнал тогда, когда хотя бы на одном входе есть сигнал. Можно, например, присоединить несколько сенсоров воды (настроенных на 1-7) к входу OR и присоединить его выход к NOT, к которому подключены экстренные шлюзы или двери, которые бы закрывались, когда обнаружена вода.
* XOR gate: You could use pressure plates hooked to latches at different points in your fort to detect enemy intrusion, and set them up to seal off the area with both an interior and exterior bulkhead when the intrusion occurs, but hook your latches up with an XOR gate and hook the output to the interior bulkhead to unseal that one if your pressure plates have detected that the enemy has gotten past it.
* элемент XOR (исключающее ИЛИ): включается, если ровно один из двух входов включен. Можно использовать нажимные пластины с триггерами в разных частях крепости для обнаружения противника. Связав их с XOR, можно закрыть входы в крепость, если обнаружен враг, и открыть их, если враг обнаружен внутри.
* NOR gate: A NOR gate returns TRUE (ON) only if both inputs are FALSE. Instead of using the OR gate example with a NOT gate, you could use a NOR gate linked to two 1-7 water sensors, whose output goes to doors or floodgates. When the pressure plates are both waterless, the floodgates will be open. When one detects water, the floodgates close. (If you used 0-0 pressure plates with an OR, you would get an OFF signal if both plates detected water, or an ON signal otherwise (which is the same as 1-7 NAND 1-7))
* элемент NOR (НЕ-ИЛИ): отключается только если включается хотя бы один вход. Вместо использования вентиля OR с вентилем NOT вы можете использовать вентиль NOR, связанный с двумя датчиками воды 1-7, выходной сигнал которых поступает на двери или шлюзы. Когда обе нажимные плиты станут безводными, шлюзы откроются. При обнаружении воды шлюзы закрываются. (Если вы использовали нажимные пластины 0-0 с OR, вы получили бы сигнал 0, если обе пластины обнаружили воду, или сигнал ВКЛ в противном случае, что аналогично 1-7 NAND 1-7.)
* NAND gate: A NAND gate returns TRUE (ON) whenever both inputs are not both TRUE (e.g. ON NAND ON is OFF, but every other combination is ON). Instead of the OR NOT or NOR example, you could link two 0-0 water sensors to a NAND gate, and link the NAND gate’s output to raising bridges. 0-0 NAND 0-0 is the same as 1-7 OR 1-7. If there is no water on both pressure plates, the NAND gate will output an OFF signal. If, however, either has water, it will output an ON signal.
* элемент NAND (НЕ-И): отключается только если включены оба входа. Вместо OR NOT или NOR вы можете подключить два датчика воды 0-0 к вентилю NAND и связать выход вентиля NAND с подъемом мостов. 0-0 NAND 0-0 то же самое, что 1-7 OR 1-7. Если на обеих нажимных пластинах нет воды, вентиль NAND выдаст сигнал 0. Однако если в любом из них есть вода, он выдаст сигнал 1.


* And here’s a more complicated example, omitting the details of what gates to use: An automated swimming training room, where you pull a lever to close exit doors and open hatches to drop water into it, then pressure plates detect when there’s enough water and close the hatches, and after a certain amount of time (using a very slow repeater, for instance), drains and exit doors open and the system resets until you pull the lever again. Or, the lever could be taken out entirely and the system could be made fully automatic (with dwarves set to train in the room, for instance) using the repeater.
* Есть более сложный пример использования описанных выше элементов: автоматическая комната тренировки навыка плавания. Рычаг закрывает двери и открывает шлюзы, запуская внутрь воду, нажимные пластины, обнаружив достаточный уровень воды, закрывают шлюзы, и через некоторое время (с помощью очень медленного повторителя, например) осушают комнату и открывают двери, и система готова к следующему нажатию рычага. Или можно убрать рычаг и сделать систему полностью автоматической (дварфам можно, например, приказать тренироваться внутри), используя повторитель.


== Примеры ==
== Примеры ==
Здесь приведены примеры нескольких реально работающих дварфопьютеров и некоторые концепции, которые в принципе могут быть использованы. Но в большинстве случаев они создавались просто для веселья. Это нисколько не умаляет заслуги их разработчиков т.к. их создание в целом  может оказаться очень сложным.<br />Пока что неизвестны примеры схем основанные на животной или борг логике.
Здесь приведены примеры нескольких реально работающих дварфопьютеров и некоторые концепции, которые в принципе могут быть использованы. Но в большинстве случаев они создавались просто для веселья. Это нисколько не умаляет заслуги их разработчиков т.к. их создание в целом  может оказаться очень сложным. <br />Пока что неизвестны примеры схем, основанных на животной или борг логике.


=== Полезное ===
=== Полезное ===
Строка 147: Строка 146:
* повторитель
* повторитель
** на механической логике http://mkv25.net/dfma/movie-1370-pump-basedautorepeater
** на механической логике http://mkv25.net/dfma/movie-1370-pump-basedautorepeater
* арифмометр
* сумматор
** на механической логике, 6-битный(6-bit): http://mkv25.net/dfma/movie-1561-addingmachine
** на механической логике, 6-битный(6-bit): http://mkv25.net/dfma/movie-1561-addingmachine
** на жидкостной логике, 8-битный(8-bit): http://mkv25.net/dfma/movie-1084-numberabbeydemonstration
** на жидкостной логике, 8-битный(8-bit): http://mkv25.net/dfma/movie-1084-numberabbeydemonstration
[[File:Armoc Invaders intro.png|thumb|right|200px|''[[:en:User:BaronW#Armok_Invaders|Armok Invaders]], полноценная игра'']]


=== Раз плюнуть ===
=== Раз плюнуть ===
Строка 158: Строка 158:
* крестики-нолики
* крестики-нолики
** на механической логике http://mkv25.net/dfma/movie-1813-tictactoev10simple
** на механической логике http://mkv25.net/dfma/movie-1813-tictactoev10simple
* Armok Invaders
** механическая и вагонеточная логики: https://www.youtube.com/watch?v=j2cMHwo3nAU


== Страницы по теме ==
== Страницы по теме ==
* [http://df.magmawiki.com/index.php/User:BaronW User:BaronW] — The Almighty Dwarven Calculator
* [[:en:User:BaronW|User:BaronW]] — Всемогущий Дварфийский Калькулятор
* [http://df.magmawiki.com/index.php/User:Jong User:Jong] — The first fully programmable digital Dwarven Computer
* [[:en:User:Jong|User:Jong]] — Первый полностью программируемый цифровой дварфийский компьютер
* [http://df.magmawiki.com/index.php/User:SL/Logic Gates User:SL/Logic Gates] — These use mechanisms for connecting gates and devices and so forth, but fluid for logic. They’re built on top of a body of water, and require power (for a pump or two per gate).
* [[:en:User:SL/Logic_Gates|User:SL/Logic Gates]] — Здесь используются механизмы для соединения вентилей, устройств и т. д., но жидкость для логики. Построено на поверхности водоема и требует энергии (для одну-две помпы на вентиль).
* [http://df.magmawiki.com/index.php/User:Kyace/Adder User:Kyace/Adder] — A full adder built using fluid logic, with a video of a rough prototype. Trivial to combine 8 of these to make a fluid device capable of adding two 8 bit numbers together.
* [[:en:User:Kyace/Adder|User:Kyace/Adder]] — Полный сумматор, построенный с использованием жидкостной логики, с видео грубого прототипа. Дальше несложно объединить 8 таких, чтобы создать жидкостное устройство, способное складывать два 8-битных числа вместе.
* [http://df.magmawiki.com/index.php/User:Soundandfury#Logic_Gates User:Soundandfury#Logic_Gates] — These have a water supply reservoir above and a drain below. The drained water can be pumped back to the supply reservoir.
* [[:en:User:Soundandfury#Logic_Gates|User:Soundandfury#Logic_Gates]] — Тут есть резервуар для подачи воды сверху и слив снизу. Слитую воду можно перекачивать обратно в подающий резервуар.
* [http://df.magmawiki.com/index.php/User:Bidok User:Bidok] — Animal logic with all gates, memory, repeater and counter. All powered by kittens.
* [[:en:User:Bidok|User:Bidok]] — Животная логика со всеми вентилями, памятью, повторителем и счетчиком. Все запитывается от котят.
* [http://df.magmawiki.com/index.php/User:LordOOTFD#Animal_Logic User:LordOOTFD#Animal_Logic] — Animal logic with fast complex gates, building upon Bidok’s kitten powered systems.
* [[:en:User:LordOOTFD#Animal_Logic|User:LordOOTFD#Animal_Logic]] — Животная логика с быстрыми сложными вентилями, основанная на системах с питанием от котят.
* [http://df.magmawiki.com/index.php/User:Hussell#Assorted_Devices User:Hussell#Assorted_Devices] — Fluid logic
* [[:en:User:Hussell#Assorted_Devices|User:Hussell#Assorted_Devices]] — Жидкостная логика.
* [http://df.magmawiki.com/index.php/User:Gammon User:Gammon] — Fluid logic. Very detailed CMOS gates.
* [[:en:User:Gammon|User:Gammon]] — Жидкостная логика. Очень подробные КМОП-вентили.
* [[:en:User:Root_Infinity|User:Root Infinity]] — Другие логические вентили.
* [[:en:User:Vasiln/Goblin_Logic_1|User:Vasiln/Goblin Logic 1]] — Теория и практика логики существ, основанной на вторженцах.
* [[:en:User:Larix|User:Larix]] — Различные инженерные проекты, в том числе второй полностью программируемый дварфийский компьютер (возможно, первый, способный к автономному исполнению) и тщательная проработка логики, основанной на движущихся вагонетках.
* [[:en:User:Gnidan|User:Gnidan]] — Система маршрутизации вагонеток для перемещения товаров из одной точки в другую по общему пути.


{{buildings}}
{{buildings}}


[[en:Computing]]
[[en:Computing]]

Текущая версия от 17:41, 5 сентября 2023

Вычислениями в Dwarf Fortress называют практику создания сложных механических устройств, реализующих логические и численные операции. В идеале, это делается для автоматизации какой-либо функции вашей крепости. Пусть даже сейчас это уже и не новая идея, но она все ещё оставляет достаточно простора для улучшений и исследований, в том числе и по той причине, что одну и ту же проблему можно решить разными способами. Изобретения и усовершенствования только приветствуются!

Двоичная информация

Информация, представленная в двоичном виде, может принимать всего два состояния: истину или ложь, что соответствует 1 или 0. В игре эти состояния можно хранить разными способами:

Это элементарное представление информации лежит в основе всех электронных устройств и компьютеров, поэтому, если вы хотите строить более-менее сложные схемы, с этим нужно ознакомиться: Логика высказываний

Ввод/вывод

Устройством ввода может служить любой механизм, который можно связать с другими устройствами. К такими механизмам относятся рычаги и нажимные плиты. Нажимная плита, при её установке, может быть настроена, на какой вес воды, лавы и существ она должна реагировать. Также её можно настроить так, чтобы она могла реагировать и на ваших дварфов тоже. Указав минимальное и максимальное значение уровня воды и лавы для нажимной плиты, вы всегда будете получать от нее состояние ВКЛ (on) для этого интервала, а для всех остальных значений — состояние ВЫКЛ (off). Независимо от уровня воды, лавы или веса существа, действующих на нажимную плиту, это устройство всегда будет посылать или 1 или 0 на другие "элементы" сети. А это значит, что нажимные плиты могут служить основой для двоичных запоминающих устройств.

Виды ввода

  • Ручное переключение: Рычаг -> двоичный 1 или 0.
  • Автоматическое переключение: Нажимная плита -> двоичный 1 или 0.

В качестве ввода/вывода может служить все что угодно, что умеет реагировать на изменение сигнала. Это могут быть двери, мосты, шлюзы пропускающие или препятствующие течению жидкостей, шестерни связанные с насосами и многое другое. В некоторых случаях — когда используется механическая логика — в качестве вывода требуется не сигнал ВКЛ/ВЫКЛ (on/off), а подключение/отключение механизмов от источника энергии.

Для обратного преобразования состояния подключенности к источнику энергии в сигнал ВКЛ/ВЫКЛ (on/off) известен (на данный момент) только один способ. Этот способ предполагает использование насоса с неограниченным источником воды и неограниченным сливом. Для обнаружения факта, включен ли насос (т.е. подключен ли он к источнику энергии) используется нажимная плита размещенная у слива. Она реагирует на наличие потока перекачиваемой жидкости.

Виды вывода

  • сигнал: нажимная плита -> на выходе сигнал ВКЛ/ВЫКЛ (on/off) -> сигнал может поступать на все объекты обладающие способностью подлючаться к источнику сигнала и реагировать на его изменение
  • энергия: комплекс шестерней -> на выходе энергия или её отсутствие (состояния подключен к источнику энергии / отключен от источника энергии) -> энергия может поступать на механизмы, потребляющие энергию

Бинарная логика

Операции бинарной логики осуществляют вычисление значения бита на выходе, полученного в результате некоторых операций со значениями одного или двух битов на входе. Устройства, которые умеют выполнять такие операции, обычно называют логическими вентилями или логическими элементами

  • NOT — принимает на вход один бит и возвращает бит с противоположным значением

вход A NOT
0 1
1 0


все остальные операции получают на вход два бита

  • AND — возвращает true если они оба имеют значение true
  • OR — возвращает true если хотя бы один из них имеет значение true
  • XOR — возвращает true если только один из них имеет значение true
  • NAND — возвращает true если как минимум один из них имеет значение false
  • NOR — возвращает true если они оба имеют значение false
  • NXOR — возвращает true если они оба имеют одинаковые значения

вход A вход B AND OR XOR NAND NOR NXOR
0 0 0 0 0 1 1 1
0 1 0 1 1 1 0 0
1 0 0 1 1 1 0 0
1 1 1 1 0 0 0 1


Логические выражения, которые используют операции НЕ(NOT), И(AND) и ИЛИ(OR) наиболее легки для понимания человеком. Однако, оказывается, что все возможные логические операции можно реализовать используя только NAND или только NOR вентили. Некоторые логические вентили сделать проще и они потребуют меньше компонентов, чем другие, хотя это зависит от того, какой подход вы используете при построении логических схем. В общем случае, самостоятельное проектирование каждого логического вентиля, который вам действительно необходим (или использование уже придуманных схем) предпочтительнее, чем строительство множества NAND вентилей, так как в результате ваш дфарфпутер будет и быстрее работать, и потребует меньше ресурсов на его создание (энергии, воды, котят, строительных материалов и всего остального, что вы задумаете использовать).

Сложные вентили

Принцип работы

Существует четыре основных принципа дварфийских вычислений, в зависимости от того, что будет управлять системой. У каждого из них есть свои преимущества и недостатки.

Четыре основных принципа:

Жидкостная логика

Жидкостная логика управляет течением жидкости по нажимным плитам. Схема с жидкостной логикой может быть легко построена и все известные элементы в Dwarf Fortress уже построены на этом принципе. С другой стороны, этот принцип зависит от неограниченного источника жидкости, так как приходится бороться с испарением и полным высыханием.

Механическая логика

Механическая логика использует системы осей и шестерёнок для постройки логических схем. Механическая логика реагирует очень быстро и может быть легко построена. Так как каждый редуктор сам по себе может быть связан с триггером (или несколькими триггерами) и автоматически подключаться к соседним редукторам для питания или передачи сигнала, механическая логика являются очень гибкой и не требуют большого числа различных устройств, которые, как правило, используются в жидкостной логике. С другой стороны, этот принцип использует ОГРОМНОЕ количество механической энергии; кроме того, простейшие механические схемы будут выдавать не сигнал, а энергию, поэтому, если вам нужен сигнал, например, для открытия мостов или дверей, нужна схема, переводящая энергию в сигнал. Впрочем, существуют полностью рабочие схемы перевода энергии в сигнал на основе жидкостей; после введения в игру вагонеток такие схемы стало возможным делать более компактными. С появлением вагонеток стали доступны компактные безжидкостные преобразователи "энергия->сигнал", что сделало вагонеточную логику привлекательной альтернативой для развертывания механической логики в вашей крепости. Наряду с передовыми методами построения логических элементов путем "предварительного переключения" узла шестерни (см. Mechanical_logic#На_основе_переключения), можно построить любую логическую схему, если в игре достаточно места для этого.

Животная логика

Логика существ использует нажимные пластины и ограничения на перемещение существ через постройки, такие как двери и люки, в сочетании с их поведением для построения логических схем. Логика существ требует очень много места, но не требует энергии, жидкости или ценных материалов. Любой вид логической схемы можно построить с помощью логики существ.

Логика животных — это особый вид логики существ, основанный на попытках животных пройти через плотно закрытые двери. Логические схемы животных могут быть гораздо более экономичными, чем другие формы логики существ, но они несколько ненадежны.

Вагонеточная логика

Логика вагонеток включает в себя контроль путей вагонеток через нажимные плиты для построения логических вентилей. Логика вагонеток легко интегрируется с механической логикой. Энергия, что, возможно, удивительно, не является обязательной. Логика вагонетки полна и компактна. Её не хватает скорости, на которую способны механические схемы, но для некоторых архитекторов проектирование схемы вагонеток может быть намного проще и интуитивно понятнее.

Примеры схем, которые вы могли бы создать, используя логические элементы

  • Repeater (Генератор импульсов): многократно переключается. Можно использоваться для открытия и закрытия люков или движения шипов вверх-вниз.
  • Latch (Триггер): запоминает своё состояние, имеет два входа, каждый переключающий на своё состояние. Можно делать, например, одноразовые нажимные пластины, сбрасываемые рычагом.
  • элемент NOT (НЕ): изменяет сигнал от переключателей или нажимных пластин на противоположный. Обычно привязывается к триггерам.
  • элемент AND (И): выдаёт сигнал тогда и только тогда, когда подаётся сигнал на все входы. Можно, например, присоединить выход со схемы к одному входу AND и рычаг для управления схемой к другому, и если рычаг будет выключен, то выход AND всегда будет выключен вне зависимости от состояния схемы.
  • элемент OR (ИЛИ): выдаёт сигнал тогда, когда хотя бы на одном входе есть сигнал. Можно, например, присоединить несколько сенсоров воды (настроенных на 1-7) к входу OR и присоединить его выход к NOT, к которому подключены экстренные шлюзы или двери, которые бы закрывались, когда обнаружена вода.
  • элемент XOR (исключающее ИЛИ): включается, если ровно один из двух входов включен. Можно использовать нажимные пластины с триггерами в разных частях крепости для обнаружения противника. Связав их с XOR, можно закрыть входы в крепость, если обнаружен враг, и открыть их, если враг обнаружен внутри.
  • элемент NOR (НЕ-ИЛИ): отключается только если включается хотя бы один вход. Вместо использования вентиля OR с вентилем NOT вы можете использовать вентиль NOR, связанный с двумя датчиками воды 1-7, выходной сигнал которых поступает на двери или шлюзы. Когда обе нажимные плиты станут безводными, шлюзы откроются. При обнаружении воды шлюзы закрываются. (Если вы использовали нажимные пластины 0-0 с OR, вы получили бы сигнал 0, если обе пластины обнаружили воду, или сигнал ВКЛ в противном случае, что аналогично 1-7 NAND 1-7.)
  • элемент NAND (НЕ-И): отключается только если включены оба входа. Вместо OR NOT или NOR вы можете подключить два датчика воды 0-0 к вентилю NAND и связать выход вентиля NAND с подъемом мостов. 0-0 NAND 0-0 то же самое, что 1-7 OR 1-7. Если на обеих нажимных пластинах нет воды, вентиль NAND выдаст сигнал 0. Однако если в любом из них есть вода, он выдаст сигнал 1.
  • Есть более сложный пример использования описанных выше элементов: автоматическая комната тренировки навыка плавания. Рычаг закрывает двери и открывает шлюзы, запуская внутрь воду, нажимные пластины, обнаружив достаточный уровень воды, закрывают шлюзы, и через некоторое время (с помощью очень медленного повторителя, например) осушают комнату и открывают двери, и система готова к следующему нажатию рычага. Или можно убрать рычаг и сделать систему полностью автоматической (дварфам можно, например, приказать тренироваться внутри), используя повторитель.

Примеры

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

Полезное

  • Магменная ловушка
    • Пример рабочего дварфопьютера управляющего магменной ловушкой. Она автоматически наводняет местность лавой, а через некоторое время избавляется от неё. Таймер специально рассчитан так, чтобы жертва после себя оставляла только ценные металлы.
      видео: http://mkv25.net/dfma/movie-1808-perfectmagmatrap
      устройство: http://i576.photobucket.com/albums/ss208/kanddak/magmatrap.png

Идеи

Armok Invaders, полноценная игра

Раз плюнуть

Страницы по теме

  • User:BaronW — Всемогущий Дварфийский Калькулятор
  • User:Jong — Первый полностью программируемый цифровой дварфийский компьютер
  • User:SL/Logic Gates — Здесь используются механизмы для соединения вентилей, устройств и т. д., но жидкость для логики. Построено на поверхности водоема и требует энергии (для одну-две помпы на вентиль).
  • User:Kyace/Adder — Полный сумматор, построенный с использованием жидкостной логики, с видео грубого прототипа. Дальше несложно объединить 8 таких, чтобы создать жидкостное устройство, способное складывать два 8-битных числа вместе.
  • User:Soundandfury#Logic_Gates — Тут есть резервуар для подачи воды сверху и слив снизу. Слитую воду можно перекачивать обратно в подающий резервуар.
  • User:Bidok — Животная логика со всеми вентилями, памятью, повторителем и счетчиком. Все запитывается от котят.
  • User:LordOOTFD#Animal_Logic — Животная логика с быстрыми сложными вентилями, основанная на системах с питанием от котят.
  • User:Hussell#Assorted_Devices — Жидкостная логика.
  • User:Gammon — Жидкостная логика. Очень подробные КМОП-вентили.
  • User:Root Infinity — Другие логические вентили.
  • User:Vasiln/Goblin Logic 1 — Теория и практика логики существ, основанной на вторженцах.
  • User:Larix — Различные инженерные проекты, в том числе второй полностью программируемый дварфийский компьютер (возможно, первый, способный к автономному исполнению) и тщательная проработка логики, основанной на движущихся вагонетках.
  • User:Gnidan — Система маршрутизации вагонеток для перемещения товаров из одной точки в другую по общему пути.

Предметы обстановки
Animal trapAnvilArmor standBedBlocksBox (chest • coffer) • BucketCabinetCage (aquarium • terrarium) • Coffin (casket • sarcophagus) • RestraintSlabStatueTableThrone (chair) • Weapon rack
Инструменты
AltarBookcaseDisplay (display case • pedestal) • HiveNest box

Контроль проходов
BarsBridgeDoor (portal) • FloodgateGrateHatchRoadWindow
Конструкции
Машины и части ловушек
Прочее

Связанные статьи