ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4435020
Jetzt (Chat):
5 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"Asteroids 2003" von Steffen Engel (Seraph)


Um mal wieder etwas Neues im IOTW-Bereich zu zeigen, krame ich jetzt mal in meinen alten Projekten. Vor ein paar Semestern hatten 2 Kommilitonen und ich innerhalb der Vorlesung "OOP" die Aufgabe, ein simples Spiel zu planen, d.h. diverse Diagramme zu erstellen und darauf basierend einen Prototyp mit rudimentärer Funktionalität zu entwickeln.

Als simples Spiel haben wir uns dann gemeinsam Asteroids ausgesucht, welches jeder sicher schon einmal in einer der vielen Varianten gespielt haben wird. Grund dafür war zum einen, dass es relativ leicht umzusetzen ist und zudem auch noch ein wenig Action bietet. Außerdem haben einer der beiden Kommilitonen und ich in einem noch weiter zurückliegenden Semester aus "langer Weile" in Director eine simple Version von Asteroids erstellt. Wer Director kennt, der weiß mit welchen Problemen man da zu kämpfen hat. ;)

Nun gut, nun zu der Planung. Der erste Schritt war erst einmal ein Grobkonzept zu erstellen, welches zusammenfasst was soll erreicht werden und wie das umgesetzt werden kann. Dabei mussten die Vorgaben mit einbezogen werden, d.h. die Nutzung von Java, der sinnvolle Einsatz von diversen Design Pattern und die Beschränkung auf 2D, wobei 3D später ohne große Änderung möglich sein soll. Als Modeling-Tool stand uns Borland Together zur Verfügung. Während dieser Zeit habe ich dieses Programm selbst lieben und Java hassen gelernt.

Nach dieser Phase wurde begonnen ein grobes Klassendiagramm zu erzeugen, welches nach und nach erweitert und verfeinert wurde. Bei dem Klassendesign wurde versucht, dem Anspruch der Professoren gerecht zu werden und diverse Design Pattern zu berücksichtigen. So sind neben den Singletons, diverse Factory-, Clone-Pattern, etc. zu finden. Nebenbei begann dann aus zwei Gründen auch schon die eigentliche Implementierung des Codes. Erstens konnte man so schneller Probleme beim Klassendesign feststellen und zweitens steigt die Motivation, wenn man nebenbei schon ein wenig zu sehen bekommt. Des Weiteren wurden dann noch Sequenz- und Use-Case-Diagramme erstellt, wobei gerade ersteres so umfangreich ist, dass es keinen Sinn macht dieses hier vorzustellen. Zuletzt haben wir dann auch auf die Funktionalität von Together zurückgegriffen, aus dem vorhandenen Code ein entsprechendes Sequenzdiagramm zu erzeugen.

Abschließend vielleicht noch ein paar Informationen zum eigentlichen Spiel.

Das Spiel ist dank Java komplett plattformunabhängig und auf zahlreichen Systemen getestet worden (diverse Linux-Distributionen, FreeBSD und selbst auf MacOS X läuft es, wenn auch nur mit 5 FPS). Des Weiteren bietet es eine simple aber doch recht witzige Physik, welche es erlaubt, mit Asteroiden zu kollidieren, sie als Waffen gegen UFOs zu benutzen, etc. Außerdem wurde großer Wert auf größtmögliche Flexibilität gelegt, was durch sehr viele INI-Files realisiert wurde, welche anfangs vielleicht ein wenig verwirren können. Über diese kann beispielsweise die Masse der Objekte oder die Stärke eines Schusses festgelegt werden.

Bedingt durch gewisse Einschränkungen bei Java wurden die Animationen der Grafiken in einen extra Thread gepackt, so dass sie unabhängig davon laufen. Dennoch kann es gelegentlich zu Aussetzern der Animation kommen, wobei die Herkunft wohl in den Tiefen von Java zu suchen ist. Ein weiteres Problem stellt die JavaAPI 1.4 da, welche das Zurücksetzen des Soundsstreams nicht mehr erlaubt und es dadurch zu Aussetzen kommen kann, sobald die Musik beendet ist. Dieses betrifft jedoch nur die UFO-Version.

Momentan gibt es zwei Versionen, zum einen die Version, welche abgegeben wurde und zum anderen eine Version, welche einer der beiden Kommilitonen noch um ein optisches Schild und ein UFO ergänzt hat.

Nun noch einmal alle Downloads im Überblick:



PS: Alle Arbeiten wurden gerecht zu genau 33.3% auf alle Team-Mitglieder verteilt. ;)

PPS: Viel Spaß, auch wenn es sich nur um einen Prototyp handelt und bei Fragen einfach fragen. :)






Von Tommi12 am 10.01.2005, 18:21:46 Uhr
hi,

sieht sehr interessant aus. habs probegespielt und macht eigentlich schon fun wie das original halt^^

