[Projekt] ISO-Browsergame "cad2d"

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

[Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Hi,
in den vergangenen Jahren hab ich immer wieder mal hier im Forum vorbei geschaut. Als ich gestern den Thread von Artificial Mind gesehn habe, wie realistisch er versucht eine Welt mit Wetter usw. zu Simulieren musste ich darauf antworten ;) Er meinte ich soll doch mein Projekt auch mal vorstellen... ich glaub es ist so 8-10 Jahre her, dass ich hier im Forum mal aktiv war xD Jetzt hab ich noch "Gemeinsam motivieren" von Zudomon gelesen und so schreib ich nun^^

Vor 6-8 Jahren haben 3 Freunde und ich ein Browsergame mit PHP & MySQL entwickelt. Wir waren sogar relativ erfolgreich und hatten ca. 2000 registrierte Benutzer. Unser spiel hieß damals Command and Destroy und war ein klassisches Browsergame mit viel Tabellen, hatte allerdings schon eine grafische Karte. Wir waren allerdings damals zu Jung um unser Projekt richtig zu betreiben und es fehlte bei uns allen an der nötigen Motivation, troz des positiven Feedbacks unserer Spieler.

Mir schwebt schon lange vor, cad als richtiges Echtzeitstrategiespiel wieder aufleben zu lassen. Dank immer leistungsfähigerer Hardware und HTML5 elemente wie canvas scheint das ganze inzwischen machbar zu sein :) So entwickel ich seit knapp 4 Monaten eine neuauflage von Command and Destroy "cad2d", wobei das nur der Arbeitsname ist, da Nintendo vor ein paar Jahren ein gleichnamiges Spiel für den Gameboy Advance herrausgebracht hat und ich da keine Schwierigkeiten bekommen möchte.

So, genug erzählt, hier erstmal ein Bild vom aktuellen Entwicklungsstand:
Bild

Die Grafiken sind alle nur Testgrafiken ;) Auf dem Radar werden 100x100 Tiles gezeichnet, die Map in der DB ist momentan 200x200 Tiles groß. Es können Objekte plaziert werden, Bäume beispielsweise wachsen auch schon, nachdem sie auf der Map plaziert wurden. Dies funktioniert auch für beliebige andere Objekte, ist nur eine Frage der nötigen Datenbankeinträge^^
Mit der linken Maustaste kann man Einheiten markieren und "herumbeamen" (laufen können sie noch nicht ;) ) und mit der rechten Maustaste den Fokus wieder entfernen.

Arbeiten tu ich mit jQuery (nutz ich eigentlich nur für die Ajax sachen) Java-Script und PHP. Als Datenbank kommt MySQL zum einsatz.

Momentan programmier ich die Bewegung der Einheiten, allerdings gibt es noch keine Kollisonsabfragen bei Objekten und übers Wasser können sie auch noch laufen^^ Es wird allerdings der gelaufene Weg schon Tile für Tile berechnet, wobei die Einheiten sich in 8 Richtungen bewegen können. Momentan tendier ich dazu die Einheiten, wenn ein Objekt oder Wasser im Weg ist, einfach stehn zu lassen. Die Implementierung eines A* würde mich denk ich momentan zu sehr aufhalten und frusten, außerdem ist dieser ja sehr rechenintensiev.

Ich bin mir noch nicht im Klaren, in welcher Zeit das ganze eigentlich spielen soll. CaD war near future, man baute eine Basis auf (später auch mehr), baute Rohstoffe ab und versuchte mit möglichst vielen Einheiten seinen Feinden Rohstoffe zu stehlen. Mir schwebt vor, dass nach einem großen Krieg viel Technologie verloren gegangen ist und die Menschen nochmal bei 0 anfangen d.h. Hauptrohstoff Holz, Stein und Nahrung. Im späteren Spielverlauf entdeckt der Spieler immer mehr Rohstoffe (viel soll über Bergbau/Bodenschätze laufen) und durch Kombination der verschiedenen Rohstoffe ergeben sich neue Möglichkeiten... Sand + Schmelze -> Silizium; Grundstoff für Solarzellen (Energie) oder Mikrochips... der Fantasie sind keine Grenzen gesetzt :D

