Programm gut strukturieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Programm gut strukturieren

Beitrag 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?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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!
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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 :)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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!
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag 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 !
Zuletzt geändert von Robert Wünsche am 13.12.2004 14:03, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Zuletzt geändert von Kaeru Gaman am 12.12.2004 07:38, insgesamt 2-mal geändert.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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
Bild
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag 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.
Antworten