Technik, Gothic und Anderes

Technik ist Spiel, Gothic ist ernst und Zeit hat man zuviel

Archiv

Avaloqix: Unterhaltsamer Java-Programmierwettbewerb

Geschrieben von skaldrom am 23. August 2008

Flow im HirnIch liebe Wettbewerbe und ich liebe das Spielen. Meine inneres, urmännliches Ich springt voll auf das kompetitive Element solcher Veranstaltungen an. Zum Erlegen von Höhlenbären oder für Sportwettkämpfe eigne ich mich definitiv nicht, darum bin ich froh, wenn ab und zu ein Kräftemessen auf meinem - eher wetwarelastigen - Gebiet stattfindet.

Leider hat es jetzt seit längerer Zeit kein Codeduel (ein spassiger, von Microsoft Schweiz gesponserter/organisierter Event in welchem SOAP-Services gegeneinander angetreten sind, für den es aber leider keine offizielle Website mehr gibt) mehr gegeben und für die kommerzielle Version solcher Wettbewerbe habe ich im Moment wirklich keine Zeit.

Über die Seite des Schweizerischen Jahres der Informatik bin ich auf Avaloqix gestossen und war sofort begeistert. Am Tag der Informatik am 29. August 2008 in Zürich wird es ein Event speziell zu diesem Wettbewerb geben.

Das Spiel

Es geht darum, einen Spieler für eine abgewandelte Version des Shannon Switching Games zu programmieren. Kurz erklärt: Es gibt eine Quelle und ein Senke, die über ganz viele Röhren und Sammelpunkte miteinander verbunden sind. Im ersten Durchgang versucht der eine Spieler einen möglichst grossen Durchfluss zu erzielen indem er Röhren freischaltet, während der andere Spieler ebendies durch das Ausbauen von Röhren zu verhindern versucht. In einer zweiten Runde werden die Rollen der Spieler in demselben Röhrengeflecht getauscht. Gewonnen hat, wer als Durchflussmaximierer den grösseren Durchfluss erzielen konnte.
Lesen Sie den Rest dieses Beitrages »

Eingeordnet in Desktop, Theorie und Schnipsel | 5 Komentare »

AntMe, Spass mit programmierbaren Ameisen

Geschrieben von skaldrom am 2. July 2008

AntMe!Nachdem ich die Ameisen in meiner Wohnung mit ganz perfidem tragts-es-zu-euch-nach-Hause-und-vergiftet-eure-Nachkommen-Gift losgeworden bin, habe ich sehr viel sympathischere Zeitgenossen dieser Spezies getroffen: AntMe ist ein Programmierspiel, dass aus Microsofts Coding4Fun Initiative (nicht zu verwechseln mit dem Galileo Coding for Fun Buch. Das ist auch spassig, behandelt auch AntMe, aber zusätzlich noch viele Andere Dinge) hervorgegangen ist. Es hat einen eigenen Wikipedia Artikel und vorallem eine geniale Homepage.

Grundsätzlich geht es darum Ameisen zu implementieren die überleben, Äpfel und Zucker sammeln und unter Umständen auf Käfer und fremde Ameisen losgehen. Ein Markierungsmechanismus sorgt dafür, dass die Ameisen untereinander kommunizieren können. Fortgeschrittene Ameisenpapis und -mamis können spezialisierte Ameisen erstellen und RPG mässig Eigenschaften verbessern, wenn sie dafür andere verschlechtern.

Die Ameisen in Aktion

Die Ameisen können in C# oder in Visual Basic .net mit der notwendigen Intelligenz versehen werden. Bestimmte Methoden werden zu bestimmten Ereignissen aufgerufen; beispielsweise WirdMüde() (ja, mit “ü” und deutsch) oder SiehtFeind(ByVal käfer As Käfer). Zur Steuerung steht fast der ganze .net Sprachumfang zur Verfügung, sowie Ameisenspezifische Hilfsmethoden wie etwa GeheZuBau() oder GreifeAn(käfer).

Quickstart

