Gosub oder Funktionen?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Pdd

Betreff: Gosub oder Funktionen?

BeitragFr, Jun 30, 2006 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.
Ich bin neu hier und erst seit ein paar tagen kenne ich BlitzBasic. Allerdings muss ich sagen: Ich bin begeistert! Da ich mich mit Delphi auskenne, weis ich, das man allein bei dem Versuch, DirectX zu initialisieren schon scheitern kann (wie ich) und bei OpenGl genauso. Nungut, aber zu meiner Frage:

Ich habe heute mein erstes Spiel ersteltt *freu* es ist ein kleines 2D Rennspiel. Nun, wie ich in Rob's BB-Kurs gelesen habe, sollte man Gosub möglichst nicht verwenden! sodern Funktionen! Ich habe allerdings fast nur gosubs verwendet! Klar, es gibt Funktionen wie Car_Move oder Game_init, aber wenn das Spiel beendet ist, dann mach ich das immernoch mit Gosub Level1Ende.
Genau so ist es mit den Leveln, die ich (momentan) auch alle noch mit labels versehen habe....
Nun wollte ich euch mal Fragen: ist es besonder schlimm, wenn man Gosub verwendet? Ich finde das nähmlich ziemlich praktisch Wink Allerdings muss ich auch eingestehen, das Funktionen sehr grossen nutzen haben ! (siehe PHP(!), Delphi) Also wie denkt ihr da? Very Happy

Blitzcoder

Newsposter

BeitragFr, Jun 30, 2006 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Allgemein sagt man, dass man Gosub und goto nur selten verwenden sollte. Es macht meiner Meinung nach den Code sehr unübersichtlich. Functionen kann man schön namen geben, und sie sehr übersichtlich auslagern. Ständiges hermuspringen im Code wird bei langen Programmen doch auf Dauer sehr nervig bei der Fehlersuche. Klar, es ist nich allzuschlimm, diese Befehle zu verwenden(hab ich am Anfang auch gemacht, vor allem weil ichs von QBASIC gewöhnt war)
Ich weiß nicht, wie schnell Gosub arbeitet. Ein weiteres Problem ist, dass in einem Codeteil der mit gosub/Return aufgerufen wird, sind die Variablen anders. Eine Variable Speed, ist, wenn sie nicht als Global definiert ist, in einem Unterprogramm mit gosub anders, als im Hauptprogramm. Functions kann man Werte übergeben und bekommt welche zurück.
Also ich finde Functions viel schöner und besser. Muss aber jeder selbst entscheiden.


MfG Blitzcoder
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
 

#c0rEDaMagE

BeitragFr, Jun 30, 2006 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Also Ich verwende eine Mischung aus Funktionen und goto's(ich weiss es ist nicht besonderst gern gesehen), da ich gotos bei Fehleingaben eines Inputs einfach unverzichtbar finde und Auch (noch) keine Andere Möglichkeit kenne die mich vom hocker reisst.
Ich bin allerdings auch noch Anfänger darum solltest du vll doch eher noch auf andere hören Wink.

Pdd

BeitragFr, Jun 30, 2006 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Klasse Very Happy einer der genauso denkt wie ich ^^

btw: Input: Genau so hab ich das gelöst:
Code: [AUSKLAPPEN]

.NameEingeben

   SpielerName$ = Input("Gib deinen Namen ein: ")
   Flip
   If SpielerName$ <> "" Then
      gosub Menu
   Else
      Gosub NameEingeben
   EndIf


Und ich finde das eigentlich ganz praktisch Razz
 

antome

!!! gesperrt !!!

BeitragSa, Jul 01, 2006 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Gosub ist nicht weniger übersichtlich als eine Funktion,
denn die Subroutinen befinden sich (jedenfalls bei mir) auch gesammelt an einem Platz und werden durch ein Return abgeschlossen.

Aufgerufen wird eine Subroutine nur mit dem Präfix Gosub
und ehrlich gesgt finde ich das nun sehr übersichtlich, da man sofort sieht es ist ein Sprung
zu einer Subroutine. Bei einer Funktion sieht man nicht unbedingt on es eine interne Function oder eine eigene oder fremde Function ist besonders wenn sie in .decls für den Editor gekennzeichnet werden.

Des weitern müsste ein Aufruf zu einer Subroutine mit Gosub schneller abgearbeitet werden
als eine Function, da Compiler intern oft Register vor Aufruf einer Function auf den Stack geschoben werden und nachher wieder gelöscht, da benötigt auch immer etwas Zeit.
Darum benutze ich immer Gosub wenn ich keine Variablen übergebe oder zurückerhalten will.

Und bei Goto ist es ähnlich, nuir weil früher die Codes sehr unübersichlich waren ohne
Labels nur mit Zeilennummern und Schleifen ausser For / Next kaum vorhanden waren
hält sich immernoch das Gerücht Goto soll man nie und nimmer verwenden
aber Goto ist ein sehr schneller Sprungbefehl und NICHT ZU OFT eingesetzt bleibt auch
ein Programm mit Gotos übersichlich.
Manchmal sogar übersichtlicher als zu viele verschachtelte Schleifen.


....
blabla()
...
Gosub Subroutine1
,,,,,

Function blabla()

End Function


.SubroutineX

Return
antome

BtbN

BeitragSa, Jul 01, 2006 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Pdd hat Folgendes geschrieben:

Code: [AUSKLAPPEN]

.NameEingeben

   SpielerName$ = Input("Gib deinen Namen ein: ")
   Flip
   If SpielerName$ <> "" Then
      gosub Menu
   Else
      Gosub NameEingeben
   EndIf