Wenn man erstmal Holzfäller, Steinmetzte und Jäger hat und das ganze auch noch läuft bin ich aber erstmal sehr zufrieden^^

EDIT: Hab das jpg durch ein png getauscht, allerdings besteht scheinbar weiterhin das Problem mit dem Showroom...
Dateianhänge
screenshot1.png
Zuletzt geändert von Chromanoid am 30.09.2011, 02:19, insgesamt 4-mal geändert.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von Chromanoid »

Irgendwie spinnt der Showroom mal wieder. Irgendwas läuft da manchmal schief. Probier vielleicht mal ein anderes Bildformat oder eine andere Kompressionsstufe.

Ein sehr interessantes Projekt! Postapokalypse finde ich als Thema immer gut. Irgendwie erinnert mich deine Vision gerade an KKND2.

Edit: Also der Showroom-Script verkraftet scheinbar nicht Parameter wie sid oder mode in der Bild-URL, wenn das Bild auf ZFX hochgeladen wurde. Habe das mal für dich angepasst. Schreibe das jetzt auch mal in den Showroom-Thread :)
Zuletzt geändert von Chromanoid am 30.09.2011, 02:34, insgesamt 1-mal geändert.
TheBenji
Establishment
Beiträge: 129
Registriert: 07.01.2011, 17:59

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von TheBenji »

Sehr intressantes Projekt, habe selbst mal vor sowas in der Richtung zu machen...also so grob.
Allerdings würde ich dabei auf php verzichten und node verwenden...naja und statt ajax würden dann halt websockets verwendet →(fallback halt ajax, stichwort long polling).
Würde halt dann mehr in die Richtung echtzeit Strategie gehen wie man es vom client kennt...

Ich schätze mal die Bewegung der einheiten werden auf dem server berechnet?!
Also du schickst dem server die koordinaten wo die Einheiten hin sollen und der prüft ob das geht?!
Wenn dann ein Hinderniss kommt bleiben die einheiten stehen - wie wäre es denn jetzt clientseitig den weg zu berechnen um das hinderniss zu überwinden und diese "schritte" dann wieder an den server zu schicken damit dieser die validieren kann??
Damit liegt die rechenlast höchstens beim client und im idealfall kann dieser das über einstellungen auch noch deaktivieren wenn er meint das verbraucht zu viel power ;)
joggel

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von joggel »

Hallo,

sieht echt schön aus :).
Die Implementierung eines A* würde mich denk ich momentan zu sehr aufhalten und frusten, außerdem ist dieser ja sehr rechenintensiev.
Also wenn das mal wieder einen haufen Mist ist was ich erzähle, dann einfach wieder ignorieren^^!

Für die C++-Nutzer gibt es da Micro Pather. Eine Implementation vom A*-Algo. Nützt dir ja leider nichts, ABER nun dachte ich mir, ob es möglich ist, in PHP Funktionen aus DLLs zu benutzen und fand das und noch eine menge mehr über das Thema.
Also das man diese "Micro Pather"-Lib in eine DLL verfrachtet. Das dürfte ja nun nicht so ein Akt sein.
Nebenbei wäre die Performance dann auch etwas besser als wenn man den Algo in PHP implementiert.
Vlt. bringt dir das etwas.
Zuletzt geändert von joggel am 30.09.2011, 12:03, insgesamt 2-mal geändert.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von Artificial Mind »

Hi,

schön, dass du dein Project auch vorstellst :)

Du kannst ja mal gucken, ob du dieses (PHP-)Project http://codezilla.com/projects/a-star/ irgendwie benutzen kannst. Meiner Erfahrung nach ist ein A* auf einem 2D-Feld unglaublich schnell.
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Das ganze soll schon sehr in Richtung Echtzeitstrategie gehen... Ich war und bin ein großer Fan der C&C Serie und erwarte spannend das Relase von End of Nations, bei dem einige ehemalige Westwood Mitarbeiter beteiligt sind... Man muss halt irgendwie das Spagat zwischen Echtzeitstrategie und klassischem Browsergame schaffen... Es kann ja von keinem erwartet werden, dass er 24h / 7 Tage die Woche online ist und seine Basis verteidigt. Daher hab ich mir gedacht, den Schwerpunkt mehr auf den Aufbau zu legen.

