Author Archives: Herr Rau

About Herr Rau

Lehrer, Leser, Blogger. Rüstiger Endvierziger.

Alltagsbekenntnisse

By | 26.4.2017

Heute habe ich mit meiner 9. Klasse ausgemacht, dass sie in der nächsten Stunde in 7 Tagen das Thema für den Übungsaufsatz kriegen, damit sie den in 14 Tagen abgeben können (in einer Woche, in der sie nicht da sind, sondern in einem Betriebspraktikum), damit sie den in 19 Tagen zurückkriegen können (dann sehe ich sie das übernächste Mal), damit sie in 26 Tagen die Schulaufgabe (=angekündigte, größere schriftliche Prüfung; hier: Aufsatz) dazu schreiben können.

So ähnlich läuft das in allen Klassen. In einem Kernfach wie Deutsch muss ich einfach sehr vorausschauend arbeiten, in Nicht-Kernfächern muss ich eine Stegreifaufgabe (=unangekündigte Prüfung über die letzten zwei Stunden) dann schreiben, wenn sich eine Lücke bietet – ob das gerade didaktisch sinnvoll ist oder nicht, spielt dabei eine sehr untergeordnete Rolle.

Theorie und Praxis organisierter Lehr- und Lernvorgänge (außerunterrichtlich)

By | 23.4.2017

In den Osterferien habe ich mal beim Probestudium Informatik an der LMU vorbeigeschaut und auch einen Schüler von mir getroffen. Die sechs Jahre zuvor war ich jeweils daran beteiligt gewesen, mit Workshop und so, aber es ist schön, die Osterferien auch mal mit freien Tagen beginnen zu können.

Am letzten Freitag war ich an einer befreundeten Uni als Referent eingeladen, eher so als Trainer, oder Coach, oder was auch immer. Und Mensch, habe ich mich verrückt gemacht davor. Es ging darum, dass künftige Informatiktutoren – also Studierende, die die Übungen zu den Vorlesungen begleiten, die Übungsaufgaben korrigieren, Teilnehmerfragen beantworten – einen ganzen Tag lang einen Workshop dazu kriegen sollten, der sie aufs Tutorensein vorbereit. Oder so. Und weil ich so etwas noch nie gemacht habe, habe ich zugesagt.

Wenn ich weiß, was ich Leuten beibringen soll, dann kann ich das. Aber in den ersten Jahren in der Schule, an der Uni, und auch jetzt wieder – da habe ich immer große Zweifel, was ich überhaupt beibringen soll, udn wieviel sich überhaupt in Veranstaltungen lernen lässt. Und gerade lehren… woher soll ich denn wissen, wie das geht? Ich weiß, wie ich das mag, und ich das mache, aber das ist doch nicht allgemein gültig.

Obendrein wurde ich für die Veranstaltung gut bezahlt, wollte also wirklich auch etwas bringen. Nun, es lief dann doch ganz glimpflich ab.

Allerdings war ich unrasiert. Denn am Sonntag danach war ich Haar- und Bartmodell bei einer Friseurschulung. Man hatte mich darauf angesprochen, und weil ich so etwas noch nie gemacht habe, habe ich zugesagt. So ist das halt immer. – Aufgeregt war ich da aber nicht. Aber doch, wenn man dann mit dem Rasiermesser rasiert wird, zweimal, dann denkt ein Germanist schon automatisch immer an den Barbierjungen von Segringen. (Und Western, also ich zumindest.)

Zum Friseur gehe ich gerne, auch wenn es für den mit den Jahren immer weniger zu tun gibt. Ray Bradbury fasst das in Death is a Lonely Business schön zusammen, indem er den Anfang von Moby Dick abwandelt:

Every time it is a damp drear November in my soul I know it is high time to go from the sea again, and let someone cut my hair.

Vorher-/Nachher-Bild:

Herr Rau vor Rasur und HaarschnittHerr Rau vor Rasur und Haarschnitt

(Und ja, der letzte Haarschnitt ist nicht so lange her, deswegen sieht man obenrum nicht so viel.)

Und ein bisschen etwas Friseurliches habe ich auch gelernt, weil ich ja zugehört habe, wie der Ausbilder den Kursteilnehmern das erklärt hat.

Karl May wiederlesen: Orientzyklus, Band 1-3

By | 17.4.2017

Karl May: Den habe ich in der Grundschule gelesen, ziemlich früh, und vielleicht bis in die fünfte Klasse hinein. Wenn ich in Fahrt war, schaffte ich ein Buch am Tag. Dabei haben mich die Amerika-Geschichten nie so interessiert; ich habe keinen einzigen Winnetou-Band gelesen, die Orient-Erzählungen dafür um so mehr. Vor zweieinhalb Jahren habe ich zufällig angefangen, wieder hineinzulesen, und mich jetzt an den Orientzyklus gemacht.

Durch die Wüste

Titelbild "Durch Wüste und Harem"

Es beginnt damit, dass Kara Ben Nemsi und Halef eine Leiche in der Wüste finden, ein ermordeter französischer Kaufmann, wie sich herausstellt. Der Mörder wird verfolgt, aber letztlich bleibt die Tat vorerst ungesühnt und unaufgeklärt. Daraufhin gibt es weitere vorerst unverbundene Episoden: Die Rettung einer Entführten, der Kampf gegen Piraten. Schließlich helfen die beiden einem Beduinenstamm gegen ihre Feinde; Kara ben Nemsi erhält dabei das Pferd Rih als Geschenk. Am Ende zieht er mit Halef und dem Scheich eines befreundeten Stamms in Richtung Türkei, sie wollen den Sohn des Scheichs aus türkischer Gefangenschaft befreien. Dort helfen sie einer großen Gruppe von Jessiden gegen ihre türkischen Feinde. Begleitet werden sie von Sir David Lindsay, einem reichen Engländer, der auf der Suche nach archäologischen Mitbringseln ist, allen voran „fowling-bulls“, geflügelten Stieren.

– Das Episodenhafte hatte ich nicht so in Erinnerung; der Fall des toten Kaufmanns wird erst viel später wieder aufgegriffen werden. Ich konnte mich noch gut erinnern an den gefährlichen Ritt über den Salzsee Schott el Dscherid, an Rih, sonst hatte ich das meiste vergessen. Sehr gut weiß ich noch, wie ich in diesem Buch auf das Wort „Vatermörder“ stieß und mir erklären lassen musste. Auch sonst habe ich sicher viel aus dem Buch gelernt: Sunniten, Schiiten, der Koran, Suren, Jessiden, Mekka, die Hadsch, Couscous, Shisha, Piaster, Mariatheresientaler, Pilaw.

Zeitlich scheint das nach den Geschichen aus Am Stillen Ozean zu spielen, da Lindsay direkt davon spricht und sich mit Bezug auf einen spleenigen Engländer daraus vorstellt:

Bin Freund von Sir John Raffley, Mitglied vom Traveller-Klub, London, Near-Street 47.

Das wird vielleicht auch mein erster Kontakt zu spleenigen Engländern und ihren Clubs gewesen sein.

Kara Ben Nemsi ist nicht so nervig wie in Im Lande des Mahdi. Er töte nicht gern, und ist schon recht superheldisch, kann Spurenlesen und Faustkämpfen wie Sherlock Holmes und überhaupt alles. Es gibt nur ein- oder zweimal Gefangennahme und Ausbruch, das ist okay. (Der Mahdi bestand quasi nur daraus.)

Durchs wilde Kurdistan

