Homepage von Jean-René Thies — Projekte & Tools rund um Java, Groovy, Grails, PHP, Scala, MySQL...

    Labyrinthe bauen

    Permalink 31.01.10 20:26, von jrt, Kategorien: Java, Minigames

    Es ist erstaunlich einfach, ein Labyrinth zu bauen, und man findet dazu auch eine Menge Anleitungen. Ich möchte hier die Beschreibung von MazeWorks aufgreifen und in Java umsetzen.

    Im Rohzustand besteht das Labyrinth aus einer Anzahl von Zellen, die alle von vier Wänden begrenzt sind. Darin entstehen dann die Gänge, indem man an einer beliebigen Stelle startet und dann die folgenden Schritte so lange wiederholt, bis man in allen Zellen einmal gewesen ist:

    1. Wähle eine beliebige Nachbarzelle, in der Du noch nicht warst.
    2. Wenn Du eine findest, dann entferne die Zwischenwand zu dieser Zelle und begebe Dich dorthin. Wenn Du keine solche Nachbarzelle findest, gehe zurück zur letzten besuchten Zelle.

    Klingt ganz einfach, und die Umsetzung ist auch nicht schwer.

    Mehr lesen »

    Einen Kommentar hinterlassen »

    Framework zum Spielen?

    Permalink 26.01.10 09:45, von jrt, Kategorien: Project Plaza, Java, Tools , Schlagworte: framework, java, web

    Gleich vorweg: Nein, das Play Framework dient nicht der Spieleprogrammierung. Es geht um ganz normale Webanwendungen, und zwar in Java. Damit bekommt die immer länger werdende Kette von Webframeworks eine weitere Perle angehängt, und nach erster Betrachtung scheint es sich um ein sehr interessantes und sehenswertes Exemplar zu handeln! Jedenfalls, wenn man Wert auf eine flache Lernkurve, gute Toolunterstützung und Effizienz legt. Java sollte man schon beherrschen, aber viel mehr braucht man eigentlich nicht.

    Wenn ich ein neues Framework anschaue, frage ich mich zuerst, ob ich damit schneller zum Ergebnis komme als mit Grails. Der nächste wichtige Punkt ist, wie schnell sich Änderungen am Datenmodell und in der Benutzeroberfläche vornehmen lassen (Erweiterung, Refactoring, Deployment). Und nicht zuletzt geht es auch darum, wie klar und übersichtlich man den Quellcode strukturieren kann. Was erzwingt das Framework, was kann man nach eigenen Vorstellungen organisieren?

    Mehr lesen »

    Einen Kommentar hinterlassen »

    Eine tierische Basic-to-Java Übersetzung

    Permalink 02.12.09 17:56, von jrt, Kategorien: Site Seeing, Java, Minigames , Schlagworte: animal, basic, datenstruktur, java

    Kürzlich habe ich zwei Bücher im Web wiedergefunden, die mich vor langer Zeit mal beschäftigt haben: BASIC Computer Games und More BASIC Computer Games. Alle Quellcodes sind als GIFs enthalten, so dass man genau wie früher abtippen muss. Sehr nostalgisch...
    Dabei helfen die vielen GOTO-Anweisungen nicht gerade beim Verständnis. Nach der Lektüre von Clean Code tun einem die BASIC-Programme geradezu in den Augen weh - und das liegt nicht nur an der niedrigen Scanauflösung der GIFs. Programme sollten beim Durchlesen auch zu verstehen sein, und das mit möglichst wenigen Kommentaren.
    Ich habe eines der Spiele herausgepickt und in Java neu geschrieben. Gespielt wird in der Textkonsole, und als kleines Bonbon speichert das Programm seine gesammelten Erfahrungen am Ende des Spiels in eine Neodatis-Datenbank.

    Mehr lesen »

    Einen Kommentar hinterlassen »

    Tutorial: Erste GUI-Anwendungen mit Scala

    Permalink 30.07.09 14:12, von jrt, Kategorien: Project Plaza , Schlagworte: action, actor, gui, progressbar, scala, swing

    Dank Programming in Scala stellen sich nach und nach erste Erfolgserlebnisse mit dieser Programmiersprache ein, und sie macht alles in allem richtig Spaß – obwohl die Unterstützung in den gängigen IDEs bislang nur rudimentär ist.
    Was mich besonders verblüfft: Die extrem kompakte Art, mit Scala grafische Benutzeroberflächen auf Swing-Basis aufzubauen. Vorher hatte ich schon mit JavaFX und Groovy SwingBuilder experimentiert, aber keines von beiden war so überzeugend.
    Hier ein paar grundlegende Schritte zur GUI-Erzeugung.

    Mehr lesen »

    Einen Kommentar hinterlassen »

    Scala-Anwendungen außerhalb von Netbeans starten

    Permalink 20.04.09 10:29, von jrt, Kategorien: Project Plaza , Schlagworte: netbeans, scala

    Ein Stolperstein, auf den vermutlich jeder schnell trifft, der Scala mit Netbeans ausprobieren möchte: Außerhalb der IDE bekommt man beim Starten der produzierten JAR-Datei eine Fehlermeldung wie

    Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject
    at java.lang.ClassLoader.defineClass1(Native Method)
    (...)
    ... 13 more

    Das kann man sehr leicht lösen, indem man dem Netbeans-Projekt noch die Datei "scala-library.jar" als Library hinzufügt. Diese Datei befindet sich in "lib" im Installationsverzeichnis von Scala.
    Wenn man das Scala-Projekt in Netbeans dann nochmal neu kompiliert, enthält auch das "dist"-Verzeichnis die Scala-Library und das Programm kann per Befehlszeile (z.B. java -jar "ScalaApplication.jar") gestartet werden.

    Einen Kommentar hinterlassen »

    JPEG Resizer

    Permalink 04.04.09 11:46, von jrt, Kategorien: Project Plaza, Java , Schlagworte: automatisierung, java, jpeg, skalierung

    Neulich brauchte ich ein Java-Programm, um eine Menge JPEG-Dateien möglichst schnell und automatisiert zu verkleinern. Dazu habe ich ein paar Code-Schnipsel aus verschiedenen Foren zusammengetragen und das hier daraus gemacht:

    Code:

    package jpegresizer;
     
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
     
    /**
    * JPEG Resizer
    * @author Jean-René Thies
    */
    public class Resizer {
     
        /**
         * Resize a JPEG file and save it.
         * Either the new width or the new heigth must be greater than zero.
         * If the width is greater than zero, the new height will be calculated.
         * If the width is zero and the height is greater than zero, the width will be calculated.
         *
         * @param inputfile complete path to original jpeg file
         * @param outputfile complete save path
         * @param newWidth width in pixel
         * @param newHeight height in pixel
         * @return success of resize and save
         */
        public static boolean resize(String inputfile, String outputfile, int newWidth, int newHeight) {
            if (newWidth > 0 || newHeight > 0) {
                try {
                    Image img = new ImageIcon(ImageIO.read(new File(inputfile))).getImage();
     
                    if (newWidth > 0) {
                        float faktor = (float) newWidth / img.getWidth(null);
                        newHeight = (int) (img.getHeight(null) * faktor);
                    } else {
                        float faktor = (float) newHeight / img.getHeight(null);
                        newWidth = (int) (img.getWidth(null) * faktor);
                    }
     
                    Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
                    BufferedImage outImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
                    Graphics g = outImg.getGraphics();
                    g.drawImage(scaledImage, 0, 0, null);
                    g.dispose();
     
                    JPEGImageEncoder jpegImageEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(outputfile));
                    JPEGEncodeParam param = jpegImageEncoder.getDefaultJPEGEncodeParam(outImg);
                    param.setQuality(0.9F, true);
                    jpegImageEncoder.encode(outImg, param);
                    return true;
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
            } else {
                return false;
            }
        }
    }

    Die "resize"-Methode nimmt den Pfad der Originaldatei und den der zu speichernden Datei an, außerdem die gewünschte Breite oder Höhe - eine der beiden Angaben kann 0 sein, dann wird der andere Wert angenommen und entsprechend proportional skaliert. Die Bildqualität des Outputs ist in der Methode selbst anpassbar.
    Wie die Importe zeigen, ist eine Java-Version von Sun nötig.

    Einen Kommentar hinterlassen »

    :: Nächste >>

    ©2010 by Jean-René Thies

    Kontakt |