Wenn eine Einheit bewegt wird, übergeb ich dem Server Einheit ID und Zielkoordinaten, er errechnet dann den Weg (immer noch ohne Hinderniserkennung). Die Idee das ganze vom Client berechnen zu lassen und den Server nur noch den Pfad zu überprüfen ist echt gut, da hätte ich eigentlich selbst drauf kommen können :lol:
Websockets will ich später auf jedenfall verwenden, nur momentan will ich Ergebnisse sehn und mich nicht mit dem Back-End rumärgern (mit Websockets kenn ich mich momentan überhaupt noch nicht aus, ein Freund will das nötige Wissen aber bei gelegenheit mit mir erarbeiten und mir dabei helfen :) )... Die ganzen Ladefunktionen sind ja schnell getauscht, bzw. funktionieren die auch mit "klassischem" Ajax gut. Bei den Einheiten muss ich mich aber langsam mal mit Websockets auseinander setzen, denn da muss ich sonst bei einem Umstieg viel neu schreiben.

Bei unserm Browsergame damals hatte ich einen A* Algorithmus in PHP implementiert. Ich denk die Map war ca. 400x200 Felder groß und für die Berechnung einer Armeebewegung hat der schon mal 20 Sekunden oder länger gerechnet... daher hab ich alle berechneten Wege in einer DB abgespeichert, da ja damals die Basen feste koordinaten hatten und man oft die selben Ziele hat. Die User wussten auch, dass sie bei einem neuen Ziel ein wenig warten mussten, bis der Weg das erste mal berechnet war^^ Ok, Heute (>7 Jahre später) sind die Rechner um einiges leistungsfähiger.

Ich möchte einfach erstmal die ganzen Spielmechanismen grundlegend und möglichst einfach umsetzen, um den Leistungsbedarf an den Server abschätzen zu können und dann später die ganzen Funktionen verbessern. Außerdem hab ich Angst, dass ich auf halber Strecke die Motivation verliere, da es doch für einen Einzelnen viel Arbeit ist.
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Da man auf Screenshots nicht viel sieht von laufenden Einheiten wollte ich mich jetzt an die Farbverläufe vom Terrain machen. Wie auf dem Bild zu erkennen, ist in der Mitte ein Tile "Fels" ohne Übergang. Da ich keine 1000 Übergänge malen wollte, hatte ich vor das ganze berechnen zu lassen (so ähnlich wie es auch bei den "richtigen" spielen gemacht wird :D )
Javascript hat dafür eigentlich eine brauchbare Funktion getImageData(x,y,w,h)... Zurückgegeben wird ein 1-Dim Array: rgbargbargba... also immer 4 elemente beschreiben 1 Pixel...

Code: Alles auswählen

for(var i=0;i<imageData.data.length;i+=4){
      imageData.data[i+3]=100;//Alpha-Wert auf 100 setzen
}
So müsste ich zuerst mein Bild mal halbtransparent bekommen, leider geht hier der Übergang nicht von "Bild" bis Durchsichtig sondern von "weißes Quadrat" bis "Tile mit Schwarzen Ecken" :evil:

Ich werde weiter probieren, sobald es funktioniert, bekommt ihr wieder einen Screenshot zu sehn ;)
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Ich hab es erstmal, nachdem ich den ganzen Abend gestern und heut noch den halben Tag rumprobiert hab, aufgegeben den Alphawert der Bilder direkt zur Laufzeit zu ändern. Ich hab mir jetzt für jedes Tile 4 weitere Bilder erstellt, die immer einen Rand zeigen (oben links, oben rechts, unten links und unten rechts), der zu 68% transparent ist... Wenn jetzt verschiedene Tile-Typen nebeneinander sind, lege ich entsprechend die transparenten Bilder übereinander... sieht zwar nicht soo super toll aus, aber für den recht geringen Aufwand an Bildern doch ganz OK finde ich :)

Bild