Titelbild "Durchs wilde Kurdistan"Schwächer als der Vorgängerband. Die Jessiden haben die Türken umzingelt, Kara ben Nemsi hilft bei politischen Verhandlungen und verhindert ein Blutvergießen. Die kleine Gruppe befreit den Sohn des Scheichs und macht sich auf den Rückweg; abseits der türkischen Herrschaft werden sie in die Auseinandersetzungen zwischen Kurden und nestorianischen Christen hineingezogen. Auch hier vermittelt unser Held und verhindert sinnloses Blutvergießen. Kara ben Nemsi hat am Anfang nicht viel zu tun, aber der Scheich, der ihn begleitet, und Sir David, der später zu ihm stößt, noch viel weniger, die sind reine Staffage.

– Insgesamt schon etwas mehr Gefangennahme und Ausbruch, aber weiterhin erträglich. Das ständig thematisierte Christentum des Helden war mir als Kind nicht aufgefallen; beim wiederlesen erschien es mir plump, aber nicht wirklich störend. Bei einem modernen Autor würde mich das Belehrende viel mehr stören, warum ist das im Orientzyklus nicht so?
Voll an mir vorbeigegangen ist der zum Teil abgedruckte Prester-John-Brief; ich habe keinerlei Erinnerung daran. Bewusst bin ich diesem Stoff wenige Jahre nach der Karl-May-Lektüre begegnet, in einem Heft der Fantastic Four, richtig informiert habe ich mich erst bei der Marco-Polo-Lektüre neulich: Im 12. Jahrhundert tauchte ein Brief eines sagenhaften Priesterkönigs Johannes auf, der angeblich in Asien über ein großes christliches Reich herrschte und seinen Brüdern im Westen diesen Brief schrieb. Auch der bei Marco Polo wiederholte Trick mit dem Asbesthemd wird zitiert.

– Karl May schreibt gar nicht schlecht. Nur seine Plots sind sehr schwach. Gefangennehmen, Entkommen, Befreien; Verhandeln zwischen verfeindeten Parteien, das wiederholt sich ständig. Der Held kommt in eine neue Stadt, er schafft sich einen neuen Freund unter der Bevölkerung, weil da jemand krank oder vergiftet ist und er mit seinem überlegenen deutschen Wissen helfen kann, worauf er jemand hat, der ihn später aus der nächsten Gefahr retten wird.

„Ein Bewohner von Amadijah, dessen Tochter krank ist.“

führt regelmäßig zu zu:

„‚Du hast nicht ihr allein, sondern auch mir das Leben erhalten, und du weißt nicht, wie gut dies ist für viele, die du weder kennst noch jemals gesehen hast.'“

Das ist ein- oder zweimal okay, aber mit der Zeit wird es auffällig.
Karl May ist bewusst, dass er in einer literatischen Tradition schreibt:

Wie oft hatte ich gelesen, daß ein Gefangener durch die Berauschung seiner Wächter befreit worden sei, und mich über diesen verbrauchten Schriftstellercoup geärgert! Und jetzt befand ich mich in voller Wirklichkeit infolge eines Rausches in dem Besitze aller Gefangenen.

Und doch: Die Bücher sind page turner, lesen sich fast von selbst. Ja, andere Völker werden von oben herab betrachtet, als unreife Kinder, aber immer wieder auch mit Toleranz, Verständnis und Aufruf zum Frieden. Wo liest man denn in der deutschen Hochliteratur etwas über den Orient? Da fällt mir eigentlich nur der Chinese in Effi Briest ein, den wir Deutschlehrer den Schülerinnen und Schülern gerne verkaufen als Element des Exotischen, Mystischen, Kolportagehaften. Seine Rolle im Buch ist minimal. Bei Karl May habe ich jedenfalls mehr gelernt als bei Fontane.

Diagramm zur Handlung:

Diagramm mit Handlung von Durch die Wüste

  • Gelb ist das erste Abenteuer: Der Fund der Leiche, die Verfolgung des Mörders, die Überquerung des Salzsees. Aufgelöst wird es erst später.
  • Orange ist das nächste Abenteuer: Die Befreiung einer Entführten. Auch diese Geschichte findet später eine Fortsetzung, und eine Verbindung zur ersten.
  • Weiß ist der Rest: Die Abenteuer bei den Beduinen.
  • Blau ist alles, was für mich aus Durchs wilde Kurdistan geblieben ist.

Von Bagdad nach Stambul

Titelbild "Von Bagdad nach Stambul"

Kara Ben Nemsi, Halef und Lindsay reiten mit Mohammed Emin und dessen im letzten Band befreiten Sohn Amad el Ghandur über Umwege nach Hause. Es gibt Streit mit einem Kurdenstamm und untereinander, Scheich Mohammed stirbt bei einem Überfall der Kurden auf persische Reisende, Amad sucht Blutrache und verlässt die Gruppe. Die Reisende sind Hassan Ardschir-Mirza, seine Braut und seine Schwester, von Feinden verfolgt und inkognito unterwegs. Kara Ben Nemsi verkauft in des Mirza Auftrag dessen Güter in Bagdad, kann aber nicht verhinden, dass der Mirza und seine Schwester von den Verfolgern umgebracht werden. Sie begegnen einer Todeskarawane, stecken sich mit die Pest
Wieder gesundet wollen sie nach Istanbul, treffen aber vorher den reisenden Kaufmann Jacub Afarah aus Damaskus, der ihnen einen Brief an seinen Bruder dort mitgeben will und sich als Onkel von Isla Ben Maflei aus dem ersten Band herausstellt. In Damaskus lebt unter der Identität eines ermordeten Verwandten niemand anders als Abrahim-Mamur, ein Schurke aus dem ersten Band, mit dem Ziel, Afarah zu bestehlen. Er flüchtet mit geraubtem Gut, wird zwar in den Ruinen von Baalbek gestellt, kann aber entkommen – nach Istanbul. Die Helden ihm nach, zu Isla Ben Maflei und dessen Vater, die Geschäftsbeziehungen zu Henri Galingré unterhalten, dem Vater des Ermordeten Paul aus dem ersten Band, und der ebenfalls betrogen werden soll. Die Bande ist auch bei Galingré involviert. In Istanbul treffen sie auch Omar, der seit dem ersten Band auf der Suche nach dem Mörder seines Vaters ist. Omar tötet Abrahim-Mamur, der sich als Anführer eine Räuberbande herausstellt, zu der auch der gesuchte Mörder, dessen Bruder und Neffe gehören. Dieser Bruder, Barud el Amasat, befindet sich unter falschem Namen in Adrianopel, und wird von Kara Ben Nemsi, Halef, Omar, Isla Ben Maflei, und dem zur Gruppe gestoßenen Vater Senitzas, Osco, entlarvt. (Sir David Lindsay hat die Reisegruppe kurz vorher entlassen.) Allerdings wird ihm zur Flucht verholfen; sein Sohn Ali Manach wird von Spießgesellen erschossen, damit er nichts ausplaudern kann.

– Als Kind mochte ich diesen Band am wenigsten von den sechs Teilen des Orientzyklus, zumindest konnte ich am wenigsten damit anfangen. Jetzt fand ich ihn am interessantesten – vom ersten Viertel abgesehen, das eine Fortsetzung des letzten Bandes und recht fade ist. Gut ist jetzt, dass die Handlung Fahrt aufnimmt: Es gibt Verschwörungen und eine Räuberbande, die losen Fäden werden verknüpft. Gut sind die Schauplätze – große Städte, die stimmig beschriebene Ruinenstadt Baalbek. Gut ist das Schicksal des verfolgten Mirza; die Pest, an der Kara Ben Nemsi und Halef erkranken, und vor allem die Todeskarawane.

Diese Todeskarawane. Also: Kara Ben Nemsi wird erzählt, dass diejenigen Schiiten, die in der Stadt Kerbela begraben werden, gleich ins Paradies kommen, ohne Umweg über ein Fegefeuer. Deshalb lassen sich viele Schiiten dort begraben. Deshalb gibt es ganze Karawanen mit Leichnamen, die dorthin transportiert werden, über weite Strecken, in großer Hitze – Todeskarawanen, voller Verwesungsgeruch. Sehr eindrucksvoll geschildert. Neil Gaiman hätte seine Freude daran. (Hier eine Diskussion in einem Karl-May-Forum, inwiefern es solche Karawanen tatsächlich gegeben hat: Eher ja.)

