{"id":203,"date":"2019-08-02T06:39:58","date_gmt":"2019-08-02T06:39:58","guid":{"rendered":"http:\/\/gigers.com\/blog\/?p=203"},"modified":"2024-06-24T17:33:04","modified_gmt":"2024-06-24T17:33:04","slug":"simulation-mit-snap","status":"publish","type":"post","link":"https:\/\/gigers.com\/blog\/simulation-mit-snap\/","title":{"rendered":"Simulationen mit Snap!"},"content":{"rendered":"<p>Snap! eignet sich auch daf\u00fcr, einfache Simulationen durchzuf\u00fchren. Das vorliegende Beispiel zeigt die Simulation einer Population, deren Verhalten von den vorhandenen Ressourcen abh\u00e4ngt.<\/p>\n<figure id=\"attachment_204\" aria-describedby=\"caption-attachment-204\" style=\"width: 960px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-204\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_stage_2.png\" alt=\"\" width=\"960\" height=\"720\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_stage_2.png 960w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_stage_2-300x225.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_stage_2-768x576.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-204\" class=\"wp-caption-text\">Kleine Lebewesen sind auf der Futtersuche. Die Zahlen zeigen an, wie viel sie schon gefressen haben.<\/figcaption><\/figure>\n<p>Die Programmierung dieser Welt wird in drei Schritten aufgebaut:<\/p>\n<ol>\n<li>Die Welt schafft die Umgebung f\u00fcr die Lebewesen.<\/li>\n<li>Das Futter dient als Ressource f\u00fcr die Lebewesen.<\/li>\n<li>Die Lebewesen sind auf der Suche nach Futter. Der Erfolg dabei entscheidet \u00fcber Tod, Weiterleben oder Vermehrung.<\/li>\n<\/ol>\n<h3>Die Welt<\/h3>\n<p>Die Welt wird durch den Bildschirm begrenzt und gibt den Zeittakt vor. Alle sechs Sekunden beginnt in der Welt ein neuer Tag. Der Tagesanbruch wird in Snap! durch eine Nachricht an alle mitgeteilt.<\/p>\n<figure id=\"attachment_205\" aria-describedby=\"caption-attachment-205\" style=\"width: 502px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-205\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_background.png\" alt=\"\" width=\"502\" height=\"458\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_background.png 502w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_background-300x274.png 300w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><figcaption id=\"caption-attachment-205\" class=\"wp-caption-text\">Die Welt verh\u00e4lt sich zyklisch und der Tagesanbruch wird durch eine entsprechende Mitteilung angek\u00fcndigt.<\/figcaption><\/figure>\n<p>Sobald das Programm (gr\u00fcne Flagge) gestartet wird, beginnt das Programm ein Hintergrundger\u00e4usch (Wellen) abzuspielen. Dieser Aspekt kann auch weggelassen werden, macht die Simulation aber stimmungsvoller.<\/p>\n<p>Anschliessend wird in einer Endlosschleife der Tagesablauf programmiert: Im Laufe der Zeit wird der Hintergrund immer dunkler und zu Beginn jedes Tages wird mit &#8222;broadcast&#8220; eine Mitteilung versendet, welche sowohl die Futterquelle als auch die Lebewesen beeinflusst.<\/p>\n<p>Dieser Ansatz unterscheidet sich von vielen Simulationsprogrammen, wo jeweils eine gewisse Anzahl von Schritten f\u00fcr jedes Objekt der Simulation berechnet wird. Die Objektorientierung von Snap! erlaubt hier die parallele Abarbeitung von Befehlen. Es w\u00e4re jedoch auch m\u00f6glich, einen traditionelleren Ansatz zu verfolgen.<\/p>\n<h3>Das Futter<\/h3>\n<p>Im vorliegenden Programm verh\u00e4lt sich das Futter (die Ressource) passiv. Zu Beginn eines neuen Tages werden Futterst\u00fccke zuf\u00e4llig in der Welt verteilt. Sobald sie in Ber\u00fchrung mit einem Lebewesen kommen, werden sie gefressen.<\/p>\n<figure id=\"attachment_206\" aria-describedby=\"caption-attachment-206\" style=\"width: 882px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-206\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_food.png\" alt=\"\" width=\"882\" height=\"824\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_food.png 882w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_food-300x280.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_food-768x717.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-206\" class=\"wp-caption-text\">Das Futter wird jeweils zu Tagesbeginn neu in der Welt verteilt.<\/figcaption><\/figure>\n<p>Das eigentliche Programm besteht aus vier Teilen, die abh\u00e4ngig von Ereignissen sind:<\/p>\n<ol>\n<li>Zu Beginn des Programms wird das bereits vorhandene Futterobjekt versteckt.<\/li>\n<li>Wenn ein neuer Tag beginnt, werden alle alten Futterobjekte gel\u00f6scht und Klone des Futterobjekts erzeugt. Klone sind Objekte, welche alle Eigenschaften des urspr\u00fcnglichen Objekts erben.<\/li>\n<li>Jeder Klon wird an einer zuf\u00e4lligen Position auf dem Bildschirm angezeigt.<\/li>\n<li>Wenn der Klon mit einem Lebewesen in Ber\u00fchrung kommt, wird er gel\u00f6scht.<\/li>\n<\/ol>\n<p>Der in Snap! m\u00f6gliche Ansatz des Klonens erlaubt es, die Programmierung sehr einfach zu halten. Ausserdem kann das Verhalten der Klone an zentraler Stelle sehr einfach angepasst werden. So w\u00e4ren nur wenige Befehle im Block &#8222;When I start as a clone&#8220; notwendig, um die Futterteilchen in der Welt herumschwimmen zu lassen.<\/p>\n<p>Die bereits vorhandene Variable &#8222;lifespan&#8220; k\u00f6nnte dazu genutzt werden, dass die Futterteilchen mehr als einen Tag zu Verf\u00fcgung stehen.<\/p>\n<h3>Die Lebewesen<\/h3>\n<p>Die Lebewesen irren zuf\u00e4llig in der Welt herum (random walk). Wenn sie auf den Bildschirmrand treffen, drehen sie sich um und setzen ihre Bewegung fort.<\/p>\n<figure id=\"attachment_207\" aria-describedby=\"caption-attachment-207\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-207\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_creature-1024x639.png\" alt=\"\" width=\"525\" height=\"328\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_creature-1024x639.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_creature-300x187.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_creature-768x480.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/08\/simulation_creature.png 1286w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-207\" class=\"wp-caption-text\">In der aktuellen Programmierung sind die Lebewesen nicht in der Lage, aktiv nach Futter zu suchen, sondern sie finden dieses zuf\u00e4llig.<\/figcaption><\/figure>\n<p>Auch die Programmierung der Lebewesen gliedert sich in vier Teile, welche abh\u00e4ngig von Ereignissen sind:<\/p>\n<ol>\n<li>Bei Programmstart wird das eigentliche Objekt versteckt und Klone werden erzeugt.<\/li>\n<li>Jeder Klon wird initialisiert, begibt sich an eine zuf\u00e4llige Stelle auf dem Bildschirm und wandert zuf\u00e4llig herum. Die Anzahl der bereits gefressenen Futterteilchen wird laufend angezeigt. Entfernt man den Befehl &#8222;say(food)&#8220; f\u00e4llt diese Anzeige weg.<\/li>\n<li>Wenn ein Lebewesen auf ein Futterteilchen st\u00f6sst, wird die Variable &#8222;food&#8220; erh\u00f6ht.<\/li>\n<li>Zu Tagesbeginn sterben alle Lebewesen aus, welche \u00fcber keine Futterreserven mehr verf\u00fcgen. Wenn sie gen\u00fcgend gefressen haben, vermehren sie sich.<\/li>\n<\/ol>\n<h2>Vorteile von Snap! bei Simulationen<\/h2>\n<p>Durch die objektorientierte Programmierung, die M\u00f6glichkeit Nachrichten zu verschicken und die vorhandenen Befehle (z.B. zu Kollisionen) f\u00e4llt das Schreiben einfacher Simulationen in Snap! leicht. Hat man einmal verstanden, wie eine solche einfache Simulation funktioniert, kann man diese durch zus\u00e4tzliche Objekte komplexer gestalten oder zu einem interaktiven Spiel ausbauen.<\/p>\n<p>Dabei kann es sich lohnen, die Simulation erst einmal mit Hilfe von realen Objekten durchzuspielen (z.B. mit Legosteinen), damit man eine bessere Vorstellung davon erh\u00e4lt, welche Ereignisse notwendig sind, damit die Programmierung funktioniert. Beim Ausprobieren der Simulation lohnt es sich auf jeden Fall, mit kleinen Anzahlen von Objekten zu beginnen. Dies vereinfacht es nicht nur, den \u00dcberblick zu behalten, sondern funktioniert auf leistungsschwachen Ger\u00e4ten auch reibungsloser.<\/p>\n<h2>Verwendung im Unterricht<\/h2>\n<p>Simulationen k\u00f6nnen im Unterricht breit eingesetzt werden. W\u00e4hrend das vorliegende Beispiel sich vor allem f\u00fcr die Biologie eignet, kann die Simulation von Teilchen wichtige Konzepte der Physik veranschaulichen. Baut man die Simulation zu einem interaktiven Spiel aus, wird zus\u00e4tzlich das Erz\u00e4hlen von Geschichten wichtig (Deutsch). Die Gestaltung der Futterquellen und der Lebewesen kann sehr einfach erfolgen, je nach Interesse der Sch\u00fclerinnen und Sch\u00fcler kann diese auch bis hin zu animierten Objekten ausgebaut werden (Bildnerisches Gestalten).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Snap! eignet sich auch daf\u00fcr, einfache Simulationen durchzuf\u00fchren. Das vorliegende Beispiel zeigt die Simulation einer Population, deren Verhalten von den vorhandenen Ressourcen abh\u00e4ngt. Die Programmierung dieser Welt wird in drei Schritten aufgebaut: Die Welt schafft die Umgebung f\u00fcr die Lebewesen. Das Futter dient als Ressource f\u00fcr die Lebewesen. Die Lebewesen sind auf der Suche nach &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gigers.com\/blog\/simulation-mit-snap\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eSimulationen mit Snap!\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-203","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/comments?post=203"}],"version-history":[{"count":2,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/203\/revisions"}],"predecessor-version":[{"id":209,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/203\/revisions\/209"}],"wp:attachment":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/media?parent=203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/categories?post=203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/tags?post=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}