Ich hab die selbe Methode auch für den Übergang zu Wasser versucht, des sieht allerdings sch...recklich aus^^ aber ich denk/hoff da werd ich mit einem art Strand oder Schilf ganz gute Ergebnisse erzielen...
Dateianhänge
screenshot2.png
luixx
Beiträge: 3
Registriert: 12.10.2011, 15:20

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von luixx »

Hi,

ich hätte mal eine Frage zu den Grafiken für die Figur und den Bäumen. Wie lößt du das Problem der Transparenz ? Benutzt du ein png wo der Hintergrund schon transparent ist? Ich habe nämlich ein ähnliches Problem und mit HTML5 bzw Javascript noch keine vernünftige Lösung gefunden und bei allen anderen Projekten wurde das auch so gelöst.

Danke vorab
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Hi,
ja ich nutze einfach transparente PNGs, evtl. gibt es noch eine andere Möglichkeit.

Die Idee:
Du Zeichnest dein normales, nicht Transparentes Bild in ein Canvas, anschließent liest du es über getImageData wieder aus. Dadurch erhältst du ein Array mit den Bildinformationen... Jetzt durchläufst du das Array, immer wenn es einen bestimmten Farbwert hat, setzt du den Alphawert auf Transparent. Anschließend kannst du mit putImageData das Array (das nun transparente Bild) wieder in ein Canvas zeichnen bzw. über toDataURL dir ein Bild direkt ausgeben... hab das selbst noch nicht probiert, aber es müsste gehn.

Hier noch ein Beispiel, das dir vielleicht weiter hilft:
http://pehbehbeh.de/webentwicklung/java ... l5-canvas/

Darf ich dich fragen was du machst? Auch ein Spiel oder eine normale Webanwendung?
luixx
Beiträge: 3
Registriert: 12.10.2011, 15:20

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von luixx »

ich beschäftige mich nebenbei auch mit einem iso spiel bin aber momentan nur am rumspielen. ich habe mir einen bild für eine laufende figur heruntergeladen und da war der hintergrund aber nicht transparent und ich konnte im netzt auch nicht viel dazu finden.
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Hi,
ich hab mir überlegt, dass ich doch eine Highmap einbauen möchte. Diese wird zwar nicht angezeigt (also nicht so wie bei Roller Coaster Tycoon usw.), aber ins Spielgeschehen integriert. Beim Bauen von Gebäuden muss vorher z.B. der Bauplatz auf die selbe Höhe gebracht werden. Sehr cool wäre es, wenn ich es schaffen würde Wasser zu realisieren, dass man Gräben graben kann, in die es dann fliest usw. Das dies ein rießiger Rechenaufwand ist, ist mir klar... ich bin grad ein wenig am Probieren, falls es nicht klappt muss ich meine Idee eben wieder verwerfen.

Noch was anderes... Wie würdet ihr eine Map in der Datenbank speichern? Ich speicher sie momentan so (MySQL-DB):

id # x-koordinate # y-koordinate # terrainhöhe # wasserhöhe # typ

da komme ich bei 400x400 Feldern auf 5,4MB nur fürs Terrain, nicht so toll. Bei einer Mapgröße von 4000x4000 Feldern hätte ich dann schon über 500MB in der Datenbank und das dann für vielleicht bis zu 400 Spieler. Bei einer so großen Karte ist dann wahrscheinlich an "dynamisches" Wasser überhaupt nicht mehr zu denken...

Gruß, LONy
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von Zudomon »

LONy hat geschrieben:id # x-koordinate # y-koordinate # terrainhöhe # wasserhöhe # typ

da komme ich bei 400x400 Feldern auf 5,4MB nur fürs Terrain, nicht so toll. Bei einer Mapgröße von 4000x4000 Feldern hätte ich dann schon über 500MB in der Datenbank und das dann für vielleicht bis zu 400 Spieler. Bei einer so großen Karte ist dann wahrscheinlich an "dynamisches" Wasser überhaupt nicht mehr zu denken...
Vielleicht hilft dir ein Quadtree...
Eigentlich würde es dann reichen, wenn du die Speicherreihenfolge abänderst... sagen wir du hast 512x512 Felder...
Dann speicherst als erste den typ... du hättest nun einen dummy typ... welcher besagt, ob es childs gibt. Als nächstes kommt dann das erste Child... da gehst du solange durch, bis du auf der Feldgröße1 bist... spätestens da wird der typ kein dummy typ mehr sein. Sind alle Felder, die du betrachtest, identisch, dann wird direkt für das große feld terrainhöhe, wasserhöhe und typ angegeben. X und Y lassen sich automatisch ermitteln, da du ja weißt, welches deiner Felder du betrachtest. Musst dann nur gewährleisten, dass die Reihenfolge in der DB richtig ist, weil anhand dieser ja interpretiert wird.

Die andere Möglichkeit wäre, es so zu machen, wie ich bei Stonequest... das Terrain usw. durch Algos erzeugen und dann nur noch bei änderungen an der Koordinate was abspeichern... wobei es auch da sinnvoll wäre, die Änderungen in einen Quadtree zu packen.
joggel

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von joggel »

Diese Größe "400x400". Das sind Tiles?
Also kann da nur jedes Tile eine bestimme Hoehe haben?
Wenn ja, dann ist das ja die optimalste Speicherung in der DB.
Was ich aber nicht verstehe, das mit der Wasserhoehe. Wieso kann das Wasser eine andere Hohe haben als das Terrain-Tile?

Moment:
rein theoretisch braucht man da eigentlich nicht die X- und Y-Koordinaten.
Bei einem Raster kann man die Position ja anhand der ID bestimmen...
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von Chromanoid »

Du solltest überlegen mehrere Felder zusammen in blobs zu speichern. Z.B. 64x64 Stückchen. Das wären dann pro Chunk ca. 16kb (1byte höhe 1byte wasser 2 byte typ). Außerdem solltest du die Felder für deine Serveranwendung cachen.
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Erstmal Danke! Jo es sind Tiles. Ein Tile kann immer eine bestimmte Höhe haben. Ich wollte einmal die Terrainhöhe speichern und dann die Höhe, wie hoch das Wasser über dem Terrain steht (0=kein Wasser). In meiner Wasser-Phsyikengine wollte ich dann das so in der Art machen:

wenn((höhe terrain + höhe wasser) > (höhe terrain nachbarfeld + höhe wasser nachbarfeld)
{
höhe wasser--;
höhe wasser nachbarfeld ++;
}
das ganze ist aber so wie ich es angedacht habe sicherlich sehr rechenintensiv ;)

ja, x und y kann ich mir eigentlich sparen (intern arbeite ich mit einem 1-dim array map[x*10000+y].typ ...) allerdings hab ich x und y immer mitgespeichert, da ich so leicht meine mysql Abfrage eingrenzen konnte: select * from map where x<0 and x>100....

Von blobs, chunks und quadtrees hab ich bisher noch nichts gehört (studier ja "nur" Etechnik^^), zum glück gibt Wikipeida einen schnellen überblick :D
Momentan lade ich immer 100x100 Tiles beim Scrollen (angezeigt werden 25x20). Wenn ich jetzt alles in blobs speicher und immer einen ganzen blob lade, minimiert sich der Speicherbedarf natürlich enorm (1MB bei 512x512 statt momentan ca. 5MB), auch das Laden dürfte viel schneller gehn :) allerdings muss ich, wenn sich die eigenschaft eines Tiles ändert, den ganzen blob neu schreiben. Aber ich denke die Vorteile überwiegen.

Wie würde ich das dann in der Datenbank organisieren?
x # y # blob

x und y ist sozusagen die ID und grobe Rastereinteilung mit der ich dann auch schnell die tatsächlichen Koordinaten der Daten im blob berechnen kann und gleichzeitig sagen kann, welcher blob geladen werden soll.

Wenn ihr noch einzelne Begriffe habt, die mir vielleicht weiter helfen, nur her damit :) Ich kann zwar programmieren, hab aber von vielen Techniken keine Ahnung und mach deshalb wohl viele Dinge komplizierter als sie eigentlich sein müssten. Also eigentlich einfach (wie ichs mir halt selbst überleg) aber für den PC komplizierter zu handeln... ihr wisst was ich mein :D
antisteo
Establishment
Beiträge: 854
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von antisteo »