– Kara Ben Nemsi ist so heldenhaft wie stets. Hier zeigt er Züge von Sherlock Holmes, zwar mit mehr Bescheidenheit, aber mit dessen Betonung der lernbaren Beobachterei:

„Aber Emir,“ fragte Hassan, „wie kannst du an den Messern sehen, wer der Täter war?“
„Sehr leicht! Eine flache Klinge wird einen ganz anderen Schnitt machen, als eine dreikantige, die sich mehr zum Stoße eignet. Die Schnittflächen wurden weit auseinander gedrängt, darum war der Schnitt nicht mit einem dünnen Instrumente geschehen. Und nun blicke her: diese Schnittflächen sind da, wo sie beginnen, nicht glatt, sondern zerrissen und gestülpt; die Klinge, mit der die Tat geschah, hatte also eine sehr bemerkbare Scharte gehabt. Und nun sieh dir diesen Dolch an: er ist der einzige von allen, der eine solche Scharte hat.“
„Herr, deine Weisheit ist zu bewundern!“
„Dieses Lob verdiene ich nicht. Die Erfahrung hat mich gelehrt, in allen Lagen auch das Kleinste zu beobachten; es ist also nicht Weisheit, sondern einfache Gewohnheit von mir.“

In Damaskus stimmt er nicht nur das Klavier des Kaufmanns:

Ich hatte früher als armer Schüler oft Pianos gestimmt, um ein kleines Taschengeld zu erwerben; es fiel mir also nicht sehr schwer, das Klavier in einen spielbaren Zustand zu versetzen.

– sondern überwältigt auch noch die eingeladenen Gäste und Leute auf der Straße mit seinem Klavierspiel.

Die Informationsvermittlung ist manchmal so plump, wie man es sonst nur als übertriebenes Beispiel kennt:

„Aber du hast doch erfahren, wohin er geht. Jedenfalls [d.h. bestimmt] reitet er nach Iskenderiëh, wo Hamd el Amasat, sein Bruder, der dein Oheim ist, auf ihn wartet.“

Dass dieser Bruder der Oheim des Angesprochenen ist, wird der ja wohl wissen.

Diagramm zur Handlung:

Diagramm mit Handlung von Von Bagdad nach Stambul

  • Blau ist das Abenteuer mit dem Kurden, bis zum Tod Scheich Mohhameds. Fade.
  • Grün ist das Abenteuer mit dem anonym reisenden Perser. Das ist gut, allein schon mal wegen der Todeskarawane und der Pest.
  • Gelb und Orange der Rest: Jacub Afarah bringt sie auf die Spur von Abrahim-Mamur und Barud el Amasat und der Räuberbande, nach Damaskus, Istanbul, Edirne.

1. EduMuc Stammtisch (April 2017)

By | 13.4.2017

Vor ein paar Tagen war ich auf einem Meetup in München, das Christoph Aufmhoff organisiert hat: der 1. EduMuc Stammtisch. Veranstaltungsort und Gastgeber war Google mit seinem Community Event Space am Arnulfpark – Googlebier, Häppchen, sehr feine Location. Ziel des Meetups: Kontakt zwischen allen herstellen, die sich für Digitales in der Schule interessieren. Eltern, Lehrer, Schüler, Dienstleister. Tatsächlich waren dann nur eine gute Handvoll Lehrer da, was sicher auch an dem Termin in den Osterferien lag; der Großteil waren andere Bildungsinteressierte – Anbieter von Hardware, Anbieter von Software, Anbieter von Inhalten.

Zuerst stellte Kai Wörner von der Realschule am Europakanal in einem Vortrag die Schule und seinen Umgang mit den iPad-Klassen dort vor. Kurzfassung: Diese Schüler und Schülerinnen bringen eigene iPads mit, die Schule empfiehlt einige Apps, die sie kaufen sollen; und damit wird viel und sinnvoll gearbeitet. Dazu etwas Deutschbuch-Bashing (wobei gute Deutschlehrer eh notorisch wenig mit einem Buch arbeiten), Kritik an Hausaufgaben, „4.0“ und die übliche falsche Verwendung von „Dekonstruieren“. Dafür eine schöne und überzeugende Erklärung, warum Tablet-Klassen auch nicht besser bei Prüfungen abschneiden als andere Klassen: Prüfungen bleiben herkömmlich und prüfen gar nicht die Fähigkeiten ab, die Tabletklassen erworben haben – kein Recherchieren, Zusammenbauen, Sammeln, Kooperieren.

Dann stellte Simon Köhl das Projekt serlo.org vor – im weitesten Sinn eine Lernplattform, gemeinnützig, kostenlos, werbefrei, offen; mit schulischen Inhalten aufbereitet für ein Selbststudium. Videos, Aufgaben, Lösungen, Erklärungen. Schon recht groß, aber bislang vor allem Mathematik als Inhalt. Was ich von Mathematik gesehen habe, sieht sehr gut aus. – Allerdings gibt es gerade viele neue OER-Plattformen, über die ich nicht den geringsten Überblick habe..

Simon war kurzfristig eingesprungen für Christine Debold, deren Vortrag als Lehrerin und städtische Medienpädagogin leider ausfallen musste und auf nächstes Mal verschoben wurde. Für diesen Termin ist auch André Spang als Vortragender angekündigt; ich werde wohl nicht da sein, da gleichzeitig ein anderes Meetup stattfindet – Ukulele geht vor, von wegen lebenslanges Lernen und so.

(Apropos, was heißt lebenslanges Lernen denn genau? Nach dem lernpsychologischen Lernbegriff kann man nicht nicht lernen, und wird so oder so lebenslang lernen. Es kann also nur darum gehen, was und wie man zu lernen hat – also entweder darum, sich neue Aspekte der Welt zu erschließen, um sie auch gestalten zu können, oder vielleicht auch nur: verfügbar zu bleiben für die Arbeitswelt.)

Digitale Bildung ist ein Thema, das gerade viel umtreibt. Immer lesenswert sind Maik Riecken, Lehrer und Medienbildungsexperte am Niedersächsischen Institut für schulische Qualitätsentwicklung, der kürzliche über seine Erfahrungen mit Digitalem schrieb, Andreas Kalt, der differenziert über Turbo-Digitalisierung schreibt, und Dejan Mihajlovic, der „zeitgemäße Bildung“ statt „digitale Bildung“ als Begriff vorschlägt.

Kein Thema beim Meetup waren: das Fach Informatik, Systembetreuung, Lehrerausbildung. Das sind die Themen, die mich besonders interessieren. Trotzdem, ein produktives und lohnendes Meetup.

– Etwas unorganisch hier ein paar Thesen zur digitalen Bildung:

(1) Ein Pflichtfach Informatik ist nötig. Ich glaube nicht, dass das besonders viel mit digitaler Bildung zu tun hat, sicher nur wenig mit digitalem Lernen, aber viel mit zeitgemäßer Bildung. Wer nichts von Informatik versteht, versteht die Welt schlechter.

(2) Lehrer, die privat nur minimal mit einem Computer arbeiten, werden auch in der Schule nie groß mit digitalen Mitteln arbeiten. „Minimal“ heißt: Erstellen von Arbeitsblättern und Prüfungen mit MS Word, und einmal pro Woche E-Mail, dazu WhatsApp mit Freunden oder Kindern. Wie man daran etwas ändert, weiß ich nicht. Mit dem Alter hat das jedenfalls wenig zu tun.

(3) Veränderungen müssen von oben kommen. Und: Schulen brauchen eigene Systembetreuer, und zwar keine Lehrer.