Von GreveN am 10.01.2005, 18:51:21 Uhr
Na is doch ganz nett geworden... ;)
Die Drehung von dem Schiff find ich nocht nicht ideal...sollte imho stufenlos gehen, so fühlt es sich etwas merkwürdig an... imho

Von Mayo am 10.01.2005, 19:03:42 Uhr
hab ich nun auch mal kurz reingeschnuppert. Ich finde, das Spiel ist gut gelungen, und für Java-Verhältnisse auch noch ziehmlich flott zu spielen :-) Und brachte auch Laune, mal wieder nach lange Zeit, einen Asteroids-Klon zu spielen... Bloss die Aussetzer störten etwas.

Von Eisflamme am 10.01.2005, 20:01:11 Uhr
Hi, das gefällt mir dcoh sehr gut, die Grafik ist auch wunderbar gelungen.

Aaquos Fueris

Von Seraph am 10.01.2005, 20:23:32 Uhr
Danke, ich gebe es weiter. :)

@Drehung: Ich vermute Du (GreveN) hast die Director-Version gespielt, oder? Das ist eine der "Einschränkungen" von Director, viel besser ließ es sich damit nicht machen als die Stufen der Drehung so groß zu halten. Bei der Java-Version hingegen ist sie jedoch fließend.

@Aussetzer: Wer Probleme mit den Aussetzern hat, sollte die Version ohne UFO spielen.

Nachtrag: Hat schon jemand den Cheat gefunden? :D

Von Punika am 11.01.2005, 15:43:53 Uhr
Ich hab da noch eine Frage. Hab das Spiel noch nicht getestet, aber benutzt du nur Java? Also auch für den Grafikoutput die Java Api. Wäre cool wenn du mal ein paar Erfahrungen darüber schreiben könntest.

Hab auch vor in Zukunft bißchen mit Java zu spielen, ich würde mir aber für den device teil (sound, grafik, input) mir eine kleine Api schreiben und das in eine Dll auslagern. Der Nachteil nicht direkt Platformunabhängig, aber das kann man auch noch lösen.

punika

Von Seraph am 11.01.2005, 22:07:22 Uhr
Ja, es wird für alles ausschließlich die Java-API benutzt. Das Prinzip ist ähnlich der von den Grafik-APIs, d.h. man bestimmt über Vektoren die Position und Rotation, "packt" das in eine Matrix und übergibt diese dem RenderTarget.

Die Renderfunktion vom "RenderableObject":

Code:
public void Render()
    {
        m_mTransform.translate(m_vPosition.x, m_vPosition.y);
        m_mTransform.rotate(m_vRotation.x, m_vRotation.y, m_vRotation.z);
        ms_gRenderTarget.setTransform(m_mTransform);

        m_pSprite.Render(m_iSpriteFrameOffset, m_bSpriteReverse);

        m_mTransform.setToIdentity();
        ms_gRenderTarget.setTransform(m_mTransform);
    }


Für die Vektoren haben wir eine eigene Klasse benutzt, für die Matrix die "AffineTransform", welche unter "java.awt.geom.AffineTransform" zu finden ist.

Wenn Du weitere Fragen hast, musst Du etwas konkreter werden. :)

Von Lord Delvin am 12.01.2005, 16:41:26 Uhr
Das Projekt an sich ist relatif gut geworden, für Java auf alle Fälle:)
Was ich aber etwas merkwürdig find, ist dass es trotz angeblicher 60 Fps ziemlich ruckelig ist...außerdem finde ich selbst die "Reibung" seltsam, da das Raumschiff ja zum stehen kommen kann, ohne das man es selbst anhält.

Von Seraph am 13.01.2005, 00:33:16 Uhr
@Ruckeln: Das Verhalten ist leider von Rechner zu Rechner unterschiedlich, bei einigen kann es daran liegen, dass sich der Mauszeiger außerhalb des Fensters befindet, bei anderen ist es genau andersrum, wieder andere haben Probleme mit der einer bestimmten Java-Version, etc. Sorry, aber das ist Java. ;)

@Reibung: Stell Dir mal vor, das Raumschiff würde nicht von allein langsamer werden (müsste sich über die INI-Files einstellen lassen), dann wäre es u.a. nahezu unmöglich das Raumschiff anzuhalten und die Steuerung wäre allgemein wesentlich schwieriger. Es ist wie mit der Physik in anderen Spielen. Es geht nicht darum die reale Physik nachzubauen, es soll lediglich ein Kompromiss zwischen realer Physik und Spielspaß gefunden werden. :)

Von Marre am 19.01.2005, 15:43:09 Uhr
Woher hast du die schöne Textur der Erde und darf man die klauen?

Marre

Von Seraph am 19.01.2005, 20:23:33 Uhr
Der Hintergrund ist selbst "gebaut". Die Erde stammt von der NASA oder ESA und ist noch ein wenig überarbeitet worden. Die Original-Files sind leider nicht mehr vorhanden, sonst hätten wir sie Dir geben können.