LONy hat geschrieben:id # x-koordinate # y-koordinate # terrainhöhe # wasserhöhe # typ
Iiieh was will die ID hier.
Nimm X und Y als Primärschlüssel und bau dafür eine Indexstruktur. Das ist die schnellste Variante. (Zumindest sollte sie das sein, weil es die Uni so will)
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
joggel

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von joggel »

Welche Uni? :?:
antisteo
Establishment
Beiträge: 854
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von antisteo »

joggel hat geschrieben:Welche Uni? :?:
TU DD
Professor Lehner.

Bei der ID-Geschichte haben die Tutoren von der "MS Access Krankheit" gesprochen :D
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
joggel

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von joggel »

Und da ist der Zugriff aud die Datensätze über einen zusammengesetzten Primärschlüssel schneller?
Also bei MS?
Sehr komisch...
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von Chromanoid »

Man könnte die indizierung auch mal mit raumfüllenden Kurven versuchen, siehe z.B. Z-Kurve. Es gibt auch Datenbanken speziell für räumliche Daten, siehe "Spatial database".
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Nach vielem Probieren ist eine erste Etappe geschafft... die Höhendaten der Map (incl. Typ) werden in der Datenbank gespeichert: "x # y # data" wobei Data vom Typ blob ist. Momentan Speichere ich die Terrainhöhe mit 16bit und den Typ mit 8bit. Bei 64x64 Tiles macht das 12KB. Es werden allerdings in der Datenbank standartmäßig 64KB belegt. Troz dieser "Speicherplazverschwendung" ist meine neue Map mit 262144 Tiles mit 4MB deutlich kleiner als die alte Map in der alten DB mit 160000 Tiles und 5,4MB :D

Zur Zeit mach ich mir Gedanken, wie ich die verschiedene Terrainhöhen ohne 3D visualisieren kann (im Browser hab ich mit Canvas doch recht eingeschränkte Möglichkeiten). Hier ein erster Test, desto höher das Terrain ist, desto mehr Fels ist sichtbar (programer art^^). Im Radar wird momentan nocht nichts angezeigt. Die Höheninformationen stammen noch aus der alten Datenbank:

Bild

Die Wasserhöhe will ich in einer extra Tabelle speichern, da sich diese Daten ja durch die Wasser-Physikengine später ständig ändern (hoffentlich^^). Ich hab mir auch mal andere Datenbanksysteme (CouchDB,...) angeschaut, aber ich denk ich bleib erstmal bei der guten alten MySQL DB ;)

Falls ihr Ideen fürs Anzeigen der Terrainhöhe habt, nur her damit.
Dateianhänge
screenshot3.png
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von Chromanoid »

Orientier dich doch an diversen RTS Spielen mit isometrischer Perspektive - z.B. Siedler 2, Populous 2 oder Luminous Arc. Wenn das ganze isometrisch sein soll, ist ja eigentlich schon gegeben wie die Höhe dargestellt werden muss, allerdings ist das ab bestimmten Höhenunterschieden zwischen zwei Tiles problematisch bzw. dann wird es nötig, dass man die Karte drehen kann. Du könntest es sonst in 3D und 2D probieren wie in Populous 3 (dann mit Flash oder WebGL).
TheBenji
Establishment
Beiträge: 129
Registriert: 07.01.2011, 17:59

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von TheBenji »

Ich würde dir ehrlich gesagt empfehlen die höhen erstmal wegzulassen...
...die verkomplizieren potentiell alles ziemlich deutlich ;)
Jenachdem was du vorhast wird es wesentlich komplizierter zu prüfen ob
-da gebaut werden kann
-die geschwindigkeit von einheiten
-die "reichweite" von einheiten
-die sichtweite
und so weiter

Da kommt sicherlich noch mehr aber das fällt mir so auf anhieb ein.
Das ist dann sowas das kann man besser später noch machen - aber wenn du immer solche dinge baust/willst wirst du potentiell nie zu einem Ergebnis kommen ;)
Besser ist es eig. erst mal ne spielbare version fertig zu bekommen und dann noch coole features einzubauen.
Du kannst dir solche Ideen ja aufschreiben und ggf. im code auch schon offen halten aber ich würde dir wie gesagt raten das erstmal noch nicht auszuprogrammieren...
joggel

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von joggel »