(4) Schulbücher müssen digital werden. Mit oder ohne Schulbuchverlage, das wird sich zeigen.

(5) Natürlich gibt es ganz tolles Material zum Selberlernen im Web. Das Problem ist nur, dass Schülerinnen und Schüler häufig nicht das lernen wollen, was sie gerade lernen sollen. (Das Fernziel, dann ganz auf nicht-individuelle Lehrpläne zu verzichten, interessiert mich im Moment gar nicht.) Den meisten Schülern und Schülerinnen reicht das, was sie in der Schule kriegen. Und wer das in der Schule nicht versteht, der wird auch mit Material im Web nicht besser zurecht kommen. Deswegen halte ich Bildungsmaterial, das sich unmittelbar an Schülerinnen und Schüler wendet, für nicht sehr ergiebig. Aus Büchern konnte man immer schon etwas lernen, wenn man wollte; ich glaube nicht, dass das mit Videos so viel besser gehen wird.

(6) Schüler und Schülerinnen müssten mehr Verantwortung für ihr Lernen übernehmen. Im Moment sind die Lehrer dafür verantwortlich und werden dafür verantwortlich gemacht. Hausaufgaben gibt es immer weniger, also auch weniger eigene Arbeit; Facharbeiten werden immer kleinschrittiger betreut, selbstständige benotete Aufsätze zu Hause wurden abgeschafft; Anwesenheiten immer penibler überwacht – wobei häufiges Blaumachen dann doch wenig Konsequenzen hat.

Nicht-rundenbasierte Spiele

By | 9.4.2017

Mein amerikanischer Cousin Robert brachte meinem Zwillingsbruder und mir vor knapp vierzig Jahren ein Kartenspiel bei, das Spit hieß. Wikipedia erzählt einem mehr über dieses und verwandte Spiele, aber bei uns gab es zwei Varianten. Gespielt wurde von zwei bis vier Spielern; jeder Spieler hat dabei eine Reihe verschiedener Kartenstapel vor sich, mit einer offenen Karte oben und verdeckten Karten darunter, ähnlich einem Patience-Spiel. An die verdeckten Karten kommt man nur, indem man die offene Karte ausspielt; danach darf man die nächste Karte aufdecken.

Die Ausspielregel ist simpel: Mann kann auf eine auf den Ablagestapeln liegende Karte ausspielen, wenn die eigene Karte im Wert 1 höher oder 1 niedriger ist als die liegende Karte. Auf eine 5 kann man also eine 6 oder 7 legen, auf ein Ass einen König oder eine 2.
Der Clou: Die Spieler spielen gleichzeitig, sie warten also nicht, bis sie am Zug sind, sondern spielen, wann sie wollen und so schnell sie können – wenn sie können.

Dieses Spiel mochte ich immer sehr gerne, sicher auch, weil ich gut dabei war, aber auch, weil mir das Prinzip gefiel: Ein Kartenspiel, bei dem man nicht warten musste, bis man dran war.

Kartenspiel "Falling"

Das nächste Spiel dieser Art, das ich kennenlernte, heißt FALLING (hier eine Version zum Ausdrucken und Ausschneiden). Die Spieler sind alle aus dem Flugzeug gefallen, wer als letzter unten aufkommt, gewinnt. Ein Geber gibt reihum in größerer Geschwindigkeit an alle Spieler offene Karten aus, auf die die Spieler angemessen mit ihren Handkarten reagieren müssen.

Kartenspiel "Brawl"

Vom selben Autor, James Ernest, gibt es das Kartenspiel BRAWL (Link). Damit simuliert man eine Prügelei zwischen zwei Figuren. Jeder Spieler hat ein Set von 35 Karten, es gibt – je nach Figur unterschiedlich zusammengestellt – Hit- und Block- und andere Karten, und auch hier legen die die Spieler gleichzeitg ihre Karten auf verschiedene Weise ab, um den Kampf zu gewinnen:

(Das wollte leider nie einer mit mit spielen. FALLING auch nicht.)

Captain Sonar ist kein Karten-, sondern ein Brettspiel. Es funktioniert so ähnlich wie Schiffeversenken, nur dass nicht ein Spieler gegen einen anderen Spieler spielt, sondern einer Viererteam gegen ein anderes Viererteam. Beide Teams sitzen einander gegenüber, einen kleinen Sichtschirm dazwischen, damit man nicht sieht, wo die Schiffe sind – wie das halt so ist beim Schiffeversenken. Zu jedem Team gehören: Captain, Funker, Bootsmann, Bordingenieuer. Und auch hier spielen beide Teams gleichzeitig, ohne sich an eine Zugreihenfolge zu halten. Damit allerdings ein Zug ausgeführt werden kann, müssen die zuständigen Crewmitglieder erst von den anderen bestimmte Informationen erfragen.

– Anders als bei Brett- und Kartenspielen kommt es bei Computerspielen häufig vor, dass sie nicht rundenbasiert sind. Eines ist mir neulich untergekommen, bei dem das besonders der Fall ist, ein Partyspiel für 2-8 Spieler, die jeweils die gleiche App auf ihren Smartphones installiert haben: Spaceteam.

Jeder Spieler ist dabei Teil einer Raumschiffmannschaft, und jeder Spieler sieht vor sich ein – zufällig ausgewähltes – Sortiment von beschrifteten Schaltern, Knöpfen, Schiebereglern. Dann fliegt das Schiff los, und um sicher zu navigieren, müssen diese Schalter und Knöpfe betätigt werden, und zwar rasch. Dazu kriegt ein Spieler als Text eingeblendet, was getan werden muss, zum Beispiel „Flux-Kompensator auf 7 stellen“. Der Flux-Kompensator gehört aber zu den Geräten, die von einem der anderen Spieler bedient werden, also muss man so lange hektisch brüllen: „Den Flux-Kompensator auf 7, um Gotteswillen, sofort den Flux-Kompensator auf 7!“, bis der andere das gemacht hat. Währenddessen kriegt jeder Spieler ähnliche Anweisungen und schreit sie hinaus, und man muss selber darauf achten, was gesagt wird, wenn man selber mit dem Bedienen dran ist.

(Es gibt auch noch ein Spinoff namens Spaceteam ESL – ESL steht für „English as a Second Language“, es ist also ein Lernspiel. Da steuert man immer noch ein Raumschiff, aber die Geräte heißen jetzt nicht Flux-Kompensator, sondern bestehen aus zu lernenden englischen Vokabeln.)

– Der Urvater von Spaceteam muss doch einfach ein Klassiker aus meiner Commodore-64-Vergangenheit sein, und zwar das großartige PSI-5 Trading Company.

Screenshot PSI-5 Trading Company Commodore 64

Auch bei diesem Spiel geht es um hektisches Krisenmanagement während eines Raumflugs. Auch hier gibt es verschiedene Crewmitglieder – Maschinenraum, Navigation, Waffen, Radar. Allerdings gibt es nur einen Spieler, den Captain, alle anderen Crewmitglieder erhalten von diesem Anweisungen oder arbeiten mehr oder weniger selbstständig, wobei es für jede Position unterschiedliche KIs zur Auswahl gibt. Man muss mit seiner Ladung pünktlich am Ziel sein, ohne dass diese von Tribbles gefressen oder Raumpiraten gestohlen wird, man muss Angriffe abwehren und Ausweichmanöver fliegen und die Radarabteilung ans Scannen erinnern und dem Schützen sagen, welches Ziel er auswählen soll, und dem Maschinenraum, welches defekte Gerät zuerst repariert werden soll und das alles gleichzeitig und andauernd. Sehr lustig.

