DGL
https://delphigl.com/forum/

Heiliger Damm 1.72
https://delphigl.com/forum/viewtopic.php?f=13&t=6637
Seite 1 von 1

Autor:  GTA-Place [ So Jun 03, 2007 19:53 ]
Betreff des Beitrags:  Heiliger Damm 1.72

Sie suchen das Spiel "Heiliger Damm"?
Hier klicken: http://www.heiliger-damm.de






28.05.2007 und 29.05.2007
Es war mal wieder einer dieser langweiligen Ferientage und die doofen Medien, die mir zu einer Schnappsidee verhalfen. Ja, da wird seit Wochen über das bevorstehende G8-Treffen diskutiert und irgendwann machts in meinem Gehirn klick :idea: und ich meine, ich müsste ein Spiel programmieren. Und dann mein ich das natürlich nicht nur - ich machs auch (so bekommt man wenigstens die Ferientage rum). Irgendwann dann morgens um 11 Uhr habe ich angefangen und dann so gegen abends um 8 Uhr war ich fertig. Ich hatte mein allererstes Spiel fertig gestellt. Um 20:38 Uhr veröffentlichte ich dann in der Entwickler-Ecke die Version 1.0.

Das Spiel
Wie man nun vermuten kann, hat das Spiel etwas mit dem G8-Treffen zu tun. Um genauer zu sein, mit Heiligendamm und den G8-Gegnern. Ihr dürft Herr Schäuble spielen und müsst die - bisher noch farblosen ;-) - G8-Gegner davon abhalten, den Heiligen Damm anzugreifen. Da ein Bild erstmal mehr als 1000 Worte sagen:

Bild

In der Mitte ist das Ziel der G8-Gegner: Der Heilige Damm, eine grüne Oase, mitten in der Wüste.

Oben rechts sehen wir ein paar Informationen zu unserem aktuellen Status und zum aktuellen Level. Bis auf die Angabe "Zäune: 3 von 10", sollte eigentlich alles selbsterklärend sein. Mit dem Zaun hat es folgendes auf sich: Die Aufgabe des Spielers ist es, mit der Maus einen Zaun zu ziehen (auf dem Screenshot sind das die schwarzen Striche). Diese Zäune, bzw. Striche, halten immer genau einen Gegner auf und verschwinden dann. Für diesen Gegner gibt es dann eine bestimme Anzahl an Punkten. Die dopellte Anzahl an Punkten gibt es dann, wenn man einen Kreis um den Gegner zeichnet. Damit man nicht anfängt 100 Zäune um die Mitte herum zu ziehen, ist die Anzahl der gleichzeitig existierenden Zäune beschränkt (von Level zu Level unterschiedlich). Auch heben Zäune nicht ewig und verschwinden nach ein paar Sekunden.

Die weißen Kreise sind die Gegner, sie bewegen sich mit konstanter Geschwindigkeit in Richtung Damm. In jedem Level steigt die Anzahl der Gegner und die Dauer, bis ein neuer Gegner erscheint, verringert sich. Sobald ein Gegner das Ziel erreicht, legt er ein Feuer (Bild, siehe unten). Es dürfen maximal 10 Gegner das Ziel erreichen.

Bild

Unten links sind die Shortcuts aufgelistet. In Version 1.0 gab es noch keine Shortcuts. Die Beschreibung dazu folgt später.

Der blaue Kreis mit der Lupe, ist einer von 2 PickUps. Was diese genau bewirken, erkläre ich auch weiter unten.

[Version 1.0] Die Technik
In Version 1.0 kam eine Paintbox, mehrere TBitmaps und Timer und Shapes zum Einsatz. Dass diese Methode nicht gerade sehr effizient ist, sollte sich später zeugen. Die Linien hatten ihr eigenes Bitmap und wurden zuerst im OnMouseDown-, OnMouseMove- und OnMouseUp-Ereignis in ein Array eingetragen und anschließend auf dieses Bitmap gezeichnet. Ich bin mir nicht ganz sicher, ob diese Methode schon in Version 1.0 verwendet wurde, oder ob die Linien direkt auf die Paintbox gezeichnet wurden. Ich vermute aber, ich habe auch da schon die Bitmaps benutzt. Die Gegner waren einfache Shapes, die entsprechend in Richtung Mittelpunkt bewegt wurden. Sobald ein Gegner eine schwarze Linie erreicht hat, wurde geprüft, welche Linie das war und diese und der Gegner entfernt.