Also ich wüsste auch garnicht wie man bei einem 2D Tile-basierten Spielen da mit Hoehe agieren sollte...
Man kann da Berge und Huegel und Taeler als Grafiken schon einfuegen, aber wenn man dann eine Einheit rueberlaufen laesst, dann wird es da schon etwas schwierig, denke ich.

Ich denke es ist auch ziemlich schwierig nur aus Geoinformationen dann die Tiles an den richtigen Stellen zu setzen...

Aber weiß da konkret auch nur wenig drüber.
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Danke für eure Antworten.
WebGL will ich (noch nicht) nutzen, da es noch nicht wirklich gut von Browsern unterstützt wird. Wie bei Sieder 2 und so möchte ich es auch nicht machen, da ich hier nur eine feste Steigung anzeigen kann. Außerdem würde das mit der Mauskoordinaten->Tileskoordinaten umrechnung sehr kompliziert werden.

Eine Highmap möchte ich allerdins doch gern realisieren. Hauptsächlich um Wasser nicht so statisch zu machen und ich denke ich kann so ein abwechslungsreicheres Terrain erzeugen, dadurch das ich verschiedene Texturen übereinander lege.

Bei der Einheitenbewegung möchte ich die Terrainhöhe erstmal weitestgehend außer acht lassen und nur Objekte und Wasser berücksichtigen. Beim Gebäudebau bietet unebenes Terrain schon wieder eine interresante Spielmechanik: man baut nicht einfach ein Gebäude neben das andere, sondern muss schaun wo der Untergrund nicht zu uneben ist (da kommt mir grad, bei Die Siedler III gibts das ja auch :D ). Ansonsten muss das Terrain begradigt werden (Mittelhöhe der überbauten Fläche berechnen, Änderungen berechnen und das bei den Baukosten / der Bauzeit berücksichtigen)

Browsergames gibts wie Sand am Meer und nur eine grafische Datenbankabfrage zu schreiben wäre nichts soooo besonderes. Ich möchte die neuen Möglichkeiten, die dadurch eröffnet werden einfach gleich nutzen und versuchen umzusetzen. Am interresantesten finde ich dabei die Möglichkeit einer Wasser-Physikengine, wenn man selbst einen Fluss gaben kann, einen See trocken legen kann usw. Um den Rechenaufwand in grenzen zu halten, könnte das Wasser ja relativ langsam fließen und eine maximale Anzahl an Wasser vorhanden sein.
TheBenji
Establishment
Beiträge: 129
Registriert: 07.01.2011, 17:59

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von TheBenji »

Naja, das haus an haus gesetzt wird kannst du auch durch andere elemente verhindern (bäume, steine, etc...)

Bis du soweit damit fertig bist wird webGL wahrscheinlich auch schon super unterstützt ;) (bei intresse schau dir mal THREE.js an - schon ziemlich cool).

Meiner Meinung nach sollte man erstmal "nur eine grafische Datenbankabfrage" schreiben und diese dann erweitern...so von wegen erfolgserlebnisse und so und um ehrlich zu sein bezweifel ich das es DAS SPIEL wird nur weil man wasser bergab fließen lassen kann :P
(aber wenn schon auch hier immer dran denken: Man kann ruhig den client rechnen lassen...davon hast du deutlich mehr (in aller regel^^) als von den servern :D)
joggel

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von joggel »

LONy hat geschrieben:Hauptsächlich um Wasser nicht so statisch zu machen und ich denke ich kann so ein abwechslungsreicheres Terrain erzeugen, dadurch das ich verschiedene Texturen übereinander lege.
Genau das verstehe ich nicht ganz...
Wenn ich das richtig verstehe, das Du das Terrain einfach darüber gestaltest, indem du ein paar Texturen darüber legst, wird das nix, jedefalls wüsste ich auf anhieb nicht wie.

Man könnte in einem Editor ein Terrain erstellen, mit vordefinierten Tiles:
- verschiedenen Ebenen (Flachebene, Hochebene, Sumpf, Wald, etc...)
- wenn sich eine Ebene ändert dann halt Tiles verwenden, die so einen Übergang zu den unterschiedlichen Ebene darstellen.
- usw.

