Wie strukturiert/organisiert ihr Code?
Übersicht

PacManiBetreff: Wie strukturiert/organisiert ihr Code? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo liebe Forenmitglieder ![]() Ich wollte rein interessehalber mal fragen wie ihr denn so euren Code strukturiert / organisiert? Gerade bei großen Code-Dateien verliert man ja anfangs schnell den Überblick, wenn man keine Struktur hat - einen Fehler, den ich bei Freunden leider zu oft gesehen habe: Es ist garnicht mal so lange her, da hat einer sein sogar sehr kleines Spieleprojekt an den Nagel gehängt, nur weil er keine Strukturierung hatte; Kommentare fehlten obendrein auch noch und so konnte ich ihm auch nicht helfen. Ich habe mir mittlerweile folgende "Organisation" angewöhnt, die ich mal absolut ausführlich beschreiben möchte: Dateisystem Ich packe alles, was zum Spiel gehört, in einen Hauptordner. Überrascht kaum niemanden - aber hin und wieder liegen Codedateien tatsächlich inmitten von Bilderordnern oder irgendwo auf der Platte. Unglaublich! In diesen Hauptordner kommen bei mir die Codedateien (und IDEal Projekt-Dateien), diese haben keinen eigenen Unterordner. Unterordner gibt es aber trotzdem: Und zwar getrennt nach Texturen, Sounds (und Musik), Leveldateien oder 3D-Modelle. Etwas speziellere Unterordner gibt es auch; die heißen z.B. "Dokumentation" - das sind Dateien, die Vorabtester oder andere Leute überhaupt nicht zu sehen kriegen. Darin sammle ich Textdateien, die den Aufbau von Leveldateien etc. beschreiben. Die Ordner beginnen auch mit Alt+255 (Sonderzeichen), damit sie immer oben aufgelistet werden. Code Momentan ist mein Code mit ~2000 Zeilen noch überschauber - dank Ordnung? Jedenfalls lagere ich Codeteile noch nicht in einzelne Dateien aus, die dann included werden. Außer einen Fenstermanager, den ich allgemein mal geschrieben habe, oder neuerdings auch die EscapeGUI. Also Sachen, die man sogesehen includen muss. Innerhalb einer Datei kategorisiere ich Code: Code: [AUSKLAPPEN] ;Hauptkategorie##############################(bis Spalte 100)#####
;Unterkategorie==============================(bis Spalte 100)===== ;Beschreibende Kategorie---------------------(bis Spalte 100)----- Anstelle von "Hauptkategorie" stehen dort Titel wie "Initialisierung", "Funktionen" und "HAUPTSCHLEIFE". Unterkategorien sind z.B. "Grafikausgabe", "Typen", "Texturen", "Hilfsfunktionen" oder "Eingabefunktionen" Beschreibende Kategorien sind im Grunde keine Kategorien mehr, sie beschreiben die nachfolgende Funktion, z.B. bei Variablen "ASCII-Zeichen & Werte", "Bearbeitungsmodus", "Kollisionen", "Kollisionsliste" oder bei mathematischen Funktionen "Tauscht die eine Variable gegen die zweite", "Liefert die kleinere Zahl zurück" etc. Variablennamen selbst sind bei mir auf englisch. Es ist manchmal zu kompliziert, kurze und bündige deutsche Alternativen zu finden. Die Kommentare sind aber dennoch auf deutsch. Was haltet ihr davon? Und wie sieht es überhaupt bei euch aus? Bin gespannt auf Antworten! ![]() |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dateisystem:
|Hauptordner(Alle Codes und DLLs) |-Gfx(Alles grafische, noch weiter aufgeteilt nach Benutzungsort) |-Sfx(Alles Tonmäßige, noch weiter aufgeteilt nach Benutzungsort) |-Lvl(Alle Level/Levelgruppen, kaum aufgeteilt) |-Include(Alle Includes) |-DLL(DLL Sources, Decls) Codes: BlitzBasic: [AUSKLAPPEN] ;[Block]NAME DES BLOCKS Ich nutze Ideal, weshalb ich dieses Schema nur benutze:) |
||
Warbseite |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem mit Blocks bei IDEal ist bei mir, dass der Block manchmal bei Funktionen halt macht und sich nicht über diese ersteckt - somit kann ich leider nicht alles wegklappen, sondern immer nur bis zur nächsten Funktion - gibt es da einen Trick? | ||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mache es immer so
Code: [AUSKLAPPEN] ;[Header] ;-------------------- ;Konstanten const cEND=0 const cMENU=1 const cGAME=2 ;-------------------- ;Globale global gState=cMENU ;-------------------- ;HAUPTSCHLEIFE while gState <> cEND select gState case cMENU menu() case cGAME game() end select wend ;-------------------- Für jede jede Subroutine(Intro, Menü, Spiel, Optionen, etc.) und dazugehörige Funktionen lege ich eine Include-Datei an, die ich direkt aus der Hauptschleife anspreche(incs/intro.bb, incs/game.bb, etc), Funtionen die von allen Subroutinen genutzt werden lege ich in einer eigenen datei an. Da ich bei B3D auch Ideal benutze, versuche ich die Subroutinen so lange wie möglich in der Hauptdatei zu belassen. Kommentare benutze ich eigentlich recht wenige, es sei den es sind komplizierte Vorgänge bei denen es sich lohnt. Ansonsten helfen auch Freizeilen zwischen unterschiedlichen Berechnungen. Die Ornerstruktur sieht ähnlich wie bei meinen Vorrednern aus (data/->gfx->mesh->incs->tex->lvl->sfx etc) |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Idee mit dem Spiele"status" wie Menü, Ingame und Ende finde ich gut, so eine Idee brauchte ich noch für mein baldiges Menü ![]() |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich mache es so wie skey-z, nur das ich anstatt einer funktion ein include einsetze und dann mit ideal so 5-6 dokumente habe , das hilft bei großen Projekten (nein kein one-day-projekt) echt weiter ![]() Lg TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pro Projekt ein Ordner.
Darin liegt der Source und vlt ein paar INI's was auch immer. Darin Unterordner "gfx" usw. Beim Code habe ich eine (oder mehrere) Inlcudes die nur Funktionen beinhalten. Dann noch ein Include mit Globalen / Constanten. Zu letzt die Hauptschleife usw. |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Pacman: ja gibt es. Bis jetzt konnte ich das durch das einfügen von
BlitzBasic: [AUSKLAPPEN] ;[Block]NAME DES BLOCKS und dann das "Block" durch "End" ersetzen verhindern |
||
Warbseite |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Funktioniert wunderbar; danke für den Tipp ![]() |
||
![]() |
faeX |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schön, um den Fortschritt eines Projektes nochmal genau zu betrachten: Einen Ordner für das Projekt erstellen, dann für jeden Tag einen Ordner, wobei immer der vorherige kopiert wird. Sofern man keine gigantischen Datenmengen hat, ist das eine gute Lösung, meiner Meinung nach. ![]() |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da wäre es die bessere Lösung, ein Versionskontrollsystem wie SVN oder GIT zu verwenden, faeX. Das macht diese Arbeit automatisch und besser. | ||
Blog. |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also mir hat der IDEal-Backup-Ordner bisher gerreicht, wobei der natürlich überhaupt keine Lösung für große Projekte / Projekte mit mehreren Beitragenden ist. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group