Ergebnis 1 bis 20 von 45

Thema: Progforum Contest 2013 - Teenage Mutant Ninja (?) Turtles

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #12
    Hier ist meine Abgabe.
    Einmal der Source-Code, eine Windows-, Mac- und Linux-Version.
    Ich kann persönlich nur die Windows-Version testen, für die Mac- und Linux-Versionen ist keine Garantie von meiner Seite, dass sie starten werden.

    Code ist in Java geschrieben.
    Für den Grafikkontext wird OpenGL verwendet, als Wrapper lwjgl.

    Der Source-Code kann einfach erweitert werden um zusätzliche Operationen hinzuzufügen.
    Wird das Programm über die Kommandozeile gestartet wird das erste übergebene Argument, falls vorhanden, als Code kompiliert.
    Weitere Argumente werden ignoriert.
    Sollte kein Argument übergeben werden oder nicht über die Kommandozeile gestartet werden wird ein zufälliger Code von Länge 500 oder mehr Zeichen erzeugt.
    Fehler werden, sofern nicht über eine Kommandozeile gestartet wurde, in die Datei Out.txt geschrieben.

    An Operationen sind derzeit nur die vorgegebenen implementiert. Weitere Funktionen sollten jedoch sehr einfach selbst erstellt werden können.
    Da das ganze Programm sehr Objektorientiert programmiert ist, und zudem in Java, ist es bei weitem nicht so effizient wie es sein könnte. Falls man einen sehr langen Code mit sehr vielen Zeichenaufrufen verwendet muss man eventuell die Heap-Size vergrößern.

    Fenstergröße ist fix auf 640x480 eingestellt, kein Vollbild. V-Sync ist aktiviert, framerate zum Zeichnen liegt bei 10 FPS.
    Mit Druck auf die Escape-Taste kann die Anwendung beendet werden.

    Special thanks to lwjgl für die wundervolle API und die aktive Hilfe im Forum.

    Source-Code: http://www.file-upload.net/download-...ource.zip.html

    Windows: http://www.file-upload.net/download-...ndows.zip.html

    Mac: http://www.file-upload.net/download-...x-Mac.zip.html

    Linux: http://www.file-upload.net/download-...Linux.zip.html

    Hier ein Beispiel wie der (OpenGL) Compiler Initialisiert werden kann:
    Code:
            OGL_Turtle_Compiler compiler = new OGL_Turtle_Compiler();
            compiler.add_operation(new Operation_Color("0", 0, 0, 0));
            compiler.add_operation(new Operation_Color("1", 1, 0, 0));
            compiler.add_operation(new Operation_Color("2", 0, 1, 0));
            compiler.add_operation(new Operation_Color("3", 1, 1, 0));
            compiler.add_operation(new Operation_Color("4", 0, 0, 1));
            compiler.add_operation(new Operation_Color("5", 1, 0, 1));
            compiler.add_operation(new Operation_Color("6", 0, 1, 1));
            compiler.add_operation(new Operation_Color("7", 1, 1, 1));
            compiler.add_operation(new Operation_FactorDecr());
            compiler.add_operation(new Operation_FactorIncr());
            compiler.add_operation(new Operation_Draw());
            compiler.add_operation(new Operation_Move());
            compiler.add_operation(new Operation_Mult());
            compiler.add_operation(new Operation_LengthDiv());
            compiler.add_operation(new Operation_Push());
            compiler.add_operation(new Operation_Pop());
            compiler.add_operation(new Operation_TurnLeft());
            compiler.add_operation(new Operation_TurnRight());
            compiler.add_operation(new Operation_TurnMult());
            compiler.add_operation(new Operation_TurnDiv());
            OGL_Turtle_Program prog = compiler.compile("F/[+F]-F");
            Turtle_Graphic img = prog.run();
    Und hier ein Beispiel wie eine einzelne Operation implementiert werden kann:
    Code:
    public class Operation_TurnLeft extends Turtle_Operation {
        private static final long serialVersionUID = 5036124779502200375L;
        
        private static final String TOKEN = "+";
    
        public String get_token() {
            return TOKEN;
        }
        
        public void affect(final Turtle_Program prog, final Turtle_Graphic image) {
            final Turtle_State state = prog.get_state();
            final Turtle turtle = state.get_turtle();
            turtle.set_angle(turtle.get_angle() + state.get_angle());
        }
        
        public Turtle_Operation clone() {
            return new Operation_TurnLeft();
        }
        
    }
    Sollte das Programm zufälligerweise nicht starten dann bitte ich darum, dass so schnell wie möglich Bescheid gegeben werden kann.
    Bei Fragen und Anregungen bitte hier im Forum kontaktieren oder per Mail an: CornixMail@gmail.com


    Edit:
    Mir ist aufgefallen, dass ich einen ziemlich dummen Fehler in dem Algorithmus für den zufälligen Code habe. Allerdings stellt dies in dieser Situation kein Problem dar, ganz im Gegenteil, das Ergebnis wird durch den Fehler sogar noch verbessert.
    Hier ist ein Screenshot von dem, von DFYX als Beispiel angegebenen, rekursiven Code-Schnipsels:

    Geändert von Cornix (17.03.2013 um 23:57 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •