(21.07.2013)Truncatus schrieb: Was ich also am Überlegen bin ist, wie man nun Figuren erstellt, in die Datenbank kloppt, aus der Datenbank bekommt, um sie zu benutzen. Dann, wie man die Figuren auf das Canvas-Spielbrett bekommt, wie man die BP abfragen und demnach die Laufweite erfassen kann, wie man die Daten zweier Figuren ins KS bekommt, ect. Also Schritt für Schritt. Morgen stelle ich nochmal meine aktuellen Skripte hoch und würde dann mal gerne wissen, wer denn bei was weiß, was zu tun ist. Für Ideen, Ergänzungen, ect bin ich gerne offen, nur möchte ich endlich was vorwärts bringen. 2 Wochen sind schon rum und irgendwie steht nur etwas irgendwie, was nichts ist, wie ich finde. Ich möchte endlich mit der Hilfe von Partnern dieses Spiel endlich erstellen.
In der hinsicht musst du definitiv mit mehreren datenbanken arbeiten. Das hier wird ein relativ langer post, also obacht.
Für die Figuren würde ich eine einfache tabelle "Figuren" anlegen. In dieser erhält jede Figur eine einzigartige ID, den Namen, alle grundstats (HP, BP, Atk, Def, etc.) und eine Sprite-ID. Dies wird später relevant wenn du deine figuren voneinander unterscheiden möchtest. Wenn nicht jede figur gleich gewichtet werden soll, brauchst du noch einen Wert, der dann von der maximal möglichen truppenstärke abgerechnet werden soll (sagen wir 1 für fußsoldaten, 2 für berittene und 3 für drachenreiter).
Um die Figuren auf das Spielbrett zu bekommen, musst du innerhalb des Programms eine Klasse für die Figuren anlegen. Diese Klasse enthält Variablen um die werte der Figurentabelle zu übertragen, also ID, Name, Stats, Wert, Sprite-ID, etc. Dazu müssen noch 2 zusätzliche Werte hinzugefügt werden, nämlich die koordinaten x und y, um die Figur auf dem Feld navigieren zu können und zusätzlich ein Wert für das Team. Wird eine Figur gewählt, musst du ein Objekt von dieser Klasse erzeugen und die Werte in die Variablen übertragen. Dann wird der Truppenwert der Figur von der Gesamtstärke abgerechnet bis dieser wert auf 0 ist, dann kann mit der plazierung begonnen werden.
Allerdings müssen wir vorher einen blick auf den mapgenerator werfen. Diser erzeugt mit 2 Zufallszahlen zwischen 10 und 40 die Spielfläche. Die Generierung der Truppenstärke muss auf eine fläche von einem minimum von 10*10=100 Feldern bis zu einer Fläche von 40*40=1600 Feldern angepasst werden. Jedes Feld erhält eine Koordinate sodass das feld ganz oben links die koordinate 1,1 hat, das rechts daneben die Koordinate 2,1 usw.
Für die Generation der Felder brauchen wir erneut eine Tabelle, die jedem Typ feld eine ID zuweist, Dazu dann ein Name, ein Boolean ob passerbar oder nicht, die Kosten in BP (0 für unpassierbare felder), eine Sprite-ID und gegebenenfalls ein modifikator für den Tarn- oder Schutzwert der Figuren, wenn sie auf diesem feld stehen (das ist allerdings zukunftsmusik. lass diese werte außer acht, bis alles andere funktioniert).
Zu begin würde ich die Generierung des Spielfelds dem zufall überlassen (sodass einfach willkürlich feld-ids für jedes feld generriert und zugewiesen werden). Später müsste ein Algorythmus entworfen werden, der den Generator dazu zwingt, dass jedes passierbare feld an mindestens ein weiteres angrenzen muss, damit auch die Fußsoldaten das Spielfeld frei navigieren können. Erneut wird für die Felder auch wieder eine klasse benötigt, wo die Werte für jedes Feld gespeichert werden können, darüber hinaus wieder die koordinaten x und y und ein wert, der gegenbenenfalls die darauf stehende figur repräsentiert.
Für die Erfassung der Laufweite ist mein bester vorschlag, dass der cursor auf der figur startet und dann mit jeder bewegung des cursors kontrolliert wird, ob die figur diese position erreichen kann, und in "echtzeit" die bp-kosten berechnet wertden. Allerdings sind zuverlässige Algorythmen für pathfinding relativ schwierig und ich kann dazu jetzt zumindenst nichts auf dem ärmel schütteln.
Bein KS muss zunächst für die Figur, die am zug ist gefragt werden, ob eine Figur von anderen Team in reichweite steht. Dazu werden alle felder innerhalb des Radius abgefragt werden, ob eine figur darauf steht und wenn ja, ob sich die zugehörigkeit mit der der aktuellen figur unterscheidet. Trifft das zu, sollen die Koordinaten vorgemerkt werden, sodass dier spieler im Kampfmodus dann nur zwischen diesen koordinaten wechseln. Alternativ kann der Kampfmodus in den bewegungsmodus integriert werden, sodass, wenn der cursor über ein feld mit einer feindlichen Figur gerät, dass das Spiel automatisch eine abfrage macht, ob die spielfigur den feind erreichen kann und bei Erfolg in den Kampfmodus schaltet.
Wenn es zwischen 2 Figuren zum Kampf kommt, müssen nur die werte der beiden Objekte gegeinander verglichen werden. Wenn eine der beiden Figuren schaden erleidet, kann dieser dann einfach innerhalb des objekts von den HP abgezogen werden und sollte diese auf 0 fallen, wird das objekt gelöscht und die Truppenkosten der Gesamtstärke des Besitzers wieder angerechnet. Wenn diese zurück auf den Ausgangswert fällt, weiß das Spiel dass dieser keine Figuren mehr besitzt und verloren hat.