Wie strukturiert/organisiert ihr Code?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

PacMani

Betreff: Wie strukturiert/organisiert ihr Code?

BeitragDo, Sep 16, 2010 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Forenmitglieder Wink

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! Smile

Xaymar

ehemals "Cgamer"

BeitragDo, Sep 16, 2010 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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
;[End]
;!Hinweis/Subroutinenname


Ich nutze Ideal, weshalb ich dieses Schema nur benutze:)
Warbseite
 

PacMani

BeitragDo, Sep 16, 2010 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Sep 16, 2010 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter
 

PacMani

BeitragDo, Sep 16, 2010 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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ü Very Happy

TimBo

BeitragDo, Sep 16, 2010 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

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

BeitragFr, Sep 17, 2010 8:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xaymar

ehemals "Cgamer"

BeitragFr, Sep 17, 2010 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@Pacman: ja gibt es. Bis jetzt konnte ich das durch das einfügen von
BlitzBasic: [AUSKLAPPEN]
;[Block]NAME DES BLOCKS
;[Block]

und dann das "Block" durch "End" ersetzen verhindern
Warbseite
 

PacMani

BeitragFr, Sep 17, 2010 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert wunderbar; danke für den Tipp Smile

faeX

BeitragSo, Sep 19, 2010 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile

hamZta

Administrator

BeitragSo, Sep 19, 2010 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 19, 2010 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group