kaiserludi hat geschrieben:Was mir gerade noch auffällt: Brauchen die Positionsdaten wirklich Nachkommastellen? Bei den meisten Spielen dieser Art hat man doch feste Spielfelder wie z.B. 20x20. Da interessiert es doch weniger, auf welcher Position auf der X-Achse und Y-Achse die Kugel ist, sondern mehr, in welchem der möglichen Felder sie sich befindet: Also z.B. das Feld x3/y10. Entsprechend sollte doch ein unsigned char oder schlimmstenfalls ein unsigned short völlig ausreichen: Du sparst entsprechend pro Kuel zum einen 6 Byte, zum anderen ist Itegerarithmetik in der Regel schneller als Floating Point Arithmetik. Wird in deinem Fall vermutlich keine Rolle spielen, da ich annehme, dass du das Spiel nicht für Geräte entwickelst, die du damit an ihre Grenzen bringst, aber es ist trotzdem sinnvoll, sich anzugewöhnen, den Datentypen zu verwenden, den man auch wirklich braucht.
Also mit "Int statt Float" gebe ich dir recht, aber nicht zwangsläufig mit
unsigned char bzw.
unsigned short. Ich habe gelernt, dass man sich viel zu viele Gedanken über Datentyp-Größen macht und sich somit meist viel zu sehr einschränkt. Es schadet in der Regel nicht für alle möglichen Sachen einfache
ints bzw.
unsigned ints zu nutzen. Entscheidend sind solche speziellen Datentypen wie unsigned char und unsigned short eigentlich eher beim Lesen von Daten aus einer bzw. Schreiben von Daten in eine Datei. Die paar Bytes tun nicht weh und erübrigen ggf. Umhergecaste (z.B. wenn man Libs nutzt die halt einen anderen Typ nutzen, etc). Im Großteil aller Fälle sind das eh temporäre oder statische Daten.
Eine Ausnahme bildet natürlich ein Fall bei dem es wirklich viel ausmacht (bei riesigen Datenmengen oder kleinem System), aber gerade am Anfang und für so ein kleines Projekt muss man da nicht auf spezielle Typen zurückgreifen. Eine weitere Ausnahme ist, wenn die Variable Daten einer gewissen Größe halten muss, die eventuell ein
int nicht fassen kann.
Ich habe Jahre lang immer wieder genau auf die Größen geachtet. Alles mögliche in
unsigned char,
unsigned short oder
unsigned long gepackt (wobei die Größen übrigens auch keineswegs wohldefiniert sind, aber es gibt ja compilerabhängige Ersatztypen bzw. typedefs). Aber den Aufwand ist es nicht wert. Man spart eigentlich nichts und wenn die Daten dann irgendwann doch mal größer werden, muss man wieder nachpflegen. Ein gutes Beispiel ist auch die STL oder viele Standardfunktionen aus C/C++ die fast ausnahmslos Typen wie int oder size_t nutzen, welche plattformabhängig sind. Eine sizeof-Aufruf wird beispielsweise auch eher Werte liefern, die in kleinere Datentypen passen würden.
Ohne Input kein Output.