Man kann zu den jeweiligen Tiles ja auch noch Hoeheninformationen festhalten, über die dann die Fliesrichtung des Wassers ermittelt werden kann.
...
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von LONy »

Ich meld mich auch mal wieder ;)
Man könnte in einem Editor ein Terrain erstellen, mit vordefinierten Tiles:
- verschiedenen Ebenen (Flachebene, Hochebene, Sumpf, Wald, etc...)
- wenn sich eine Ebene ändert dann halt Tiles verwenden, die so einen Übergang zu den unterschiedlichen Ebene darstellen.
- usw.

Man kann zu den jeweiligen Tiles ja auch noch Hoeheninformationen festhalten, über die dann die Fliesrichtung des Wassers ermittelt werden kann.
...
so in der Art habe ich es vor... beim letzten Screenshot sieht man, wie sich das Terrain von "leicht Felsig" oben links im eck, über Gras wieder nach "leicht Felsig" unten rechts im Eck ändert. Das meinte ich mit Texturen übereinander legen. In der Mitte ist quasi ein Tal und das möchte ich dadurch irgendwie veranschaulichen.

Die letzten Tage hab ich ein Wenig mit C++ rumgespielt (musste mir in der Arbeit das Programmieren mit Threads aneigenen) und dabei blaue Pixel über eine Highmap (schwarz-weiß Bild) laufen lassen. Das ganze lies sich so schnell berechnen, dass ich zuversichtlich bin, dass eine Wasser-Physikengine realisierbar ist ;)

Ich muss euch aber recht geben, dass ich erstmal schaun sollte ein ganz simples Spiel zum laufen zu bekommen. Mir war garnicht Bewusst, dass man so zwischen Echtzeitstrategie (Command & Comquer) und Wirtschaftssimulation (Anno) unterscheidet. Mir wurde das erst klar, nachdem ich den Wikipedia Artikel zu RTS durchgelesen hab.
Wenn ich fertig bin, möchte ich gern eine art Hybrid haben, dass man sich entweder mehr auf die Wirtschaft konzentriert (komplexe Rohstoffe -> gute Verteidigung) oder auf den Strategieteil (einfache Rohstoffkette -> Einheiten).
=> um vorran zu kommen werd ich erstmal mich auf den Strategieteil konzentrieren (Einheiten produzieren und über die Karte schicken) und wenn das funktioniert kann ich mich einer komplexen Wirtschaft mit Rohstoffkreisläufen (incl. Wasser :D ) widmen.

Wenn ich heute zuhause bin, will ich mich erstmal in Websockets einarbeiten, da anders wohl Einheitenbewegungen nicht zu realisieren sind.

Leider hab ich es nicht geschafft, Binärdaten in der Datenbank in einem Blob zu speichern... Aus 010 wurde beispielsweise 30 31 30 (er hat die Zahlen in ASCII-Zeichen umgewandelt und gespeichert). Da man bei PHP nicht recht zwischen verschiedenen Datentypen unterscheiden kann, hoffe ich dass sich das Problem löst, wenn ich das ganze mit Websockets mach und den Server dann z.B. in Java schreib.
TheBenji
Establishment
Beiträge: 129
Registriert: 07.01.2011, 17:59

Re: [Projekt] ISO-Browsergame "cad2d"

Beitrag von TheBenji »

Naja, du brauchst nicht zwingend websockets (ist aber in jedem fall förderlich...mal abgesehen von der teils spärlichen Unterstützung :D).
Letztendlich musst du ja für jede einheit (egal ob eigene oder nicht) dem client ja nur die aktuelle Position und die Zielposition senden...solange da zwischen nichts passiert ausser das "gehen" kann das ja jeder client für sich machen - bei einem zwischenfall (hinderniss, angriff von anderen, reisender fluss (:D), etc.) kann der client ja ne anfrage an den server senden um das zu verifizieren aber sonst musst du da ja vgl. wenig senden...trotzdem sind websockets natürlich für solch eine Anwendung wie geschaffen, als "fall-back" gebe ich dir aber mal noch das stichwort "long polling" mit auf den weg ;)
Antworten