Ein kleines Experiment war die Möglichkeit, die Gegner einzukreisen. Dies habe ich mit der Komponente JvMouseGesture gelöst. Diese liefert einen String mit folgenden Werten zurück: U(p), D(own), L(eft), R(ight), 1, 3, 7, 9. Die Zahlen stehen (siehe Numpad) für die diagonalen Richtungen. Ein Kreis ist dann gegeben, wenn jeder dieser Werte ein- oder mehrmals vorkommt. Dass diese Technik so gut klappt, hätte ich nicht gedacht.


30.05.2007
Das Spiel hatte in der Entwickler Ecke bereits einiges an Kritik bekommen: Die Idee fanden ziemlich alle gut - die Performance aber grottenschlecht. Dabei gab es Unterschiede: Bei einigen lief das Spiel schon in Level 1 nicht, bei anderen bis Level x ruckelfrei. Das hing nicht von der Aktualität des Computers ab. Außerdem traten ab und zu Zugriffsverletzungen auf. Dass diese durch die Zäune ausgelöst wurden, fand ich später heraus.

Version 1.02
Ich erstellte für die Gegner ein eigenes Bitmap, auf welches mit Canvas die Gegner-Kreise gezeichnet wurden. Die Performance verfünffachte sich dadurch, da keine Shapes mehr bewegt werden musste. Außerdem behob ich einige Bugs, die unter anderem mit den Zäunen zu tun hatten.

Version 1.07
Nachdem der Vorschlag gemacht wurde, die Zäune sollen nach ein paar Sekunden verschwinden und die Anzahl solle begrenzt sein, habe ich dies eingebaut. Außerdem kamen 3 Shortcuts hinzu: P für Pause (nun war es möglich, das Spiel zu pausieren); N für ein neues Spiel (so konnte auch nach einem Game Over wieder gespielt werden); Q für Quit (damit konnte das Spiel schneller beendet werden); Am Balancing wurde auch ein wenig gearbeitet, wodurch das ganze Spiel etwas swecher wurde und schließlich hatte ich noch ein Programm-Icon gezeichnet, um das D7-Icon zu ersetzen.

Version 1.09
Einer der Spieler schlug aus beruflichen Gründen vor, eine Cheftast einzuführen, die das Spiel im Tray verschwinden lässt. 1 Stunde später, hatte ich die Idee umgesetzt. Mit der B-Taste war es nun möglich, das Spiel kurzzeitig zu verstecken. Das Tray-Icon wurde mit dem Hint "Textverarbeitung" belegt.

Version 1.12
Da das Spiel doch recht eintönig war, baute ich 2 PickUps sein: Die Lupe und der Zaun. Diese müssen zum Aktivieren lediglich angeklickt werden.

Bild Bild

Die Lupe sorgt dafür, dass sich die Geschwindigkeit der Gegner für 3 Sekunden halbiert. Der Zaun lässt den nächsten Zaun, den man zieht, rot werden. Dieser hat die Eigenschaft, dass er nicht nach einiger Zeit verschwindet und zwei Gegner abhalten kann.

Hinzu kam hier noch ein Debug-Modus, der per "+Debug"-Parameter gestartet werden kann. Er legt eine Debug.txt im Programmverzeichnis an, in dem alle Ereignise protokolliert sind. Dies vereinfacht die Fehlersuche ungemein.