Ergänzung: Meine Schüler haben mich hingewiesen auf „Keep talking and nobody explodes“, das so ähnlich funktioniert wie Spaceteam: Ein Spieler sieht eine Bombe mit bis zu 11 Modulen daran – Knöpfe, Schalter, Drähte und so weiter. Die anderen Spieler haben ein Handbuch zur Bombenentschärfung und müssen sich vom ersten Spieler die Bombe und deren Module beschreiben lassen, damit sie diesem wiederum anhand des Handbuchs sagen können, welche Einstellungen er vornehmen oder welche Drähte er durchschneiden muss, um die Bombe zu entschärfen. Webseite zum Spiel, und hier ein sehr schönes Let’s-Play-Video:

Das müsste man doch alles für den Englischunterricht nutzen!

Kinect mit Scratch

By | 7.4.2017

Auf dem ILTB 2017 in Passau habe ich auch einen Vortrag darüber gehört, was man mit einer Kinect machen kann. Das ist ein Zubehör der Xbox-Spielekonsole: Eine Kamera, die auf den Fernseher gestellt wird und die menschlichen Spieler davor erkennt, so dass man die Spiele mit Gesten und Bewegugn steuern kann. (Das geht mit einer Infrarotkamera, die erkennen lässt, wie nah die erfassten Bildpunkte an der Kamera sind. Aus dem so entstandenen 3D-Bild wird errechnet, wo sich Kopf, Arme, Hände, Augen und so weiter von einer je nach Kinect-Modell unterschiedlichen Anzahl von Personen befinden.)

Bisher wusste ich nur, dass man die Kinect zweckentfremden kann zum 3D-Scannen, indem man die Kamera um ein Objekt bewegt. Dann hat man eine Vorlage für den 3D-Drucker. Für mich interessanter ist aber, dass es für die beiden Kinect-Modelle Schnittstellen gibt zu Scratch, Processing und Java.

Scratch ist dabei die einfachste Möglichkeit. Mit dieser Programmierumgebung arbeiten bei uns die Siebtklässler, es nutzt die Möglichkeiten der Kinect nur teilweise aus, ist aber sofort bedienbar, wenn man die Treiber installiert und ein Schnittstellen-Programm laufen lässt.

Hier ein mitgeliefertes Demoprojekt, das das Gerüst zur erkannten Person in Echtzeit zeichnet:

Screenshot Scratch mit Kinectsteuerung

Bereits fertige Projekte lassen sich leicht anpassen. Hier ein Flugspiel eines Schülers, das ursprünglich mit Tasten gesteuert wird. Hier die Variante: Der Vogel fliegt nach oben, wenn beide Hände höher als der Kopf des Spielers sind, und nach unten, wenn beide Hände tiefert sind. Sonst geradeaus. Das geht übrigens mit der Zeit ganz schön in die Arme:

Screenshot Scratch mit Kinectsteuerung

(Andere Steuerungen waren zu schwierig beim Spiel. Ich habe probeweise eine Flattersteuerung programmiert: Man sinkt automatisch immer nach unten, aber wenn man immer abwechselnd die Hände über und unter dem Kopf hat, und das nicht zu schnell hintereinander, dann steigt man nach oben. Alternativ kann man die Entfernung der Hände zum Kopf einbeziehen, damit man sich wirklich strecken muss.)

Atari Adventure in Scratch

By | 28.3.2017

Man kann auch mal für Aufgaben erst eine Lösung präsentieren und dann die Schüler und Schülerinnen mal machen lassen und schauen, wie weit sie sich ihr nähern können. Wir hatten eigentlich vorerst schon mit Scratch aufgehört und uns Robot Karol genähert, da erinnerte ich mich an ein Computerspiel meienr Kindheit. Ich kannte dieses Spiel – Atari Adventure – aus der Reklame, hatte es aber selber nie, sondern nur so ähnliche. Und dieses Atari Adventure war berühmt für die reichhaltige Fülle der Welt, in der man sich bewegen konnte, und die ansprechende Grafik. So sah das Spiel aus:

Solche Zeiten waren das.

Ich habe den SuS das Let’s-Play-Video oben vorgespielt und als Referenz zur Verfügung gestellt, und während die meisten mit Robot Karol weitermachten – hier ein differenzierendes Arbeitsblatt mit gemischten Aufgaben zur Wiederholung mit fester Anzahl, mit Lösungstipps auf der Rückseite – versuchten fünf Schüler, das Atari Adventure zu rekonstruieren. Zweiweinhalb Stunden hatten sie Zeit dafür, und da kamen sehr ordentliche Sachen heraus:

Bildschirmfotos

Passende Grafik, Bewegung, Mauern als Hindernisse, verschiedene Räume, ein Schlüssel zum Auf- und Mitnehmen, ein ebensolches Schwert, mit dem man einen Gegener töten kann. Der hat selber ein rotierendes Schwert, dem man ausweichen muss:

Screenshot Spiel

Screenshot Spiel

Wenn die sich jetzt zusammentäten und gemeinsam weitermachten, käme ein brauchbares Spiel heraus. Mal schauen, wie wir weitermachen.

Array enaktiv

By | 23.3.2017

Seit ich das beim Kollegen Sebastian Buch gelesen habe, freue ich mich aufs Nachmachen:

lastikbox mit kleinen nummerierten Schubladen

Wie man einsetzt, beschreibt Sebastian unter dem Link oben. Beim Deklarieren des Feldes wird der leere Kasten hingestellt. Beim Initialisieren kommen leere Schubladen in einer Anzahl hinzu, die der Feldgröße entspricht. Ab jetzt kann man die einzelnen Fächer des Feldes ansprechen, und zum Beispiel Zettelchen hineinlegen lassen, beschriftet mit „Annas Radiergummi“ und „Billys Radiergummi“, falls das ein Feld für Radiergummis ist.

(Für Nichtinformatiker: Ein Feld oder Array ist eine Datenstruktur, die ein Verzeichnis ist für gleichartige Daten, also lauter Radiergummis oder ganze Zahlen oder Wörter. Die Länge des Feldes kann nicht mehr geändert werden, sobald sie einmal festgelegt ist. Jedes Element im Feld kann man über den Index ansprechen, also die Nummer im Feld, meist angefangenm bei 0.)

Storyworld – ein Java-Projekt für die 10. Klasse

By | 21.3.2017

Paket für ILTB 2017 Download, Zip, ~20 MB (enthält Präsentation, Anleitung, Code)

Storyworld habe ich als Projekt für 10. Klassen am Gymnasium in Bayern im Rahmen des Fachs Informatik durchgeführt. Es geht dabei darum, dass Schülerinnen und Schüler für eine gemeinsame Fantasy-Spielwelt Geschichten schreiben, die in Form von Zustandsautomaten umgesetzt werden und die miteinander in Zusammenhang stehen können.

Vorgeschichte und Hintergrund

Eine beispielhafte Spielwelt

So sieht zum Beispiel eine Welt aus, die aus 6 Location-Objekten und 5 Connections besteht. Es ist Absicht, dass La Isla Bonita nicht so einfach zu erreichen ist.

Landkarte der Spielwelt

Im Spiel kann man sich zwischen den Orten, die durch Kanten verbunden sind, bewegen. Der eigentliche Clou: An manchen Orten werden zusätzlich zu den Ortsbeschreibungen Geschichten oder Teile von Geschichten präsentiert.

Die Geschichte vom Froschkönig, klassisch und linear

Klassische Geschichten sind linear in dem Sinn, dass sie Absatz für Absatz gelesen werden und man auch nicht mehr zurückspringt. Das gilt auch dann, wenn nicht chronologisch erzählt wird, sondern mit Sprüngen, wie etwa in der Odyssee. Deutschlehrer verlangen manchmal von ihren Schülern, die Geschichte in einzelne Stationen aufzuteilen. Das sieht dann, etwas formalisiert, so aus:

Zustandsübergangsdiagramm Froschkönig klassisch

Die Geschichte vom Froschkönig, als nichtlineares Spiel umgestaltet