Auf der AntMe Homepage findet man verschiedene Versionen. Wir spielen hier mit der 1.5 Beta 2 (VB.net oder C#, je nach Gusto). Die Profiversion beinhaltet den gesamten Quellcode der Spielengine (!). Das ist so genial, dass es nochmals erwähnt werden darf: Die Profiversion beinhaltet den gesamten Quellcode der Spielengine. Will man sich nur mit den Ameisen beschäftigen, reicht die Einsteigerversion. Im Download enthalten ist ein gut dokumentiertes Ameisenskelett, bei dem sofort losgottgespielt werden kann.
Eine gute Doku über die Klassen und deren Methoden sowie ein Tutorial wird mitgeliefert. Zum Teil beziehen sich die Unterlagen noch auf Version 1.1, aber der Transfer zu 1.5 ist eigentlich kein Problem. Für Leute, die lieber kuckn statt lesen, gibt es gut gemachte Screencasts, die ebenfalls in die Thematik einführen.

Für eher haptisch veranlagte Menschen gibt es auch ein Buch: AntMe! - Programmieren und Spielen mit den Ameisen und Visual C#. Das kenne und besitze ich allerdings (noch) nicht.

Verfügt man noch über keine Programmierumgebung, so könn bei Microsoft gratis die Express Versionen verschiedener Sprachen downgeloaded werden. Für die 3D Visualisierung braucht man
noch DirectX. Mit der neusten Version (nicht mit der im Forum angegebenen) hat es wunderbar gefunzt.

Turniere

Ein Bisschen lebt das Ganze auch vom kompetitiven Element (um ehrlich zu sein, vielleicht ist ein Bisschen etwas untertrieben: ICH FRESS EUCH ALLE AUF!). In der Version 1.5 funktioniert das Importieren von anderen Ameisen leider nicht und es wird eine unbehandelte Ausnahme ausgespuckt:
Der Typ für Member AntMe.SpielKonfiguration.AntMe.Simulation, Version=1.5.0.0, Culture=neutral, PublicKeyToken=37d8e32ef3294969 wurde nicht aufgelöst.

Workaround für die VB-Version (C# ungetestet):
Lesen Sie den Rest dieses Beitrages »

Eingeordnet in Coding, Desktop | 5 Komentare »

eLearning etwas anders…

Geschrieben von skaldrom am 26. September 2007

Unter Elearning wird oftmals noch das dröge Lernen von verbugten, sturen CD’s seiner selbst willen verstanden. Einen Schritt weiter geht das Blended Learning und die Learning Management Systems (lms) wie zum Beispiel Moodle.

Es geht aber auch ganz einfach und ganz spassig: AK Kappenberg hat mit WinChemie eine Programmsammlung mit einigen Perlen gratis zum Download ins Web gestellt, und das nicht nur für Chemie!

Der grosse Preis

Bei Der grosse Preis wird die Klasse in mehrere Gruppen eingeteilt, die live und abwechslungsweise gegeneinander Fragen beantworten, die mit dem Beamer projiziert werden. Dabei können die Gruppen Punkte einsetzen, sich beraten, ärgern oder freuen. Der Lerneffekt ist riesig, weil es einfach Spass macht. Die Fragen können mit einem Editor geändert und für jedes Fachgebiet angepasst werden.

Achtung: Damit das Teil läuft müssen die EconNSoft Core Components von AK Kappenberg vorgängig installiert werden, ansonsten gibt es eine nichtssagende Fehlermeldung!

Als nächstes werde ich AK Riddle austesten. Das scheint über das Netzwerk zu funktionieren. Ein Erfahrungsbericht dürfte folgen…

Eingeordnet in Desktop, eLearning | Keine Kommentare »

5 Wege für ProgrammiererInnen die Zeit intelligent zu verdödeln

Geschrieben von skaldrom am 8. August 2007

1. Corewars

Die Corewars ArenaOldie 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.

; The imp: Er kopiert sich selbst immer einen Schritt weiter
mov 0, 1

Etwas vielfältiger ist der Dwarf. Er schiesst Steine (unausführbare DAT-Anweisungen) durch den Speicher:

add #4, 3 ; Addiere 4 zur DAT-Anweisung
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

Die NetLogo Oberfläche

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

Robocode Arena

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.

package msc;
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

Das Coderuler-Land

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 com.ibm.ruler.*;
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 der Käfer

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…

Eingeordnet in Coding, Desktop | 3 Komentare »

Internet und Spass

Geschrieben von skaldrom am 10. October 2006

Ich habe wieder Internet *freu*. Und nun weiss ich dank dem Cyborg Name Decoder auch, was Michael bedeutet:

Mechanical Intelligent Construct Hardwired for Assassination and Efficient Learning

Eingeordnet in Privat, Web | Keine Kommentare »