01.06.2007
Zur Performance kam bis dato keine Rückmeldung mehr. Aber ein anderes Wunder geschah: Es hatte tatsächlich einer Level 10 bezwungen - und gleich bis Level 21 durchgemacht, wo er schließlich von ZVen gestoppt wurde. Warum ist das nun so verwunderlich? Ich hatte lediglich 10 Level eingebaut, also sollte eigentlich bereits in Level 11 eine ZV erscheinen - es kam aber keine. Deshalb hatte ich {R+} (Bereichsüberprüfung) hinzugefügt und das Spiel bis Level 20 ausgebaut. Derjenige hatte es übrigens von Level 11 bis 21 gar nicht mehr schwer: Es kamen nur noch 10 Gegner pro Level und für die gab es massig Punkte.

Um 19:47 Uhr wurde das Spiel zudem noch in der Delphi-Praxis veröffentlicht. Auch hier folgte durchweg gute Kritik ("macht süchtig" ;-)). Doch hier gab es dann einige mit Performance-Problemenen, vor allem die Linux- + Wine-Nutzer. Ich plante eine OpenGL-Umsetzung.

Version 1.17
Wie bereits erwähnt, hatte ich das Spiel nun bis Level 20 ausgebaut. Ich bin mir ziemlich sicher, dass man es nur durch cheaten über Level 20 schafft, aber vielleicht täusche ich mich ja auch :D. Da die Geschwindigkeit der Gegner CPU-Abhängig war, musste ich auf Jedenfall noch Timebased Movement einbauen, was in dieser Version dann zum Einsatz kam. Als weiteres Feature kam die Screenshot-Funktion hinzu, die das aktuelle Bild im Programmverzeichnis abspeichert. Aufgerufen wurde diese Funktion mit der S-Taste - wobei bei den Shortcuts noch hinzukam, dass Groß- und Kleinbuchstaben gehen (falls Capslock aktiv ist).

Version 1.18
Diese Version fixte die Pause-Funktion, die durch das Timebased Movement, nicht mehr funktionierte.

Version 1.19
Es folgte ein Online-Highscore, damit man einen Vergleich zwischen den Spielern hat und natürlich auch sieht, wie viele Spieler aktiv sind. Dazu wurde die H-Taste als Shortcut eingebaut, die die Highscore-Liste mit den Plätzen 1 - 10 anzeigt.


02.06.2007
Ich verbrachte den ganzen Tag mit der OpenGL-Umsetzung (DelphiGL), was mir nicht wenig Nerven raubte ;-). Die Linien werden weiterhin auf ein TBitmap gezeichnet, aber direkt aus dem Array auf die Zeichenfläche. Durch das Bitmap kann ich leichter prüfen, ob ein Gegner den Zaune erreicht hat.

Version 1.20
Das war also die 1. Version mit OpenGL. Die löste nicht wie gehofft alle Problem. Einigen hatten nun wirklich mehr FPS, bei anderen kam die Meldung, dass es keine POT-Texturen sind. Komischerweise sanken die FPS aber nach ein paar Level extrem, was ich mir einfach mit der erhöhten Anzahl an Gegnern erklärte.

Version 1.21
Ich hatte alle Texturen durch POT-Texturen ersetzt und die Folge war, dass manche gar kein Bild mehr angezeigt bekommen haben (sondern ein schwarzes oder weißes Bild). Was die Ursache war, war mir zu dem Zeitpunkt nicht klar.


03.06.2007
Schon am Morgen gabs einen Schreck: Der Hauptserver war down. Die Zeit nutzte ich, um nach den bestehenden Bugs zu suchen. Ich fand den Bug dann auch tatsächlich. Ich habe eine FPS-Begrenzung eingebaut, um die CPU-Belastung gering zu halten. Bei einer kleinen Änderung, hatte ich aber aus Versehen ein Minus mit einem Plus vertauscht. Dies hatte zur Folge, dass wenn die FPS unter der FPS-Begrenzung lagen, der Idle-Handler nicht wieder häufiger aufgerufen wurde (um die FPS zu steigern), sondern noch seltener. Deshalb war nach einer Weile die FPS bei fast 0. Anmerkung: Ich hatte mich gewundert, dass, wenn ich direkt in Level 7 startete, es nicht geruckelt hat, aber wenn ich bei Level 1 begann und bis Level 7 spiele, dann ruckelte es.

