import scala.actors.Actor import scala.actors.Actor._ case class Weitersagen(worte: String, nr: Int) class Spieler(val name: String) extends Actor { var nächster: Spieler = null start; println("Hi, hier ist " + name + " (" + self + ")") def act { react { case Weitersagen(worte, nr) => { if (nächster != null) { println(sag(worte + ", Nr. " + nr, nächster)) nächster ! Weitersagen(worte, nr + 1) act() // explizite Wiederholung: rekursiv weiter leben! } else { println(name + " sagt: Tschuess!") // Aktor ist am Ende ... exit() } } case 'Ende => reply("OK, tschuess! ("+self+")") // explizite Rückgabe } } def sag(worte: String, zu: Spieler) = name+" zu "+zu.name+": "+worte } object StillePost extends Application { val snoopy = new Spieler("Snoopy") val lucy = new Spieler("Lucy") val charlie = new Spieler("Charlie Brown") // Reihenfolge der Spielerrunde: charlie.nächster = lucy; lucy.nächster = snoopy; //snoopy.nächster = null charlie ! Weitersagen("Runde 1", 1) Thread.sleep(1000) // sonst schafft's Lucy evtl. nicht mehr zu Snoopy ... lucy.nächster = charlie; charlie.nächster = null lucy ! Weitersagen("Runde 2", 1) println("Lucy meldet: "+ (lucy !? 'Ende)) //println("Lucy meldet nochmal: "+ (lucy !? 'Ende)) // keine Antwort mehr ... //System.exit(0) }