Ich hätte das spontan mit einer Schleife gelöst:

Code: [AUSKLAPPEN]
Global SpielerName$
Repeat
    SpielerName = Input("Gib deinen Namen ein: ")
Until SpielerName <> ""
GoSub Menu


Das ist kürzer und auch wesentlich besser zu hinterschauen, wenn man nur mal eben über den Code guckt.

Pdd

BeitragSa, Jul 01, 2006 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
BORNtobeNAMELESS hat Folgendes geschrieben:


Ich hätte das spontan mit einer Schleife gelöst:

Code: [AUSKLAPPEN]
Global SpielerName$
Repeat
    SpielerName = Input("Gib deinen Namen ein: ")
Until SpielerName <> ""
GoSub Menu


Das ist kürzer und auch wesentlich besser zu hinterschauen, wenn man nur mal eben über den Code guckt.


hm ja daran hab ich auch gedacht, aber ich wusste nicht, ob dann (weil das ja wiederholt wird) jedesmal wenn man versucht etwas einzugeben, dann die eingabe wieder überschireben wird, (wenn du verstehst, was ich meine Razz ).

Ach und wo wir schon dabei sind: Also, da ich nun Pong und ein kleines "Auto"-Spielchen habe, wo man kisten ausweichen muss, will ich nun ein richtiges Autorennen machen, mit einer Strecke, von oben also 2D. Nun muss ich aber zu dem hintergrundbild(die strecke) irgendwie die informationen hinzufügen, wo die strecke befahrbar(teer) ist und wo nicht (bäume, etc). Hat jemand eine Idee, wie ich das machen könnte?

Rone

BeitragSa, Jul 01, 2006 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

Zitat:

Ach und wo wir schon dabei sind: Also, da ich nun Pong und ein kleines "Auto"-Spielchen habe, wo man kisten ausweichen muss, will ich nun ein richtiges Autorennen machen, mit einer Strecke, von oben also 2D. Nun muss ich aber zu dem hintergrundbild(die strecke) irgendwie die informationen hinzufügen, wo die strecke befahrbar(teer) ist und wo nicht (bäume, etc). Hat jemand eine Idee, wie ich das machen könnte?


Ich würde ein TileMap dafür nehmen.
z.B.:
1=Strasse, 2=Rasen, 3=Baum, 0=nicht befahrbar

000000000222222222222200000000000
000000000311111111111200000000000
002222220212222222221322222322000
002111120212000000021111111112000
002122122212000000023222222212000
002122111112000000000000000212000
002122222322222232222223222212000
002111111111111111111111111112000
002223222232222322222232222222000
000000000000000000000000000000000

mfg

PSY

BeitragSo, Jul 02, 2006 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

war schonmal da, incl. code zum testen: Idea

https://www.blitzforum.de/foru...p;start=20

l8er,
psy

Pdd

BeitragSo, Jul 02, 2006 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Rone hat Folgendes geschrieben:
Moin,

Zitat:

Ach und wo wir schon dabei sind: Also, da ich nun Pong und ein kleines "Auto"-Spielchen habe, wo man kisten ausweichen muss, will ich nun ein richtiges Autorennen machen, mit einer Strecke, von oben also 2D. Nun muss ich aber zu dem hintergrundbild(die strecke) irgendwie die informationen hinzufügen, wo die strecke befahrbar(teer) ist und wo nicht (bäume, etc). Hat jemand eine Idee, wie ich das machen könnte?


Ich würde ein TileMap dafür nehmen.
z.B.:
1=Strasse, 2=Rasen, 3=Baum, 0=nicht befahrbar

000000000222222222222200000000000
000000000311111111111200000000000
002222220212222222221322222322000
002111120212000000021111111112000
002122122212000000023222222212000
002122111112000000000000000212000
002122222322222232222223222212000
002111111111111111111111111112000
002223222232222322222232222222000
000000000000000000000000000000000

mfg


Hm gute idee! (habs auch schon ausprobiert, auf der rob site gabs nen RPG tut, und da im ersten kapitel stand das drinne...). Gibt es eigentich irgendein Programm, das solche Maps erstellt, weil das von had zu machen ist sehr aufwändig Rolling Eyes Very Happy

Hip Teen

BeitragSo, Jul 02, 2006 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitzcoder hat Folgendes geschrieben:
Hi.
Ein weiteres Problem ist, dass in einem Codeteil der mit gosub/Return aufgerufen wird, sind die Variablen anders. Eine Variable Speed, ist, wenn sie nicht als Global definiert ist, in einem Unterprogramm mit gosub anders, als im Hauptprogramm.

Eben nicht. Folgendes Programm gibt mir 5 aus:
Code: [AUSKLAPPEN]
a=5
Gosub blub

End

.blub
   Print a
Return

und genau da liegt der Vorteil von Gosub. Manchmal ist es sinnvoll weniger Globals und stattdessen den Namespace des Hauptprogramms zu benutzen. Zum Beispiel wenn man eine GUI verwendet und in Funktionen die Buttons etc. abfragen will. Dann braucht man bei Funktionen ewig viele Globals - oder man benutzt Gosub.
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

Rone

BeitragSo, Jul 02, 2006 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Hm gute idee! (habs auch schon ausprobiert, auf der rob site gabs nen RPG tut, und da im ersten kapitel stand das drinne...). Gibt es eigentich irgendein Programm, das solche Maps erstellt, weil das von had zu machen ist sehr aufwändig


guck mal hier:
http://www.blitzbase.de/_mapeditor/

Oder google einfach mal, es gibt haufenweise Map editoren im Netzt.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group