Java Tweet Reader Update!

Das kleine Tool zum Lesen von Tweets konnte ich nun wieder zum Leben erwecken. Die Twitter API zum Abrufen von Nachrichten ohne Authentifizierung wurde ja leider vor einiger Zeit abgeschaltet. Das Tool wurde jetzt so angepasst, dass es direkt die Profilseiten der User ausliest. Um die entsprechenden Informationen aus der Seite herauszubekommen, kann man die Seite nach bestimmten CSS-Tags durchsuchen.

Das Tool hatte zuerst die Profilseiten nacheinander aufgerufen. So dauerte das Auslesen von sechs Twitter-Seiten 9895ms. Nun wird für jedes Profil ein eigener Thread gestartet (Parallelisierung). So konnte das Auslesen mit 4026ms erheblich beschleunigt werden.

Aktuell kann eine Twitter Seite mit folgenden Tags zerpflückt werden:

private static final String TWEET_BEGIN_TAG = "<p class=\"js-tweet-text tweet-text\">";
private static final String TWEET_END_TAG = "</p>";

private static final String TWEET_DATE_BEGIN_TAG = "class=\"tweet-timestamp js-permalink js-nav js-tooltip\" title=\"";
private static final String PROFILE_IMAGE_BEGIN_TAG = "<img class=\"avatar js-action-profile-avatar\" src=\"";

private static final String TWEET_USER_NAME_BEGIN_TAG = "<strong class=\"fullname js-action-profile-name show-popup-with-id\">";
private static final String TWEET_USER_NAME_END_TAG = "</strong>";

Es kommt natürlich vor, dass sich die Tags ändern. Bisher musste ich sie aber erst einmal anpassen.

twitter-new

Physik eines Zaubers

Für viele Effekte in Spielen kann man den schiefen Wurf nutzen. Ich hatte die Idee ein kleines Spiel mit einem Zauberer zu programmieren. Um den Zauberstab etwas zu animieren, fliegen zufällig Partikel aus der Spitze des Zauberstabs. Viel interessanter ist jedoch wie man eine Flugbahn berechnen kann, die z.B. eine Feuerkugel fliegen muss, um einen Gegner zu treffen.

Im unteren Screenshot sieht man das Ergebnis. Ein Partikel fliegt auf einer bestimmten Flugbahn und trifft den Gegner.

wizard

Um ein Partikel so fliegen zu lassen, kann man die Formel zum Berechnen der Reichweite eines Wurfes nutzen.

R = v0 ² / g * sin(2*ß)

R = Reichweite
v0 = Abschussgeschwindigkeit
g = Erdbeschleunigung
ß = Abwurfwinkel

Geht man nun davon aus, dass jeder Schuss den gleichen Abwurfwinkel haben soll, kann man die Formel folgendermaßen umstellen. Anhand der Distanz zwischen Schütze und Ziel und dem festgelegten Abwurfwinkel erhält man die nötige Startgeschwindigkeit.

v0 = Math.sqrt((R / Math.sin(2 * ß)) * g)

Nun hat man alle Parameter für die gewünschte Flugbahn. Folgende Formeln kann man nun nutzen, um die Position des Objektes zum Zeitpunkt t zu berechnen.

public static void calculateSpell(Particle s) {
	s.setT(s.getT() + 0.1);
	s.setX((int) (s.getV0() * Math.cos(s.getß()) * s.getT()));
	s.setY((int) (s.getV0() * Math.sin(s.getß()) * s.getT() - (g / 2) * (Math.pow(s.getT(), 2))));
    }

Pacman

Wie bereits angekündigt, wollte ich mich mal an einem Pacman Klon versuchen. Damit die Gegner einen Weg durch das Labyrinth zu Pac finden können, werden die Wege mit Hilfe des A* Algorithmus ermittelt. Hier hatte ich bereits eine kleine Simulation gebastelt und mit dem Algorithmus etwas herumgespielt.

Hier ein Screenshot des Spiels:

pacman

Das Spiel wird einfach mit den Pfeiltasten gesteuert. Frisst Pac einen dicken gelben Punkt, so verziehen sich die Gegner zurück in ihr Häuschen. Man hat dann auch die Möglichkeit einen Gegner zu fressen. Sollte man einen Gegner erwischen, so gibt es dafür 100 Extrapunkte.
Der Fortschrittsbalken unterhalb des Häuschens der Gegner zeigt entweder an wie lange es noch dauert bis ein weiterer Gegner dem Spiel beitritt, oder wie lange die Gegner noch in ihrem Häuschen bleiben wenn Pac eine große gelbe Kugel gegessen hat.

Hier kann man sich das Spiel herunterladen:

pac02 18,8KB Download

Wie immer habe ich die Bilder selbst erstellt.

Am Ende des Spiels hat man die Möglichkeit seine Highscore an diesen Blog zu senden. Die Highscores erscheinen dann als Kommentare zu diesem Beitrag. Ich werde wie bei TowerDefense dann noch eine Highscore Tabelle basteln.

A* Algorithmus (A Star)

Was in vielen Spielen oder Navigationsgeräten eine wichtige Rolle spielt, sind Algorithmen zum Finden von Wegen. Da es eine interessante Thematik ist und man eine schöne Simulation daraus basteln kann, habe ich mal ein kleines Programm geschrieben, das mit Hilfe des A* Algorithmus einen Weg von einem Zielpunkt zu einem Endpunkt findet. Dabei werden zufällige Hindernisse platziert, die es zu umgehen gilt.

astar

Die Zahlen in den Feldern geben stets die kürzeste Strecke zum grünen Startpunkt an.

Um diesen Algorithmus mal sinnvoll in einem Spiel einzusetzen, werde ich mich mal an einem Pacman Klon versuchen. :-)

c’t-Programmierwettbewerb: Browser-Demo

Zum 30. Geburtstag der Zeitschrift c’t gab es einen Programmierwettbewerb. Es sollte mit Hilfe von HTML5 eine kleine Demo für den Chrome Browser programmiert werden. Da ich Lust dazu hatte mal etwas mit JavaScript und HTML5 herumzuspielen, erstellte ich eine kleine Animation und nahm am Wettbewerb teil. Am 29. Mai endete der Wettbewerb und wurde zu ungunsten der bisherigen Teilnehmer bis zum 24. Juli verlängert. Bereits am 29. Mai wurde eine kleine Auswahl an eingereichten Teilnahmen ausgestellt:

c’t-Programmierwettbewerb geht in die Verlängerung

ctAnimation

Mein Beitrag war darin auch zu sehen und wurde mit dem vorläufigen, treffenden Titel “Bunte Lunten” betitelt.

Heute ging die Seite zur Abstimmung online und ich würde mich freuen, wenn ihr für meinen Beitrag (Pacman und Wunderkerzen) stimmt – falls er euch gefällt. :D

http://www.heise.de/ct/Mitmachen/Browserdemo/