Version 1.22
Hier hatte ich lediglich den Performance-Bug behoben und nun lief es endlich (zumindest auf allen Windows-System und den meisten Linux-Systemen) ruckelfrei durch.

Version 1.24
2 Bugs, die mit den Zäunen zu tun hatten, wurden behoben: Der 1. Bug war ein Bereichsprüfungs-Fehler und der 2. Bug lies den roten Spezial-Zaun wandern (es wanderte eigentlich nur die rote Farbe von Zaun zu Zaun). Auf Arch Linux und Wine trat dann noch ein Fehler auf, der den Rendercontext auf knapp 200x200 Pixel beschränkt lies und die Texturen verhältnismäßig verkleinerte.

Version 1.25
Das Problem, dass manche nur weiß oder schwarz sahen, wurde behoben. Es lag an glBitmap2D.Target := Rectancle_..._Ext, was bei den POT-Texturen nicht nötig war. Es sorgte möglicherweiße dafür, dass die Texturen bei manchen außerhalb des Bildes lagen. Auch der Linux-Bug war behoben. Das Problem war etwas absurd: Wine erstellt das Fenster vermutlich erst in einer Größe von etwa 200x200 und zieht es danach auf 800x600. Der Rendercontext blieb aber (weil ich nicht auf OnResize reagiert habe) bei 200x000.



Soweit so gut. Weitere Infos und Updates folgen. Fragen beantworte ich gerne :).

- Internetseite zu Heiliger Damm
- HD.zip (716 kb)
- HD.rar (612 kb)

Autor:  GTA-Place [ Mi Jun 27, 2007 21:11 ]
Betreff des Beitrags: 

04.06.2007
An diesem Tag machte ich eigentlich nicht viel, außer eine neue Version. Andere hingegen hatten schonmal probiert einen Bot zu basteln, der für sie spielt. Sie haben aber nicht damit gerechnet, dass nach Level 20 Schluss ist - mit ner Fehlermeldung ;-).

Version 1.30
Hat ein Spieler zuerst die Pause-Taste und dann die Highscore-Taste gedrückt, lief das Spiel weiter. Dies hab ich behoben und gleichzeitig noch eine Funktion eingebaut, die automatisch die Pause-Funktion aktiviert, sobald das Spiel den Fokus verliert, so dass hektische Spieler nicht verlieren, nur weil sie aus dem Bild hinausgeschossen sind. Die Shortcuts wurden in ein extra Fenster verlegt (T-Taste) um die Sicht auf das Spielfeld wieder zu säubern. In dieser Version schlich sich aber ein Bug ein: Nach einlegen einer Pause, stürmten plötzlich umso mehr Gegner auf den Damm zu.


05.06.2007
Endlich hatte ich die Projekt-Website fertiggestellt, auf der man die Top 100 Spieler bestaunen kann und mit Hilfe eines Support-Ticket-Systems sich direkt an mich wenden kann. Eine neue Version gab es allerdings nicht.


07.06.2007
Es hatten doch tatsächlich einige nach Veröffentlichung der Version 1.39 geschafft, über 100.000 Punkte zu bekommen. Wie war das geschehen? Auf Grund von Änderungen an der Schwierigkeitsstufe und neuen Features, wurde das ganze Spiel teilweise zu leicht. Dies musste behoben werden ;-) .

Version 1.39
Eine Version, über die ich stolz bin, denn seit dieser Version gibt es keine langweiligen weißen Punkte mehr, sondern gut aussehende kleine Männchen. Außerdem kam ein Hauptmenü und eine Leiste für diverse Funkmeldungen hinzu. Auch die PickUps bekamen ein neues Bild. Die Qualität der Zäune verbesserte sich in Level 5, 7, 11, 13 und 15 und in Level 9 konnte ein Teil des Feuers gelöscht werden (F-Taste). Kein Wunder, dass das Spiel zu leicht wurde.

