{"id":2438,"date":"2009-06-21T09:39:29","date_gmt":"2009-06-21T07:39:29","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=2438"},"modified":"2023-05-24T10:17:51","modified_gmt":"2023-05-24T08:17:51","slug":"stein-schere-papier","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2009\/06\/stein-schere-papier.htm","title":{"rendered":"Stein, Schere, Papier (zum Mitmachen)"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2009\/06\/stein-schere-papier.htm#comments'>14 Kommentare.<\/a>)<\/small> <\/div>\n<p>Am Ende der 10. Klasse sollen die Sch\u00fcler in Informatik an einem umfangreicheren Projekt m\u00f6glichst selbstst\u00e4ndig arbeiten. Dazu ist eigentlich keine Zeit, die meisten Informatiklehrer kommen so gerade mal \u00fcber die Runden dieses Jahr &#8211; das erste Jahr mit Informatik in dieser Jahrgangsstufe. Aber f\u00fcr ein klitzekleines Projekt habe ich noch Zeit.<\/p>\n\n\n\n<p>Selbst Wikipedia wei\u00df wenig \u00fcber die Geschichte des Spiels <a href=\"http:\/\/de.wikipedia.org\/wiki\/Schere,_Stein,_Papier\">Stein, Schere, Papier<\/a>. Ich stelle mir gerne vor, dass schon die alten Germanen so etwas spielten. Jedes Jahr wird die Weltmeisterschaft darin ausgetragen. Man gewinnt durch psychologische Einsch\u00e4tzung des Gegners; am seltensten wird dabei (mit 29,6%) die Schere gew\u00e4hlt. Eine echte Zufallsstrategie w\u00fcrde das Spiel zu einem reinen Gl\u00fccksspiel werden lassen, aber der Mensch ist zur Erzeugung von Zufallsreihen nicht geeignet.<\/p>\n\n\n\n<p>Meine zehnte Klasse soll sich ein Modell f\u00fcr so ein Turnier einfallen lassen und das dann in Java umsetzen. Allerdings sollen nicht Menschen gegeneinander spielen, sondern vorbereitete Strategien der Sch\u00fcler (in Form von Java-Klassen). Die besseren Sch\u00fcler erarbeiten die Infrastruktur des Turniers; wer sich weniger zutraut, soll nur eine Strategie ins Rennen schicken und kann eine Tafel Schokolade gewinnen.<\/p>\n\n\n\n<p>Solch eine Strategie kann sein: &#8222;Ich spiele immer Stein.&#8220; Oder: &#8222;Ich spiele abwechselnd Stein-Schere-Papier, immer in dieser Reihenfolge.&#8220; Oder man macht die eigene Entscheidung von den vergangenen Entscheidungen des Gegners abh\u00e4ngig. Ich stelle mir das ganze so vor, und jetzt wird es leider technisch:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"414\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/stein-schere-papier.png\" alt=\"stein-schere-papier\" class=\"wp-image-2439\" title=\"stein-schere-papier\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/stein-schere-papier.png 449w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/stein-schere-papier-150x138.png 150w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/figure>\n\n\n\n<p><small>(Erkl\u00e4rung: # protected, -private, +public. Kursiv: abstract. Nach dem Doppelpunkt: Typ des R\u00fcckgabewerts bzw. des Attributs. Die Methode <em>duellbestimmen(Duell)<\/em> wird f\u00fcr die Verbindung mit anderen Klassen des Turniers gebraucht und ist hier nicht wichtig)<\/small><\/p>\n\n\n\n<p>Zur Erl\u00e4uterung des Diagramms: Es gibt eine Oberklasse <code>Strategie<\/code> mit den wichtigsten Methoden. Die Klasse ist abstrakt, es soll also gar keine Strategie-Objekte geben k\u00f6nnen. Vor allem ist die Methode <code>entscheidungMitteilen()<\/code> als abstrakt definiert. Das hei\u00dft, dass jede Unterklasse von <code>Strategie<\/code> dazu gezwungen wird, diese Methode selbst zu definieren.<\/p>\n\n\n\n<p>Im einfachsten Fall sieht die zu programmierende Unterklasse so aus wie dieses Beispiel zur Ich-w\u00e4hle-immer-Stein-Klasse:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Stein extends Strategie ( ) {\n  \/\/Attribute\n\n  \/\/Konstruktoren\n  public Stein (String n) {\n    super(n);\n  }\n\n  \/\/Methoden\n  public String entscheidungMitteilen ( ) {\n    return \"Stein\";\n  }\n}<\/code><\/pre>\n\n\n\n<p>Die einzigen Bedingungen f\u00fcr die Sch\u00fcler-Strategien: 1. Sie m\u00fcssen im Konstruktor ihrer Klasse das Attribut <code>name<\/code> mit einem Wert versehen, so dass jedes Objekt ein eindeutiges Namen-Attribut erhalten kann. Das macht die Siegerehrung leichter. 2. Es muss nat\u00fcrlich die Methode <code>entscheidungMitteilen()<\/code> definiert werden, mit dem vorgegebenen R\u00fcckgabewert String. Erlaubt sind nur &#8222;Stein&#8220;, &#8222;Schere&#8220; und &#8222;Papier&#8220;, aber eventuelle Fehler k\u00f6nnen die durchf\u00fchrenden Turnierklassen abfangen.<\/p>\n\n\n\n<p>Zu kl\u00e4ren ist noch die Spielweise. Ich will das Spiel m\u00f6glichst einfach halten und schlage deshalb vor:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jede Strategie spielt einmal gegen jede andere.<\/li>\n\n\n\n<li>Ein Duell zwischen zwei Strategien dauert 100 Runden, also Entscheidungen. (Statt der \u00fcblichen, umst\u00e4ndlicheren <em>two out of three<\/em>.)<\/li>\n\n\n\n<li>Der Gewinner einer Runde erh\u00e4lt 2 Punkte, der Verlierer 0, bei gleicher Entscheidung gibt es jeweils 1 Punkt.<\/li>\n\n\n\n<li>Reine Zufallsstrategien sind &#8211; aus Gr\u00fcnden &#8211; nicht erlaubt. (Vermutlich m\u00f6chte ich auch Strategien ausschlie\u00dfen, die Zufall nur als ein Element im Algorithmus benutzen.) Lediglich ich als Lehrer schicke eine solche ins Rennen. Die Sch\u00fcler sind sich noch uneins, ob das ein Vorteil f\u00fcr mich ist oder keiner. Das ist tats\u00e4chlich eine interessante Frage. Es ist keiner, hoffe ich.<\/li>\n\n\n\n<li>Wer am Schluss am meisten Punkte hat, gewinnt.<\/li>\n<\/ul>\n\n\n\n<p>Ich will deshalb 100 Runden, damit kluge Strategie Zeit haben, die Entscheidungen weniger kluger Strategien zu analysieren und sich darauf einzustellen.<\/p>\n\n\n\n<p>Die Methoden der \u00fcbergeordneten Klasse <code>Strategie<\/code> werden nat\u00fcrlich an die Kind-Strategien weitervererbt. Die wichtigsten lauten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>rundeErfragen()<\/code> &#8211; in der wievielten Runde sind die Spieler gerade (Runde 0 bis 99, der Einfachkeit halber)<\/li>\n\n\n\n<li><code>rundenzahlErfragen()<\/code> &#8211; wieviele Runden gibt es insgesamt (100, eigentlich \u00fcberfl\u00fcssig, aber so bleiben wir flexibel)<\/li>\n\n\n\n<li><code>punkteErfragen()<\/code> &#8211; wieviel Punkte hat man selber im Moment<\/li>\n<\/ul>\n\n\n\n<p>Und vor allem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>entscheidungErfragen(int r)<\/code> &#8211; wie hat man sich in Runde r entschieden (falls man mitz\u00e4hlen m\u00f6chte)<\/li>\n\n\n\n<li><code>entscheidungGegnerErfragen(int r)<\/code> &#8211; wie hat sich der Gegner in Runde r entschieden (falls man mitz\u00e4hlen m\u00f6chte) &#8211; in beiden F\u00e4llen muss r nat\u00fcrlich kleiner sein als <code>rundeErfragen()<\/code><\/li>\n<\/ul>\n\n\n\n<p>Mit der letzten Methode kann man zum Beispiel ab Runde &#8222;1&#8220; die Tit-for-tat-Strategie spielen, also immer die gleiche Entscheidung treffen wie der Gegner in der jeweils vorhergehenden Runde. F\u00fcr Runde &#8222;0&#8220; muss man sich noch etwas einfallen lassen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public String entscheidungMitteilen() {\n   return entscheidungGegnerErfragen(rundeErfragen()-1));\n}<\/code><\/pre>\n\n\n\n<p>Ich schreibe das hier nur relativ skizzenhaft, weil es eh ein wenig technisch ist, und weil die Sch\u00fcler sich das ja selber einfallen lassen sollen, statt hier abzuschreiben. Es kann also sein, dass die Methoden anders hei\u00dfen werden, aber das l\u00e4sst sich leicht anpassen. Zumindest irgendwelche Methoden dieser Art wird es geben.<\/p>\n\n\n\n<p><strong>Ich stelle das hier andererseits so ausf\u00fchrlich da f\u00fcr den Fall, dass hier jemand mitliest, der auch ein bisschen Java kann und Lust hat, selbst eine Strategie ins Rennen zu schicken. Der Gewinner kriegt eine Tafel Schokolade!<\/strong><\/p>\n\n\n\n<p>&#8212; Lose Gedanken zum Schluss:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ja, ich habe mich bei diesem Projekt vom <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2007\/12\/gefangenendilemma.htm\">Gefangenendilemma<\/a> inspirieren lassen.<\/li>\n\n\n\n<li>Gerade bei konkurrierenden Strategien und gez\u00e4hlten Punkten ist das Prinzip der Datenkapselung wichtig. Sonst w\u00fcrde ja eine Strategie der anderen in die Entscheidungen pfuschen.<\/li>\n\n\n\n<li>Fortgeschrittene Sch\u00fcler k\u00f6nnen ein Syndikat gr\u00fcnden und solche Strategien entwickeln, die &#8211; etwa anhand der ersten 10 Entscheidungen &#8211; sich gegenseitig erkennen und jeweils einer davon danach alle Punkte zuschustern. Gibt sicher noch mehr raffinierte Einf\u00e4lle.<\/li>\n\n\n\n<li>Eine perfekte Strategie kann es demnach nicht geben, da der Erfolg jeder Strategie von der Zusammensetzung der Teilnehmer abh\u00e4ngt.<\/li>\n\n\n\n<li>Den BlueJ-Ordner oder eine Jar-Datei maile ich auf Wunsch zu, falls jemand zu Hause damit herumspielen und eigene Strategien erproben will.<\/li>\n<\/ol>\n\n\n\n<p><em>Nachtrag: <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2011\/08\/fruechte-meiner-letzten-programmierarbeit.htm\">Hier gibt es mein Stein-Schere-Papier interaktiv.<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(14 Kommentare.) Am Ende der 10. Klasse sollen die Sch\u00fcler in Informatik an einem umfangreicheren Projekt m\u00f6glichst selbstst\u00e4ndig arbeiten. Dazu ist eigentlich keine Zeit, die meisten Informatiklehrer kommen so gerade mal \u00fcber die Runden dieses Jahr &#8211; das erste Jahr mit Informatik in dieser Jahrgangsstufe. Aber f\u00fcr ein klitzekleines Projekt habe ich noch Zeit. Selbst [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2439,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25,9],"tags":[227,225],"class_list":["post-2438","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","category-spiele","tag-informatik","tag-spiele"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/stein-schere-papier.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2438"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2438\/revisions"}],"predecessor-version":[{"id":57550,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2438\/revisions\/57550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/2439"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}