Spiele sind of nicht-linear in dem Sinn, dass man zu vorherigen Zuständen zurück kann und bestimmte Phasen mehrfach durchläuft. Auch gibt es möglicherweise unterschiedliche Wege zwischen den Stationen. In der Informatik kann man so etwas als Zustandsautomat modellieren. Das sieht dann so aus, mit auslösenden Aktionen bei den Übergängen, ausgelösten Aktionen nach dem Schrägstrich, und zusätzlichen Bedingungen für den Zustandsübergang in eckigen Klammern.

Zustandsübergangsdiagramm Froschkönig nichtlinear

Die zentralen Methoden der Geschichtenklassen

Bewegt man sich durch die Welt, erscheinen Reiter mit den zur Verfügung stehenden Geschichten. Wählt man eine davon, sieht man zum Beispiel dieses schlichte Beispiel – der Spieler befindet sich gerade im Hafen, könnte nach Innismund wechseln, und hat gerade die Geschichte „Das öde Haus“ ausgewählt:
Benutzeroberfläche Spiel

Zu diesem Zweck hat jede Geschichtenklasse zwei Methoden: createReport und receiveMessage. Die erste Methode wird aufgerufen, damit die Geschichte einen Bericht oder eine Beschreibung abgeben kann, möglichweise mit einer oder mehreren Optionen, die der Spieler danach wählen kann. Die zweite Methode gibt an, was geschieht, wenn der Spieler die jeweilige Option wählt, sie entspricht mehr oder weniger der klassischen Zustandsübergangsmethode:

class LeeresHaus extends SingleLocationStory {
 
 public Report createReport() { 
  Report r = new Report("Ein leeres Haus.");
  r.addOption("Du untersuchst es", "anschauen");
  return r;
 }
 
 public void receiveMessage(String s) {
  if (s.equals("anschauen")) {
   sendMessage("Niemand zu Hause");
   if(get("Neugier")<10)increase("Neugier", 1);
  }
 }
 
 public String getName() { return "Das öde Haus"; }
 public String startStoryAt() { return "Hafen"; }
 public String getImageName() { return "resources/haus.png"; }
 
}

Die Methode getName gibt den Namen der Geschichte zurück, die für diese Unterklasse von Geschichten notwendige Methode startStoryAt gibt den Ort zurück, an dem die Geschichte spielt, die optionale Methode getImageName gibt den Ort und Namen eines passenden Bildes an.

Zu den typischen ausgelösten Aktionen bei der Zustandsübergangsmethode gehören set, increase, decrease von beliebigen Spielwelt- oder Spielerattributen. (Wenn ein Attribut dieses Namens noch nicht existiert, wird es angelegt.) Den Wert dieses geschichtenübergreifenden Attributs kann man auch mit get abfragen, um Anweisungen von bestimmten Bedingungen abhängig zu machen.
Außerdem kann man mit sendMessage Text ausgeben. Daneben gibt es viele Möglichkeiten, den Zustand der Spielwelt zu ändern – man kann diese Geschichte an einen anderen ort platzieren, den Spieler auch, neue Orte oder Verbinungen zwischen Orten erschaffen. Häufig wird man auch ein Zustandsattribut in die eigene Geschichtenklasse einbauen und dessen Wert ändern. Von dem Wert dieses eigenen Zustandsattributs hängt dann auch der zurückgegebene Report ab, und die damit verbundenen Optionen – und schon hat man einen einfachen Zustandsautomaten.

— Wer die Trennung oder Doppelung der zwei Methoden createReport und receiveMessage unübersichtlich findet, für den gibt es Alternativen: In einem Anhang unten habe ich die verschiedene anderen Geschichtenklassen gegenübergestellt. Sie sind alle Unterklassen von AbstractStory, und logisch alle äquivalent, bieten eben nur unterschiedliche Implementierungen.

ActionStory

Implementiert eine Geschichtenklasse das Interface ActionStory, so muss es eine Methode void act() geben. Diese Methode wird jedesmal aufgerufen, wenn der Spieler sich entscheidet, zu einem anderen Ort zu gehen. So kann man zum Beispiel einen Wanderer erschaffen, der sich bei jeder Bewegung des Spielers auch bewegt, zum Beispiel zu einem zufälligen Nachbarort.

Ausgelöste Aktionen

Typisch sind:

  • set(String, int), increase(String, int), decrease(String, int)
  • movePlayerTo(String)
  • sendMessage(String)
  • moveStoryTo(String) – das geht nur bei Objekten der Klasse SingleLocationStory und deren Unterklassen, da nur diese Geschichten an genau einem Ort spielen
  • addLocation(Location), removeLocation(Location)
  • addConnection(Location, Location, int), removeConnection(Location, Location)
  • enter() und exit() – optional: nachdem man mit enter() eine Geschichte betreten hat, kann man nicht mehr zu einer anderen Geschichte oder einem anderen Ort wechseln, bis man zu einem Ende gekommen ist, das einen mit exit() wieder aus der Geschichte entlässt (es gibt auch einen automaticEntryMode)
  • introduceStory(AbstractStory)
  • deleteStory(AbstractStory)

Bedingungen/Informationen über die Welt

  • int get(String)
  • boolean playerIsIn(String)
  • String getPlayerLocationName()
  • String getRandomNeighbourName(String)
  • Location [] getAllNeighbours(String)
  • Location getRandomLocation()
  • int getTimeSinceLastReport()

Mögliche Geschichten

  • Ein Wanderer, der zufällig herumzieht.
  • Ein Tribble, das gefangen werden kann und dann verschwindet, sich ansonsten vermehrt, indem es als ActionStory in jedem Spielerzug mit einer gewissen Wahrscheinlichkeit neue Objekte der eigenen Klasse ins Spiel bringt. (Besser mit Obergrenze, da exponentielles Wachstum.)
  • Eine klassische Kuriermission, bei der ein Gegenstand von Ort A nach Ort B gebracht werden muss und man dafür eine Belohnung erhält.
  • Romeo und Julia: Man trägt Briefe zwischen beiden hin und her, bis beider Geschichte ein Ende findet.
  • Eine Begleitmission, bei der man einen Passagier zu einem möglicherweise unbekannten Ort geleiten und abliefern muss. (Die letzten drei sind Beispiele für Geschichten, die an mehr als einem Ort spielen.)
  • Ein bürokratisches Labyrinth, aus dem man herausfinden muss.
  • Eine Fähre zwischen dem Hafen und La Isla Bonita – als Geschichte, die nur an einem Ort spielt, der aber mit moveStoryTo geändert wird, oder als Geschichte an zwei Orten. (An dem einen hat man die Fähre und die Möglichkeit, sie zu besteigen; am anderen wird man auf die abwesende Fähre hingewiesen. Die Fähre wechselt natürlich den Ort, entweder durch Spieleraktion oder selbstständig.)
  • „Das öde Haus“ von E.T.A. Hoffmann, umgeformt in eine Minigeschichte, mit viel Originalzitaten.

Langer Anhang: Varianten der zentralen Methoden in verschiedenen Unterklassen

Ich finde die Trennung in zwei Methoden createReport und receiveMessage übersichtlich und praktisch. Aber gerade wenn man die Geschichte mit einem Zustandsattribut umsetzt, gibt es unschöne Doppelungen im Code: Man braucht für beide Methoden ein ähnliches if-else- oder switch-Konstrukt, um den aktuellen Zustand abzufragen, von dem ja sowohl der Report als auch der Zustandsübergang abhängen. Wem das nicht gefällt, für den gibt es andere Möglichkeiten. Es folgt ein kurzer Überblick über die verschiedenen Geschichtenklassen. Eine Schüler-Klasse ist jeweils eine Unterklasse einer davon; die in diesem Fall zu überschreibenden Methoden sind jeweils farblich markiert.

