Projekt Hex-Change
Hex-Change ist ein Spiel, welches Ich(H.A.S.E.) Anfang 2006 innerhalb von einigen Monaten geschrieben habe, und welches für mich der Einstieg in die Welt von OpenGL war. Es handelt sich hier um eine Art Brettspiel, bei welchen die beiden Spieler um die meisten Spielfelder konkurieren.
Inhaltsverzeichnis
Spielprinzip
Es gibt 2 Spieler, die durch blau und rot gefärbte Steine gegeneinander auf einem Spielfeld, bestehend aus vielen sechsseitigen Feldern, antreten. In diesem Zugbasierendem Spiel muss man versuchen mit den eigenen Steinen so viele Felder wie möglich zu besetzen. Der Spieler hat dazu 2 verschiedene Möglichkeiten seine Steine zu bewegen. Entweder er kann einen neuen Stein direkt neben einem eigenen Stein auf das Feld platzieren, oder aber er kann einen bereits auf dem Feld befindlichen Stein um 2 Felder verschieben (springen). In jedem Fall werden alle gegnerischen Steine die an die neue Position/den neuen Stein angrenzen eingefärbt. Sieger ist, wer am Ende (alle Felder belegt) mehr Felder besitzt.
Entwicklung
Was mir eigentlich bloß wichtig erscheint ist, dass ich mit relativ wenig Wissen an die ganze Geschichte herangegangen bin. OpenGL erschien mir unbegreiflich, allerdings ermöglichten mir die Tutorials hier auf DGL, dass ich relativ leicht auf die Funktionalität von OpenGL zugreifen kann ohne all zuviel vom Hintergrund zu wissen. Es ist ein erster Kontakt mit dieser API und trotzdem kann man mit so einem halbgaren Wissen ein einigermaßen unterhaltsames und grafisch ansprechendes Spiel programmieren. Ich persönlich habe nichts dagegen mit wenigem Wissen zu improvisieren, denn dadurch versteht man umso besser wieso das selbe Problem nun durch anderen Code in einem anderen Programm gelöst wurde, oder warum es nun gerade diese eine Funktion gibt, die einem vorher so sinnlos und unverständlich erschien. So habe ich mir zum Beispiel eine eigene Funktion geschrieben welche mir Text darstellt, der aus Buchstaben besteht welche aus einer eigenen Textur stammen, obwohl es solche Sachen schon längst gibt.
Vielleicht ist es noch nützlich hier zu schreiben wie ich an das Projekt herangegangen bin: Zunächst habe ich durch diverse Experimente(Minispiele) mit OpenGL mir ein gewisses Grundwissen angeeignet, mit welchen ich mir relativ sicher war, dass ich so ein Spiel schaffen könnte. Als zweiten Schritt habe ich mir ein klares Bild von meinem Ziel gemacht. Dazu habe ich Photoshop genutzt um schon genau die grafische Richtung zu wissen. Das gute daran war, dass ich gleich alle Grafiken für das richtige Spiel nehmen konnte. Darüber hinaus habe ich mir genau Gedanken darüber gemacht welche Funktionalität sinnvoll, bzw. welche am wichtigsten ist. Somit hatte ich schon einen gewissen Plan wie ich an das Projekt herangehe.
Der erste Schritt in der aktiven Programmierphase war, dass ich das Spielfeld richtig darstellen kann, und auch die Selektion der einzelnen Felder mit der Maus funktioniert. Daraufhin war es schnell möglich die Spielmechanik darauf zu setzen, sodass ich schon meine ersten Runden gegen mich selber spielen konnte(War das ein Spaß...). Die nächste Priorität war dann die KI, welche im Grunde bloß den Zug heraussucht welcher direkt die meisten Punkte macht. Auch wenn das wie ein banaler Gegner klingt, so hat er sich doch einige Male als erfolgreich erwiesen. Zum Schluss habe ich mich dann nochmal um die Grafik gekümmert, und die Labels durch OpenGL Textanzeige ausgetauscht. Dazu kommen noch die simplen Soundeffekte welche auch recht schnell eingebunden waren.
Dieses Projekt war also mit grob gesetzten Prioritäten und einer klaren grafischen Vorgabe recht erfolgreich zu bewältigen. Würde ich dieses Programm jetzt aber erweitern wollen, so hätte ich meine große Not, da der Code recht zusammengekleistert und nicht objektorientiert ist.
Wer also was zu lachen sucht, soll sich gerne den beim Spiel beigelegten Sourcecode anschauen.
Features
Das Endergebnis enthält folgende Features:
- Die Möglichkeit gegen einen Freund oder KI Gegner zu spielen
- einen Leveleditor
- Textanzeige
- diverse kleine Soundeffekte
- Grafische Effekte(Ausblenden/Einblenden)
Im Download liegt außerdem bei:
- eine ausführliche Spielanleitung
- Sourcecode für Editor und Spiel
Ausblick
Da ich aus diesem Projekt viel Motivation gesammelt habe, ist OpenGL weiterhin eine API mit der ich mich intensiv beschäftigen werde. So nutze ich OpenGL zur Zeit für ein eigenes Malprogramm(PaintCraft)