1. Corewars
Oldie but Goldie! Corewars ist ein Programmierspiel in welchem sich Programme in einem zyklischen Speicher bekämpfen. Diese kleinen Kämpfer sind in einer Assemblerartigen Programmiersprache geschrieben und beherrschen sogar eine Art Multithreading. Bei jedem der Kampfprogramme wird abwechslungsweise ein Befehl ausgeführt. Das Programm das am Schluss noch ausführbar ist hat gewonnen.
Einfachstes Beispiel: der Imp. Er gewinnt zwar nie, aber verliert auch nicht. Alles was er tut ist den Code aus Speicherstelle 0, also sich selber (in Corewars sind alle Speicherangaben relativ zur eigenen Position) eine Speicherstelle weiterkopieren. Als nächstes wird diese kopierte Version ausgeführt und er rast geschwind durch den ganzen Speicher und überschreibt viele, sehr ausgeklügelte aber träge Giganten.
mov 0, 1
Etwas vielfältiger ist der Dwarf. Er schiesst Steine (unausführbare DAT-Anweisungen) durch den Speicher:
mov 2, @2 ; Kopiere die DAT-Anweisung an die Speicherstelle auf die sie zeigt
jmp -2 ; Von vorne
dat #0
Grundsätzlich gibt es drei Strategien die sich grundsätzlich zyklisch gegenseitig schlagen:
- Papers:
- Papers sind Replikatoren. Sie kopieren sich selbst über das Spielfeld und führen ihre Kopien dann aus.
- Stone:
- Stones schmeissen unausführbare dat Anweisungen über das Spielfeld.
- Scissors:
- Scannen das Spielfeld und versuchen andere Warriors zu finden und mit sinnlosem Code zu beschäftigen.
Ganz wilde Naturen wenden genetische Algorithmen an um sich Krieger zu züchten! Ganz verrückte Sache!
Die Idee ist schon über 10 Jahre alt und die „Arenen“ sind relativ ausgereift, inklusive Debuggingfunktionen. Es gibt sie online als Applet und einige Implementationen wie ARES, Corewin oder den Klassiker pMars (inklusive Quellcode) den es auch für Linux gibt (wenn man nicht selber kompilieren will). Die Sprache (redcode) ist genormt und es gibt Turniere (sogenannte Hills) auf denen ständig Kampfprogramme gegeneinander antreten. Sogar ein Benchmark gibt es.
Eine gute Deutsche Einführung gibt W. Zimmer. Auf Englisch gibt es ganz viele verschiedene (einfach mal googeln oder wikipedien).
2. NetLogo
Kennt Ihr noch Logo? Die Sprache mit der Schildkröte (turtle) die man hemmungslos herumkommandieren konnte? NetLogo ist Logo auf Speed, denn mit ihm kann man fast beliebig viele Schildkröten kommandieren. Das ermöglicht sehr interessante Simulationen für verschiedene Fänomene wie Gerüchteausbreitung, Jäger/Beuteverhältnis, Seggregation, Partikelverhalten und besoffene Seemänner 🙂 . Über NetHub ist NetLogo Client/Server fähig. Eine spassige und äusserst fesselnde Sache.
3. Robocode
Bei Robocode geht es darum in Java einen Roboter zu entwickeln. Dabei leitet man von einer Grundklasse ab und lässt die Roboter in einer grafisch schön gestalteten Arena gegeneinander antreten. Ursprünglich wurde das Spiel von IBM entwickelt, baer heute macht eine deutsche und eine englische Community weiter. Robocode ist eine geniale Möglichkeit, Java und objektorientiertes Design zu lernen.
import robocode.*;
//import java.awt.Color;
/**
* StupidZonk - a robot by (your name here)
*/
public class StupidZonk extends Robot
{
/**
* run: StupidZonk's default behavior
*/
public void run() {
// After trying out your robot, try uncommenting the import at the top,
// and the next line:
//setColors(Color.red,Color.blue,Color.green);
while(true) {
// Replace the next 4 lines with any behavior you would like
ahead(100);
turnGunRight(360);
back(100);
turnGunRight(360);
}
}
/**
* onScannedRobot: What to do when you see another robot
*/
public void onScannedRobot(ScannedRobotEvent e) {
fire(1);
}
/**
* onHitByBullet: What to do when you're hit by a bullet
*/
public void onHitByBullet(HitByBulletEvent e) {
turnLeft(90 - e.getBearing());
}
}
4. CodeRuler
CodeRuler ist ein weiteres IBM Glanzstück: Sie, beziehungsweise Ihr Programm, ist eine Königin oder König und Herrscht über Land, Burgen, Ritter und Untertanen. Sie kämpfen gegen eine oder mehrere böse Königinnen und Könige in feindlichen Schlössern. Ritter können Bauern metzeln und Schlösser einnehmen, Bauern bestellen das Land und bringen Punkte um neue Bauern oder Ritter zu machen und im Schloss werden diese dann produziert.
Technisch bedeutet dies, dass man wieder eine Javaklasse ableitet und bestimmte Methoden überschreibt. Es macht unglaublich Spass und ganz nebenbei lernt man viel über Java.
Hier ein Beispiel eines etwas dementen Rulers:
import java.util.Random;
public class MyRuler extends Ruler {
public String getRulerName() {
return "Simple Ruler";
}
public String getSchoolName() {
return "IBM developerWorks";
}
public void initialize() {
}
protected Random rand = new Random();
public void orderSubjects(int lastMoveTime) {
IPeasant[] peasants = getPeasants();
for (int i = 0; i < peasants.length; i++) {
move(peasants[i], rand.nextInt(8) + 1);
}
}
}
5. Kara
Kara wurde von Swisseduc entwickelt und sieht schnufflig aus. Der „jööö“-Effekt soll aber nicht täuschen, denn beim Marienkäfer handelt es sich um eine ausgewachsene Zustandsmaschine. Mit dieser lassen sich einfachere und Komplexere Aufgaben lösen die im Programm vorgegeben sind. Das GUI ist sehr anwenderfreundlich und ermöglicht schnelle trial-error-Zyklen. Bis zum Schluss kann man die Grenzen von Zustandsmaschinen erfassen und bekommt ein gutes „Gefühl“ für die Dinge.
Kara hat viele weitere Projekte: Multikara ermöglicht mehrere Zustandsmaschinen kooperativ zu betreiben, mit LegoKara kann ein richtiger Roboter Kara übernehmen und des Weiteren sind Anbindungen an viele Programmiersprachen vorhanden. Diese ermöglichen dann die Verbindung von der Zustandsmaschine zum Coden.
Zu Kara gibt es auch gute Unterrichtsmaterialien für eine Einführung in die Programmierung.
Buchempfehlung
Ein sehr beeinflussendes und eindrückliches Werk sind: A.K. Dewdney. Computer-Kurzweil und Computer-Kurzweil 2. Diese Bücher sprühen vor Ideen..! Leider gibt es keine Neuauflage und sie sind nur noch gebraucht zu erwerben…
Tolle Sammlung, danke! =)
Thx… Ich hoffe, sie hat Dir nicht zuviel Zeit geklaut :)…
Ui, ich bin zwar keine ProgrammiererInn, aber ich finde Robocode trotzdem absolut geil! Vielen dank Dafür 😀
Ralf
Coole Zusammenstellung! An der Uni haben seinerzeit aufregende Turniere mit Corewars und Robocode veranstalltet. Und Kara werde ich jetzt nutzen, um meinen kleinen Sohn für das Programmieren zu begeistern.
Nicht schlecht. Habe mir Coderuler angesehen und wenn man erstmal drin ist machts schon Laune. Turniere sind bestimmt ne spannende Angelegenheit mit diesen „Spielchen“
Finde das ja interessant aber ich bin leider auf dem Gebiet nicht so bewandert. Hab in der Schule mal ne simple Datenbank programmiert. Weiß davon aber leider nichts mehr.
Danke! Schöne Sammlung.
Vielen Dank für das Lob….