Klassendiagramm Story-Klassen

AbstractStory

Das ist die allgemeinste Klasse. Unterklassen davon müssen einfach nur drei Methoden implementieren; wem das reicht, der kann die restlichen Klassen ignorieren:

  • String getName() – das gilt für alle Geschichten-Klassen. Jede Geschichte braucht einen (eindeutigen) Namen.
  • Report createReport(String locationName) – die Geschichte wird bei jeder Bewegung und jeder Entscheidung eines Spielers gebeten, einen Bericht abzuliefern. Dieser Bericht hängt vielleicht vom Zustand der Geschichte ab, aber ganz sicher vom Ort des Spielers, dessen Bezeichner als Argument übergeben wird. Wenn eine Geschichte in Innismund und in Das Schloss spielt, wird sie nur in diesen beiden Fällen einen Report abgeben, in allen anderen Fällen null zurückgeben. So ein Null-Report wird dann nicht angezeigt.
    Einem Report kann man Optionen hinzufügen, die dann als anklickbare Knöpfe erscheinen. Das geht unter anderem mit der Methode addOption(String, String). (Man kann auch Option-Objekte erzeugen, die dann mehr Möglichkeiten bieten.) Der erste String ist der Text, den der Spieler zu sehen kriegt; der zweite String ist die Nachricht, die an die Geschichtenklasse geschickt wird, damit auf die Wahl des Spielers reagiert werden kann – siehe folgende Methode.
  • void receiveMessage(String message) – diese Methode wird aufgerufen, wenn der Spieler auf den entsprechenden Options-Knopf geklickt hat, dabei wird der String, der der Option als zweites Argument übergeben worden ist, zum Argument der receiveMessage(String)-Methode gemacht. (Tatsächlich wird vorher die Methode receiveMessage(Option) aufgerufen, wobei aus dem Option-Argument eine Reihe von Consequence-Objekten extrahiert und automatisch ausgeführt werden, bevor der Message-String extrahiert und an receiveMessage(String) übergeben wird.)
import storyworld.*;
public class Fischer extends AbstractStory {
    int zustand = 0;
    public Fischer () { }
    public String getName() { return "Der Angler"; }    
 
    public Report createReport(String locationName) {
        if (!locationName.equals("Hafen")) return null; // die Geschichte gibt nur für einen Ort einen Report zurueck
        if (zustand == 0) {
            Report r = new Report("Ein Fischer sitzt am Kai und angelt.");
            r.addOption("Du fragst ihn, wie es so läuft.", "ansprechen");
            return r;
        } else {
            Report r = new Report("'Toll!' Der Angler erzählt dir eine lange Geschichte, wie er einmal fast den größten Fisch gefangen hat, denn es je zu sehen gab, und gibt dir einen Fisch.");
            r.addOption("Du dankst für das Gespräch und den Fisch.", "beenden"); 
            return r;
        }
    }
 
    public void receiveMessage(String s) {
        if (zustand==0) {
            if (s.equals("ansprechen") ) // ausloesende Aktion
            { 
                if (get("Fische")<3) { // Bedingung des Zustandsuebergangs 
                    zustand = 1; 
                    increase("Fische", 1); // ausgeloeste Aktionen
                } else {
                    sendMessage("Du hast schon genug Fische."); 
                }
            }
        }
        else if (zustand==1) {
            if (s.equals("beenden")) // ausloesende Aktion
            {
                zustand = 0; 
            }
        }
    }    
}

SingleLocationStory

Diese Klasse ist für Einsteiger gedacht; bei ihr muss die Methode createReport() ohne Argument überschrieben werden. Diese Methode wird nämlich nur dann aufgerufen, wenn der Spieler sich an dem Ort befindet, an dem die Geschichte spielt, und der am Anfang durch startStoryAt() festgelegt wird. Dafür kann die Geschichte aber auch nur an einem Ort gleichzeitig spielen. Dieser Ort kann mit moveStoryTo(String) geändert werden.
Die Methoden getName() und receiveMessage(String) funktionieren wie oben.

import storyworld.*;
public class Fischer extends SingleLocationStory {
    int zustand = 0;
    public Fischer () { }
    public String startStoryAt() { return "Hafen"; }
    public String getName() { return "Der Angler"; }    
 
    public Report createReport() {        
        if (zustand == 0) {
            Report r = new Report("Ein Fischer sitzt am Kai und angelt.");
            r.addOption("Du fragst ihn, wie es so läuft.", "ansprechen");
            return r;
        } else {
            Report r = new Report("'Toll!' Der Angler erzählt dir eine lange Geschichte, wie er einmal fast den größten Fisch gefangen hat, denn es je zu sehen gab, und gibt dir einen Fisch.");
            r.addOption("Du dankst für das Gespräch und den Fisch.", "beenden"); 
            return r;
        }
    }
 
    public void receiveMessage(String s) {
        if (zustand==0) {
            if (s.equals("ansprechen") ) // ausloesende Aktion
            { 
                if (get("Fische")<3) { // Bedingung des Zustandsuebergangs 
                    zustand = 1; 
                    increase("Fische", 1); // ausgeloeste Aktionen
                } else {
                    sendMessage("Du hast schon genug Fische."); 
                }
            }
        }
        else if (zustand==1) {
            if (s.equals("beenden")) // ausloesende Aktion
            {
                zustand = 0; 
            }
        }
    }    
}

ShopStory

Eine Klasse, um Läden anzulegen, die Waren oder Gegenstände kaufen und verkaufen. Arbeitet viel mit Requirement– und Consequence-Objekten bei den Optionen. Überschrieben werden muss keine Methode, aber sinnvollerweise werden mit addItem im Konstruktor Waren hinzugefügt, die der Laden kauft und verkauft.

import storyworld.*;
 
public class KleinerLaden extends ShopStory {
    public String startStoryAt() {  return "Innismund"; }
    public String getName() { return "Der kleine Laden";}
    public KleinerLaden() {
        setDescription("Hier gibt es allerlei Dinge.");        
        addItem("Wasser",50, "Geld", 2, "Geld", 1); // 50 Wasser vorhanden, fuer 2 Geld zu kaufen, fuer 1 Geld an den Laden verkaufen 
        shopSells("Kräuterbaguette",5, "Geld",1000); // 1 Kraeuterbaguette für 1000 Geld kaufen (5 vorhanden)             
        shopBuys ("Seele",1, "Geld", 1000); // 1 Seele fuer 1000 Geld verkaufen
        shopBuys ("Ansehen",10, "Geld", 1); // 10 Ansehen fuer 1 Geld verkaufen
        shopBuys ("Tribble",1, "Geld", 1); // 1 Tribble fuer 1 Geld verkaufen
    }
}

TestableStory

Eine Unterklasse, die speziell für das Projekt eingerichtet wurde; sie hat eine test-Methode, die eine Welt erzeugt und die Geschichte, die die Methode aufgerufen hat, in die Testwelt einbaut. Diese Methode muss von der Unterklasse am Ende des Konstruktors aufgerufen werden.

SimpleStory

Ist identisch zu SingleLocationStory, nur mit der zusätzlichen Möglichkeit des Testens, indem am Ende des Konstruktors test() aufgerufen wird.

MultiplaceStory

Entspricht letztlich der Klasse AbstractStory – das heißt, die createReport-Methode wird jetzt wieder bei jeder Location aufgerufen, dafür erhält sie jetzt wieder als String-Argument den Namen der aktuellen Location. Am Ende des Konstruktors wird test() aufgerufen.

ModifiedSimpleStory

