schachspiel programmieren
-
Guten Tag,
nachdem ich jetzt einige Zeit mit Python gearbeitet habe, möchte ich nun mal wieder mein Glück mit C++ versuchen undein kleines Schachspiel programmieren. (2D).
Gibt es für 2D Programmierung ein nettes Framework/Library o.ä.? Ok, geben wird es wahrscheinlich viele aber welches ist empfehlenswert?Suche eine einfache Möglichkeit, so ein Schachbrett aufzubauen.
Danke
-
Für 2D ist SFML zu empfehlen. Von SDL und Allegro rate ich ab.
-
SDL oder Allegro
-
Und was haltet ihr von OpenGL?
Von SDL und Allegro rate ich ab.
Warum?
-
OpenGL ist keine Library, sondern eine Spezifikation. Für ein 2D Spiel würde ich OpenGL nicht nutzen, weil die o.g. Bibliotheken den OpenGL Kram soweit kapseln (zumindest SFML, SDL nutzt unter Windows glaube DirectX?), dass du schnell und komfortabel ans Ziel gelangst.
Bei SDL hast du erstmal etwas ziemlich leichtes, was selbst relativ wenig kann. Das Hinzufügen von "Addon"-Libraries wird die SDL allerdings dann recht mächtig. Bei SFML hast du jedoch all die nötigen Dinge schon direkt dabei.
Beide Libraries haben übrigens auch OpenGL Support, d.h. falls du also z.B. doch mal direktes OpenGL in deiner Anwendung benötigen solltest (was ich bei einem 2D Schach sehr stark bezweifel), wäre das möglich.
Ich sehe die SDL eher als etwas unmodern und - was für mich das größte Manko ist - sie ist in C geschrieben.
SFML hingegen hat einen modernen Aufbau und ist in C++ geschrieben.Angeblich soll SFML auch schneller gewesen sein, weil die SDL statt eines Hardware-Renderers einen Software-Renderer genutzt haben soll. Ich weiß aber nicht inwiefern das noch aktuell ist und ob das auch überhaupt stimmt.
Ich habe mit SDL und SFML gearbeitet und mit SFML wesentlich weniger Ärger gehabt, weil sie weniger kompliziert (in Bezug auf Verwaltung der SDL Addon Libraries) war und einfacher in der Handhabung ist (weil keine Mischung von C und C++ beim Programmieren).
Mit Allegro haben ich zugegebenermaßen noch nicht gearbeitet, aber da Allegro auch in C geschrieben ist, greift für mich hier ähnliches Argument wie bei SDL. Zudem soll Allegro weniger Features als SDL und SFML bieten. Das ist aber nur gefährliches Halbwissen, da sollte sich wohl jemand melden, der mehr davon versteht.
-
Gibt's eigentlich irgendwo so eine Art unter der GPL stehende Bilder für Schachfiguren, die man in seinem Programm nutzen kann? Ich wollte auch mal ein Schachspiel basteln, aber irgendwie möchte ich Spielern meine Zeichenkünste nicht zumuten.
-
Vielleicht etwas
Ansonsten kannst du bei Google Bilder Copy Pasten.
-
wenn du ein schachspiel programmieren moechtest, bietet es sich sehr an auf ein bestehendes interface zu setzen, da gibt es naemlich nen standard (hab vergessen wie das ding heisst, musst du kurz googlen).
das hat den schoenen vorteil, dass du nicht nur eine fertig gui bekommst, an die leute gewoehnt sind, du kannst damit auch deine schachzug engine gegen andere antreten lassen, oder z.b. dir standard stellungen aus datenbanken anschauen oder manchmal (je nach gui), sogar z.b. gefaehrdunken von spielsteinen oder brettbewertungen anschauen (und natuerlich das uebliche laden/abspeichern usw).dann kannst du dich aufs eigentlich konzentrieren.
-
rapso schrieb:
dann kannst du dich aufs eigentlich konzentrieren.
Was bildet denn dann hier das "Eigentliche"? Ist doch schon alles fertig.
-
ich will es selbst programmieren
sonst kann ich mir ja auch gleich ein fertiges spiel runterladen
trotzdem danke fürn tipp
-
was ist perfomanter:
- schachbrett selbst zu zeichnen
- oder ein fertiges bg-bild laden?
-
sorry, dachte der ganze sinn hier war eine zug engine schreiben zu wollen.
nur fuer den fall, hier das protocol: http://en.wikipedia.org/wiki/Chess_Engine_Communication_Protocol
-
ischoj schrieb:
was ist perfomanter:
- schachbrett selbst zu zeichnen
- oder ein fertiges bg-bild laden?Vermutlich letzteres, da nur ein Render-Aufruf notwendig ist. Das geht aber schon in die Richtig Mikro-Optimierung. Der Flaschenhals bei einem Schachspiel ist die künstliche Intelligenz und vielleicht noch, ob es noch eine weitere (legale) Zugmöglichkeit gibt oder das Spiel endgültig zu Ende ist.