{"id":12291,"date":"2022-11-29T13:37:49","date_gmt":"2022-11-29T11:37:49","guid":{"rendered":"http:\/\/www.soeren-in-norwegen.net\/blog\/?p=12291"},"modified":"2022-10-03T14:23:01","modified_gmt":"2022-10-03T12:23:01","slug":"can-it-run-doom-magic-the-gathering","status":"publish","type":"post","link":"http:\/\/www.soeren-in-norwegen.net\/blog\/2022\/11\/can-it-run-doom-magic-the-gathering\/","title":{"rendered":"Can it run Doom? \u2026 Magic: The Gathering"},"content":{"rendered":"<p><em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Magic:_The_Gathering\" target=\"_blank\" rel=\"noopener\">Magic: The Gathering<\/a><\/em> ist ein Kartenspiel, bei dem jeder Spieler ein Set von unterschiedlichen Karten hat die im Spielablauf verschiedene Sachen machen. Die grundlegenden Regeln sind im Wesentlichen (wie bei jedem Kartenspiel) sehr simpel: Spiel in deinem Zug eine Karte und wenn auf der was drauf steht, dann mach das.<br \/>\nDie Dinge die auf den Karten stehen sind im Grunde auch nicht sehr komplex. Das wuerde dem Grundgedanken eines (Gesellschafts)Spiels entgegen stehen. Die Komplexitaet liegt in der Interaktion und wenn man nun bestimmte Karten in einer bestimmten Reihenfolge spielt, kann man damit eine <a href=\"https:\/\/en.wikipedia.org\/wiki\/Turing_machine\" target=\"_blank\" rel=\"noopener\">Turingmaschine<\/a> bauen.<\/p>\n<p>Churchill, A., Biderman, S. und Austin Herrick schreiben ueber die Konstruktion einer Turing Maschine aus diesen einfachen Grundbausteinen in ihrem Artikel mit dem passenden Titel &#8222;<a href=\"https:\/\/arxiv.org\/abs\/1904.09828\" target=\"_blank\" rel=\"noopener\">Magic: The Gathering is Turing Complete<\/a>&#8220; \u2026 aber der Reihe nach.<\/p>\n<p>Im Allgemeinen war dies der Konsensus bzgl. normaler, nicht-elektronischer (!) (Gesellschafts)Spiele :<\/p>\n<blockquote><p>[t]he approach of embedding a Turing machine inside a game directly is generally not considered to be feasible for real-world games [\u2026].<\/p><\/blockquote>\n<p>Der Grund <span dir=\"ltr\" role=\"presentation\">war, dass \u2026<\/span><\/p>\n<blockquote><p><span dir=\"ltr\" role=\"presentation\">[\u2026] the unbounded memory required to simulate a Turing machine entirely in a game would be a violation of the very nature of a game.<\/span><\/p><\/blockquote>\n<p><span dir=\"ltr\" role=\"presentation\">Darum die obige Beschraenkung auf nicht-elektronische Spiele, denn Minecraft oder <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dwarf_Fortress\" target=\"_blank\" rel=\"noopener\">Dwarf Fortress<\/a> haben im Wesentlichen Zugriff zu &#8222;unendlichem Speicher&#8220; und da ist es zwar immer noch eine ziemliche Leistung eine Turingmaschine zu bauen, aber es verwundert nicht all zu sehr.<br \/>\n<\/span><\/p>\n<p>Ein weiterer Grund fuer den bisherigen Konsensus war, dass \u2026<\/p>\n<blockquote><p>[\u2026] <span dir=\"ltr\" role=\"presentation\">almost every <\/span><span dir=\"ltr\" role=\"presentation\">real-world game is trivially decidable, as they produce game <\/span><span dir=\"ltr\" role=\"presentation\">trees with only computable paths.<\/span><\/p><\/blockquote>\n<p>Das kann zwar SEHR komplex (bspw. im Schach) werden, prinzipiell ist das natuerlich richtig. Diese Eigenschaft steht aber einer Turingmaschine entgegen, denn diese ist <a href=\"https:\/\/en.wikipedia.org\/wiki\/Turing_completeness\" target=\"_blank\" rel=\"noopener\">Turing-vollstaendig<\/a>. Zur Erinnerung: letzteres bedeutet, dass man ALLE Algorithmen implementieren kann, also auch solche bei den man NICHT entscheiden kann ob die anhalten (oder nicht); was dann ja zum <a href=\"https:\/\/en.wikipedia.org\/wiki\/Halting_problem\" target=\"_blank\" rel=\"noopener\">Halteproblem<\/a> fuehrt.<\/p>\n<p>Der Artikel ist stellenweise lustig zu lesen, denn normalerweise liest man so Sachen wie \u2026<\/p>\n<blockquote><p>[c]onsider the following situation: both players control Lich, Transcendence, and Laboratory Maniac. One player then casts Menacing Ogre.<\/p><\/blockquote>\n<p>\u2026 eher nicht in einer wissenschaftlichen Publikation \u2026 tihihi.<\/p>\n<p>Aber wie sind die verschiedenen Teile einer Turingmaschine nun konstruiert? Der Speicher ist einfach, das sind einfach nur Karten mit verschiedenen Werten (und Farben, aber &#8217;ne Farbe ist ja auch ein Wert).<\/p>\n<p>Als naechstes braucht man einen Schreib- und Lesekopf und Instruktionen was der (auf dem Speicher) machen soll.<\/p>\n<blockquote><p><span dir=\"ltr\" role=\"presentation\">Control instructions in a Turing machine are represented by <\/span><span dir=\"ltr\" role=\"presentation\">a table of conditional statements of the form \u201cif the machine <\/span><span dir=\"ltr\" role=\"presentation\">is in state<\/span> <span dir=\"ltr\" role=\"presentation\">s<\/span><span dir=\"ltr\" role=\"presentation\">, and the last read cell is symbol<\/span> <span dir=\"ltr\" role=\"presentation\">k<\/span><span dir=\"ltr\" role=\"presentation\">, then do such-<\/span><span dir=\"ltr\" role=\"presentation\">and-such.\u201d<\/span><\/p><\/blockquote>\n<p><span dir=\"ltr\" role=\"presentation\">Hier nimmt man Karten mit bestimmten Bedingungen \u2026<\/span><\/p>\n<blockquote><p><span dir=\"ltr\" role=\"presentation\">[m]any Magic cards have triggered abilities which can function like conditional statements.<\/span><\/p><\/blockquote>\n<p>\u2026 und mithilfe wiederum anderer Karte modifiziert man diese Bedingungen gezielt. Letztlich wird dann ein \u2026<\/p>\n<blockquote><p><a href=\"https:\/\/gatherer.wizards.com\/Pages\/Card\/Details.aspx?multiverseid=39640\" target=\"_blank\" rel=\"noopener\"><span dir=\"ltr\" role=\"presentation\">Rotlung Reanimator<\/span><\/a> <span dir=\"ltr\" role=\"presentation\">(&#8222;Whenever Rotlung Reanimator or <\/span><span dir=\"ltr\" role=\"presentation\">another Cleric dies, create a 2\/2 black Zombie creature token&#8220;)<\/span><\/p><\/blockquote>\n<p>\u2026 <span dir=\"ltr\" role=\"presentation\">modifiziert mit \u2026<\/span><\/p>\n<blockquote><p><span dir=\"ltr\" role=\"presentation\"><a href=\"https:\/\/gatherer.wizards.com\/Pages\/Card\/Details.aspx?multiverseid=39923\" target=\"_blank\" rel=\"noopener\">Artificial Evolution<\/a> [\u2026] &#8222;Change the text of target spell or permanent by replacing all instances of one creature type with another [\u2026]&#8220;<\/span><\/p><\/blockquote>\n<p><span dir=\"ltr\" role=\"presentation\">\u2026 zu:<br \/>\n<\/span><\/p>\n<blockquote><p>Rotlung Reanimator [modifiziert] [\u2026] &#8222;Whenever Rotlung Reanimator or another Aetherborn dies, create a 2\/2 white Sliver creature token&#8220;.<\/p><\/blockquote>\n<p><span dir=\"ltr\" role=\"presentation\">Das entspricht dann einer Instruktion wie oben beschrieben; ganz konkret in diesem Fall:<\/span><\/p>\n<blockquote><p><span dir=\"ltr\" role=\"presentation\">When reading symbol 1 in state A, write symbol 18 and move left.<\/span><\/p><\/blockquote>\n<p>Symbol 1 ist &#8222;Aetherborn&#8220; (A), Symbol 18 ist &#8222;Sliver&#8220; (S), &#8222;write&#8220; weil Aetherborn mit Sliver ersetzt wird und aus der Farbe der Karte (hier sind die weisz) folgt automatisch, wie sich der Kopf danach bewegen muss.<\/p>\n<p>Das macht man nun mit verschiedenen Karten \/ Kreaturen und am Ende hat man alle Instruktionen und Teile (man braucht noch mehr als Speicher und Schreib\/Lesekopf) die man fuer eine Turingmaschine braucht.<br \/>\nIn einem Spielzug fuehrt man dann bspw. eine Aktion aus, die dazu fuehrt, dass gewisse Kreaturen sterben; das triggert die modifizierten <span dir=\"ltr\" role=\"presentation\">Rotlung Reanimator<\/span>s und dann wird eine Instruktion ausgefuehrt.<\/p>\n<p>Nun gibt es Zustaende des &#8222;Spielbretts&#8220; (also der Karten die ausliegen), die einem Spieler (prinzipiell) erlauben unendlich viele Zuege hintereinander zu machen \u2026 ZACK! Hat man eine Schleife \u2026 und die kann prinzipiell unendlich lange laufen \u2026 und wenn man das hat, werden die Konsequenzen vorheriger Spielzuege (die ja das Spielbrett in eine gewisse Situation bringen) prinzipiell unverhersagbar \u2026 damit hat man keinen Entscheidungsbaum mehr und steht vor dem Halteproblem welches eine Turingmaschine nun mal mit sich bringt.<\/p>\n<p>URST COOL WA!<\/p>\n<p>Um DOOM auf <em>Magic<\/em> laufen zu lassen, muss man &#8222;uebersetzen&#8220; was ein Brettzustand, eine Karte, eine Kombination von Karten usw. usf. denn bedeutet. DAS ist urst kompliziert. Aber dadurch, dass eine Turingmaschine konstruiert werden kann ist <em>Magic<\/em> Turing vollstaendig und das bedeuet, dass es jedwedes Programm ausfuehren kann und daraus folgt, dass es eine solche Uebersetzung geben muss \u2026 Aber die ist bestimmt so involviert, dass die Framerate dieses DOOM bei einem Bild alle zehntausend Jahre liegt oder so \u2026 das ist etwas unpraktisch, nicht wahr \u2026 Aber um tatsaechliche Durchfuehrbarkeit geht&#8217;s mir ja ueberhaupt nicht.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Magic: The Gathering ist ein Kartenspiel, bei dem jeder Spieler ein Set von unterschiedlichen Karten hat die im Spielablauf verschiedene Sachen machen. Die grundlegenden Regeln sind im Wesentlichen (wie bei jedem Kartenspiel) sehr simpel: Spiel in deinem Zug eine Karte und wenn auf der was drauf steht, dann mach das. Die Dinge die auf den [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts\/12291"}],"collection":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/comments?post=12291"}],"version-history":[{"count":4,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts\/12291\/revisions"}],"predecessor-version":[{"id":12295,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts\/12291\/revisions\/12295"}],"wp:attachment":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/media?parent=12291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/categories?post=12291"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/tags?post=12291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}