Vielleicht stört den einen oder anderen die Doppelung der if-Anweisung in den beiden Methoden. Deshalb bietet diese Klasse eine Methode Report receiveChoice(String message), die überschrieben werden muss. Sie ersetzt die beiden Methoden receiveMessage und createReport der Oberklasse, die demnach nicht überschrieben werden müssen.
Auch diese Methode wird nur dann aufgerufen, wenn der Spieler an dem einen Ort ist, an dem die Geschichte spielt. Man muss also nie einen Null-Report zurückgeben.
In dieser Klasse muss man zwar nur eine zentrale Methode schreiben, aber dese Methode enthält wieder zwei gro0ße if/switch-Blöcke: Zuerst einen für das Auswerten der Nachricht, dann einen für das Senden des aktuellen Zustands-Reports.

import storyworld.*;
public class Fischer extends ModifiedSimpleStory {
    int zustand = 0;
    public Fischer () { }
    public String startStoryAt() { return "Hafen"; }
    public String getName() { return "Der Angler"; }    
 
    public Report createReport(String s) {
        //Teil 1   
        if (zustand==0) {
            if (s.equals("ansprechen") ) // ausloesende Aktion
            { 
                if (get("Fische")<3) { // Bedingung des Zustandsuebergangs 
                    zustand = 1; 
                    increase("Fische", 1); // ausgeloeste Aktionen
                } else {
                    sendMessage("Du hast schon genug Fische."); 
                }
            }
        }
        else if (zustand==1) {
            if (s.equals("beenden")) // ausloesende Aktion
            {
                zustand = 0; 
            }
        }
        //Teil 2
        if (zustand == 0) {
            Report r = new Report("Ein Fischer sitzt am Kai und angelt.");
            r.addOption("Du fragst ihn, wie es so läuft.", "ansprechen");
            return r;
        } else {
            Report r = new Report("'Toll!' Der Angler erzählt dir eine lange Geschichte, wie er einmal fast den größten Fisch gefangen hat, denn es je zu sehen gab, und gibt dir einen Fisch.");
            r.addOption("Du dankst für das Gespräch und den Fisch.", "beenden"); 
            return r;
        }
    }
}

ModifiedMultiplaceStory

Analog zu MultiplaceStory wird hier Report receiveChoice(String message) an jedem Ort des Spiels aufgerufen, man muss in dieser Methode also für die meisten Orte einen Null-Report zurückgeben. (Die Methoden receiveMessage und createReport entfallen wieder.)

Letztlich wie die Oberklasse, nur mit einem zusätzlichen if (!s.equals("Hafen")) return null;

YetAnotherModifiedSimpleStory

Diese Klasse ist für Leute, die die zwei if/switch-Blöcke stören: Hier gibt es nur einen davon. Da der verlangte Report ja erst am Schluss der Methode zurückgegeben werden kann, hat die zu implementierende Methode void createReport(String message) hier keinen Rückgabetyp; dafür wird mit Aufrufen von setReport(Report) der später zurückzugebende Report festgelegt.

import storyworld.*;
public class Fischer extends YetAnotherModifiedSimpleStory{
    int zustand = 0;
    public Fischer () { }
    public String startStoryAt() { return "Hafen"; }
    public String getName() { return "Der Angler"; }    
 
    public void receiveChoice(String s) {        
        if (zustand == 0) {
            Report r = new Report("Ein Fischer sitzt am Kai und angelt.");
            r.addOption("Du fragst ihn, wie es so läuft.", "ansprechen");
            setReport(r);
            if (s.equals("ansprechen")) {
               if (get("Fische")<3) { // Bedingung des Zustandsuebergangs 
                   zustand = 1; 
                   increase("Fische", 1); // ausgeloeste Aktionen
               } else {
                   sendMessage("Du hast schon genug Fische."); 
               }
           }
        } else {
            Report r = new Report("'Toll!' Der Angler erzählt dir eine lange Geschichte, wie er einmal fast den größten Fisch gefangen hat, denn es je zu sehen gab, und gibt dir einen Fisch.");
            r.addOption("Du dankst für das Gespräch und den Fisch.", "beenden"); 
            setReport(r);
            if (s.equals("beenden")) {
                zustand = 0;
            }
        }
    }
}

SimpleStoryChrisGraessl

Eine weitere, sehr elegante Methode. Hier muss man nur Report createReport() überschreiben, die Methode receiveMessage(String) entfällt beziehungsweise ist in der Oberklasse festgelegt. Das zweite Argument von:

addOption(String, String)

wird dabei als Methodenbezeichner verwendet. Setzt man diese Option:

addOption("Du isst den Kuchen.", "essen");

so wird, wenn der Spieler sich für sie entscheidet, die Methode void essen() aufgerufen, die natürlich existieren muss.

import storyworld.*;
public class Fischer extends SimpleStoryChrisGraessl {
    int zustand = 0;
    public Fischer () { }
    public String startStoryAt() { return "Hafen"; }
    public String getName() { return "Der Angler"; }    
 
    public Report createReport() {        
        if (zustand == 0) {
            Report r = new Report("Ein Fischer sitzt am Kai und angelt.");
            r.addOption("Du fragst ihn, wie es so läuft.", "ansprechen");
            return r;
        } else {
            Report r = new Report("'Toll!' Der Angler erzählt dir eine lange Geschichte, wie er einmal fast den größten Fisch gefangen hat, denn es je zu sehen gab, und gibt dir einen Fisch.");
            r.addOption("Du dankst für das Gespräch und den Fisch.", "beenden"); 
            return r;
        }
    }
 
    public void ansprechen() {
        if (get("Fische")<3) { // Bedingung des Zustandsuebergangs 
            zustand = 1; 
            increase("Fische", 1); // ausgeloeste Aktionen
        } else {
            sendMessage("Du hast schon genug Fische."); 
        }
    }
 
    public void beenden() {
        zustand = 0; 
    }    
}

Death Race 2000 – Frankensteins Todesrennen

By | 18.3.2017

Gestern zufällig auf ein Interview mit Roger Corman vom letzten Herbst gestoßen, das jetzt erst veröffentlicht wurde. Wie schön – ich wusste nicht, dass er noch lebt, aber mit 90 Jahre ist er auch weniger alt, als ich gedacht hätte. Anlass des Interviews war der Film Death Race 2050, der Anfang des Jahres 2017 herauskam, ein Remake von Death Race 2000 (deutsch: Frankensteins Todesrennen) aus dem Jahr 1975, produziert von Roger Corman. (2008 gab es schon mal ein Remake.)

Und just diesen Originalfilm (Regie: Paul Bartel), dessen Titel ich seit frühen Jahren kenne, habe ich vor wenigen Monaten zum ersten Mal gesehen, und er hat mit sehr gut gefallen. Schön fand ich das Sparsame der Produktion. Da ist nichts Überflüssiges daran, keine lyrische Landschaft, kein episches Herumgucken, keine, uh, Schauspielerei, und kein ordentliches Bühnehnbild. Als zum ersten Mal die zentrale der geheimen Widerstandsbewegung gezeigt wurde, meinte Frau Rau: „Das sieht aus wie bei der Probe eines Brechttheaters“, und exakt so sieht es auch wirklich aus.

Die Geschichte: Ein dystopisches USA der nahen Zukunft. Es gibt einen Präsidenten, eine möglicherweise repressive Regierung (aber das wird allenfalls angedeutet), eine Widerstandsbewegung, und das jährliches Toderesrennen, bei dem Fahrer schnellstmöglich durch die USA fahren und dabei außerdem Punkte für überfahrene Passanten erhalten. Dazu überdrehte Medienberichterstattung vom Rennen. Die Fahrer – in der Hauptrolle David Carradine, als Konkurrenz Sylvester Stallone – versuchen einander umzubrinnen; der Widerstand versucht Frankenstein umzubringen; Frankenstein hat eigene Pläne und einen Spion im Auto. Dazu ein paar blanke Busen, mäßig motiviert. Alles ohne schauspielerische Leistung, ohne große Kulissen oder Innenausstattung. Wie schön, dass man früher einfach solche Filme machen konnte!