Bild

Bild Bild

Version 1.42
Der oben erwähnte Pause-Bug wurde behoben, das Menü per Maus bedienbar und das ganze Spiel wieder eine Nummer schwerer gemacht.

Version 1.43
Nochmal schwerer...


08.06.2007
Und noch immer war das Spiel zu leicht, deshalb...

Version 1.46
...nochmal schwerer gemacht (ab Level 10). Außerdem einen Bug behoben, der das Klicken auf die Items erschwerte und einen Bug behoben, der dazu führte, dass sich die Wirkungsdauer der Zeitlupe nach Benutzung der Pause wieder auf den Startwert zurückstellte.

Version 1.48
Und nochmal schwerer gemacht :-P. Dazu noch einen weiteren Bug in der Pause-Funktion behoben.

Version 1.53
Ratet mal: Ja, wieder ne Nummer schwerer, in dem ich die Zahl der Zäune weiter begrenzt habe. Das dies nun endlich die richtige Schwierigkeitsstufe war, sollte ich später zeigen. Auf Wunsch baute ich einen Vollbildmodus ein, so dass das Spielen leichter wird, weil man nicht abgelenkt wird und auch nicht aus dem Bild rutschen kann. Der Highscore lieferte gleich noch eine Meldung, falls die Version veraltet war und dazu stand die Versionsnummer noch im Hauptmenü.


09.06.2007
G8 war vorbei und ich stellte meinen Spielern eine elementare Frage: Soll das Spiel weiterhin "Heiliger Damm" heißen? Die Antwort war "ja". Danach legte ich erstmal eine längere Programmier-Pause ein.


13.06.2007
An diesem Tag klingelte das Telefon und am anderen Ende war eine Redakteurin unserer lokalen Tageszeitung. Ich hatte dieser Zeitung ein paar Tage vorher mein Spiel zugesandt und nun wollte man über mich und mein Spiel einen Artikel schreiben. Ihr könnt euch denken, wie happy ich war :) .


16.06.2007
Die an diesem Tag veröffentlichte Version war eine Version, die wirklich "öffentlich" gemacht werden konnte, sprich für Presse und Co. Dazu habe ich mir noch eine ordentliche *.de-Domain gekauft: http://www.heiliger-damm.de

Version 1.63
Folgende Bugs wurden behoben: Es kamen nicht mehr die meisten Gegner von unten; Bug mit der Pause und Zeitlupe behoben; Grafikfehler im HUD behoben; Außerdem hab ich die Adresse zur Projekt-Seite im Hauptmenü angegeben, Highscore-Pfad angepasst, einen Updater eingebaut, der das Spiel auf den neusten Stand bringen kann, eine bessere Fehlermeldung beim Highscore (falls keine Internetverbindung) und dazu noch mehrere Verbindungs-Versuche bevor die Fehlermeldung erscheint und damit die Feuerlöschfunktion mehr in den Vordergrund tritt, einen größeren Hinweis eingebaut.

Version 1.64
Direkt danach veröffentlicht, nach dem ein Bug eine Endlosschleife auslöste, die die Datenbank überflutete.


20.06.2007
http://www.szon.de/lokales/...en/200706200101.html - Kein weiterer Kommentar ;-).


21.06.2007
Der erste, der es bis in Level 19 geschafft hatte. Herzlichen Glückwunsch!


27.06.2007
Da es doch nun schon ein paar nahe an die 20er-Grenze (Grenze zu Level 21 ;-) ) geschafft haben, habe ich das Spiel weiter ausgebaut.

Version 1.69
Weitere 10 Level eingebaut, die nun wirklich keiner schaffen sollte :mrgreen: (+ eine GameOver-Meldung, falls es doch jemand schafft). Die Highscore-Liste ist nun kein extra Fenster mehr, sondern im Menü eingebettet und die Verbindung dazu zum Netz wurde in einen Thread ausgelagert. Au0erdem eine kleine Änderung am Cheating-Schutz-System.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/