YARLG – AsciiPanel 2.0

Für mein Roguelike benoetige ich eine passende Terminal-Bibliothek. Bei meinen Recherchen dazu , bin ich auf den Blog von Trystan gestossen. Dieser hat im Jahre 2011 ein hervoragendes Roguelike-Development-Tutorial verfasst und eine Implementierung eines Terminal zur Verfuegung gestellt.

Ich laufe des Tutorials ist mir aber immer mehr aufgefallen, dass ich mit der Darstellung der Zeichen nicht ganz zufrieden bin. Nach einem kurzen Blick in den Source-Code ist mir aufgefallen, dass die Zeichen eine Höhe von 16 Pixeln und eine Breite von 9 Pixeln haben. Um das zu ändern, habe ich mich auf die Suche nach anderen Schriftarten begeben. Die Schriftarten sind eigentlich mehr Bilder/Grafiken auf denen die Buchstaben in einem festen Raster angeordnet sind.

Im Wiki von Dwarf Fortress gibt es Seite mit diversen Tilesets, auf der viele verschiedene Fonts gelistet sind. Dort habe ich mir ein paar qudratische herausgesucht und sie dem AsciiPanel hinzugefügt. implementiert.

Meine Version vom  asciiPanel findet ihr hier bei Github.

Zum testen, erstellen wir eine AsciiPanelFrame-Klasse:

import javax.swing.JFrame;

import asciiPanel.AsciiFont;
import asciiPanel.AsciiPanel;

public class AsciiPanelFrame extends JFrame {

	private static final long serialVersionUID = -233245833980108360L;
	AsciiPanel terminal;
	
	public AsciiPanelFrame(AsciiFont font) {
		super();
		// damit wir auch wissen welche Schriftart wir haben
		setTitle("AsciiPanelTest: " +  font.toString());
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setResizable(false);
		
		// erstelle ein neues Terminal
		terminal = new AsciiPanel(50, 25, font);
		this.add(terminal);
		this.pack();
		this.setVisible(true);
		
		// Zum Schluss schreiben wir noch etwas.
		terminal.clear();
		
		terminal.writeCenter("ASCII FONT TEST " + font.getFontFilename() , 1);
		terminal.writeCenter("abcdefghijklmnopqrstuvwxyz 0123456789", 3 ,AsciiPanel.brightBlue);
		// und einmal alle Zeichen ausgeben an Spalte 17 und Zeile 5
		for (int i = 0; i < 256; i++) {
			int x = i % 16 + 17;
			int y = i / 16 + 5;
			terminal.write((char)i, x, y);
		}
		// zum schluss noch repaint aufrufen
		super.repaint();
		terminal.repaint();
	}
}

Und dann die passende Hauptklasse ApplicationMain.java

import javax.swing.SwingUtilities;

import asciiPanel.AsciiFont;

public class ApplicationMain {
	/**
	 * @param args
	 * @throws FontNotFoundException
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				for (AsciiFont font : AsciiFont.values()) {
					AsciiPanelFrame frame = new AsciiPanelFrame(font);
				}
			}
		});
	}
}

In Eclipse geht das schnell und einfach. Die asciiPanel.jar noch als Library einbinden und viele Fenster gehen auf.

Viel Spaß!

Dieser Beitrag wurde unter Programming abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.