Seite 1 von 1

Programm gut strukturieren

Verfasst: 11.12.2004 13:56
von ZeHa
Hallo!

Hab 'ne Frage, und zwar würd ich gern für mein neues Spiel alles schön übersichtlich strukturieren, damit ich's bei steigender Codegröße leichter hab.
Zu diesem Zweck wollt ich mehrere Sourcecode-Dateien anlegen, also eine Haupt-Datei, die dann die anderen included, z.B. eine die für den Bildschirmaufbau zuständig ist, eine, die die Gegner steuert, eine fürs Menü etc...

Hab die Dateien angelegt und mal ein bißchen rumprobiert, und leider festgestellt, daß ich 2 Probleme damit hab:

1) Ich kann zwar von meinem Haupt-Code sämtliche Prozeduren aufrufen, die mir in den anderen Dateien zur Verfügung stehen, aber leider nicht umgekehrt. Das heißt also, ich kann von main() mein menu() aufrufen, aber dann nicht vom menu() mein game().
Gibt es da 'ne Möglichkeit, das doch irgendwie zu realisieren? Die einzige Möglichkeit, die mir jetzt einfällt, wäre wohl ein Rückgabewert oder sowas, womit ich dann schonmal zu meinem zweiten Problem komme:

2) Wenn ich Variablen global in meiner Haupt-Datei deklariere, dann kann ich die leider auch nur dort benutzen, alle anderen Prozeduren aus den anderen Dateien haben leider keinen Zugriff darauf. Gibt es auch da irgendwie 'ne Möglichkeit?

Das regt mich jetzt halt schon irgendwie auf, weil ich endlich mal ein übersichtliches Programm schreiben wollte (wird was größeres), und jetzt treten gleich schonmal die ersten Probleme auf und ich befürchte daß es um die zu lösen an anderen Stellen wieder unübersichtlich werden könnte.

Hat jemand 'nen guten (bzw. zwei gute :)) Vorschlag für mich?

Verfasst: 11.12.2004 14:33
von remi_meier
IncludeFile fügt eigentlich nur den Code der Include-Datei in die Hauptdatei an der Stelle des IncludeFile's ein. Also sollte folgendes gehen:

Code: Alles auswählen

;MainFile
Procedure Irgendwas()
Endprocedure
IncludeFile "include.pbi"

Code: Alles auswählen

;include.pbi
Irgendwas()
D.h., dass du die Proceduren im Mainfile vor dem IncludeFile schreiben musst um sie im IncludeFile benutzen zu können. Kannst aber auch mit Declare irgendwas() vor dem IncludeFile die Procedure bekannt machen!
Die Proceduren sind natürlich auch nur dann bekannt, wenn du das Programm vom Mainfile startest. Ich habe meistens ein Includefile mit allen Declares drin!

greetz
remi

EDIT: Das gleiche gilt auch für Variabeln, also auch vor dem IncludeFile mit Global Var.l deklarieren!

Verfasst: 11.12.2004 14:55
von ZeHa
Mann klar!

Daß es so einfach ist, hätt ich nicht gedacht :)
Aber ist ja eigentlich logisch... alles, was der Compiler tut, ist, daß er den Code GENAU AN DER STELLE einfügt, wo das Include steht...

Hab's grad nochmal getestet, funktioniert jetzt einwandfrei! Also Includes immer erst am Schluß schreiben :) kannte halt nur die Includes von C bisher, und die stehen ja immer am Anfang.

Vielen Dank für die schnelle Hilfe :)

Verfasst: 11.12.2004 15:45
von NicTheQuick
Mach dir noch eine Include mit dem Namen [c]Common.pbi[/c] und include diese als erste. Dort kommen dann alle Konstanten, Strukturen, Globals, usw. rein.

Verfasst: 11.12.2004 16:08
von ZeHa
Jo hab ich grad gemacht. Da kommen jetzt alle Variablen aber auch die Declares von Prozeduren rein...

Vielen Dank nochmals für eure Tips!

Verfasst: 11.12.2004 16:15
von Andre
Mit XIncludeFile() kann man Include-Dateien auch mehrfach zum Includen aufrufen. Der Compiler achtet dann automatisch darauf, dass dies nur einmal passiert. :wink:

Verfasst: 11.12.2004 23:51
von Robert Wünsche
Tja ...
Bei dem X Include kram giebt es leider auch einen BUG !

Macht mal folgendes(zur genaueren verdeutlichung):
Erstellt mal einen Ordner in D mit dem Namen "test", darin erstellt ihr die Hauptdatei "haupt.pb".

In der "haupt.pb" Datei steht:

"XIncludeFile "dest/testi.pb""

Dann erstellt ihr noch einen ordner in test mit dem Namen "Dest":
Darin erstellt ihr die Dateien "testi.pb" und "blaa.pb".
Und in "testi.pb" schreibt ihr:
"XIncludeFile "blaa.pb""

Und was passiert, wenn man Haupt.pb compililiert ?
--> Der Compiler sucht in "test" nach "blaa.pb", obwohl es im Ordner "dest" sein müsste !

PS: Bezugsordner hatte ich nicht angegeben !

Verfasst: 12.12.2004 03:58
von Kaeru Gaman
nööö robert...

der bezugspunkt ist die DIR (ordner) vom hauptprogramm.....


@ZeHa

zum guten strukturieren gehört auch eine ausführliche und sinnvolle kommentierung.
auch grosse trennzeilen wie:
;***********************************************************

[edit]

@LittleFurz (bez. post unten)
es sollte auch dabeistehen, wozu die variable überhaupt da ist.
bei manchen algos ist es auch praktisch, dabeizuschreiben, warum
man das so oder so programmiert hat. man will ja auch nach nem
halben jahr noch durch seinen eigenen code durchblicken.

Verfasst: 12.12.2004 05:45
von MVXA
dazu gehört auch, das man ein paar kommentrierte Zeilen über eine Prozedur hängt, in der beschreiben wird, was die Prouedur macht, was sie zurück gibt und was sie für Parameter braucht.

Bei Variabledefinationen gehört auch, dass man mit angibt ob die Variable Global oder Privat (innerhalb einer Funktion) ist. Z.b. :

Code: Alles auswählen

Global glngZahl.l ; Global Long Zahl
procedure Irgendwas()
    deftype.l plngZahl ; Private Long Zahl
endprozedure

Verfasst: 12.12.2004 10:14
von estate
Man sollte auch darauf achten, dass man nur Programmteile auslagert,
die wenig mit dem Rest des Programmes zu tun haben,
sonst ist die ganze Übersicht im A*****.
Es ist viel sauberer Programmteile in Prozeduren auszulagern.
Wenn die Prozeduren sinnbeschreibene Namen haben, macht das erst
richtig Sinn.