Goto/Gosub - Alternative?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

CrowSmith

ehemals "Fleisch"

Betreff: Goto/Gosub - Alternative?

BeitragDi, Okt 27, 2009 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Ich habe einen Quelltext für ein Level geschrieben. Da die Grundstruktur des levels immer gleich ist, und nur die Anordnung anders, möchte ich nach vollendetem Level (egal ob gewonnen oder verloren) den Quelltext neu ablaufen lassen.
Sofern gewonnen, wird die Variable Level um 1 erhöht, sodass ein anderes Level geladen wird.
Sofern verloren, wird dem Spieler die möglichkeit gegeben, den Level zu wiederholen.Dabei wird die Variable Level nicht erhöht.

Wie mache ich das OHNE Goto und Gosub ??

Gibt es eine Alternative die die gleiche Wirkung hat aber einfacher / fehlerlose ist?

MfG, der Fleisch
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

Nicdel

BeitragDi, Okt 27, 2009 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles in eine Schleife (While,Repeat) machen, am Ende der Schleife die Level-Variable erhöhen. Falls der Spieler stirbt wird das Erhöhen übersprungen.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

CrowSmith

ehemals "Fleisch"

BeitragDi, Okt 27, 2009 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe aber einen extra Bildschirm für die Frage ob der Spieler das level wiederholen will oder zum hauptmenü zurückkehren will. Dorthin komme ich ebenfalls mit Goto.

Wie löse ich das also?

Deinen Ansatz habe ich verstanden, aber dann kann ich den eben genannten Bildschirm nicht mit einbringen oder doch?
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

Thunder

BeitragDi, Okt 27, 2009 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest deinen Level-Code in eine Funktion packen und die Levelvariable als Parameter übergeben. Also, so:

Code: [AUSKLAPPEN]

levelvar=0
Spiel(levelvar)
While not KeyHit(1)
  Zeichne den Auswahlbildschirm
  Wenn der Benutzer weiterspielen möchte dann levelvar=levelvar+1:Spiel(levelvar)
  Ansonsten Exit
  Flip
Wend

Function Spiel(level%)
  Hier ist das Spiel drinnen.
End Function


Hast du sowas gemeint?
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

CrowSmith

ehemals "Fleisch"

BeitragDi, Okt 27, 2009 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Da wüsste ich jetzt noch nicht wie ich das genau machen muss Neutral

Muss mir das dann nochmal ausführlich anschauen, bzw auf meinen Code zugeschnitten :S

EDIT:

Hier meine Idee:

Code: [AUSKLAPPEN]

...
...
...
;Anfang Darstellung Level
...
...
...
...
;Level
...
...
...
...
If Verloren = 1
 ;Auswahlbidlschirm (Level Wiederholen oder zurück zum Menü)
 If (Button Levelwiederholen geklickt) Then Exit ; levelschleife beginnt von neuem    (oder nicht ?? Level muss ja neu aufgebaut werden...)
 If (Button Menü geklickt) Then ...  (Wie komme ich hier zurück zum Hauptmenü-Bildschirm ????)
EndIf
...
If Gewonnen = 1
 Level = Level + 1
EndIf
...
...
...
;Ende Darstellung Level


Frage 1: wie komme ich aus meinem Beendeten Level dann dazu, die Steine neu zu zeichnen?
Frage 2: wie komme ich aus meinem Beendeten Level in den Auswahlbildschirm und von da zurück zum Level (neu aufgebaut) oder ins Hauptmenü (der Hauptmenü-Code befindet sich über meinem Level Code)

...

mit Includes und Funktionen kenne ich mich noch nicht so aus :S
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

Thunder

BeitragDi, Okt 27, 2009 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktionen(Function) sind aber ziemlich wichtig. Includes sind für kleinere Projekte, die keine externen Libraries verwenden, sowieso nicht notwendig.


Code: [AUSKLAPPEN]

Global Levelvar%=1
Hauptmenu()


Function Hauptmenu()
  Wenn "Spiel Starten" angeklickt dann Spiel()
  Wenn "Beenden" angeklickt dann End
End Function

Function Spiel()
  Repeat
  ...
  Levelvar=Levelvar+1
  Until gewonnen=0
  Auswahlbildschirm()
EndFunction

Function Auswahlbildschirm()
 Wenn nochmal=1 dann Levelvar=0:Spiel()
Endfunction


Ungefähr so sollte es funktionieren. Natürlich gibt es andere Möglichkeiten. Wie gesagt, lerne dir unbedingt Funktionen an, diese machen den Code leichter wartbar(sogar Assembler kennt Funktionen).

PS: Verwende für den Zustand(Gewonnen / Verloren) nur eine Variable, z.B. gewonnen, die du beim verlieren auf 0 setzt und beim gewinnen auf 1. Das spart ganze 4 Bytes an Arbeitsspeicher Wink
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

CrowSmith

ehemals "Fleisch"

BeitragDi, Okt 27, 2009 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann ich später noch verbessern / kompremieren.

Ersteinmal will ich meinen Quelltext so einfach/primitiv wie möglich aufbauen, sozusagen als Fundament, auf dem ich dann aufbaue.

Später werde ich verkleinern / kompremieren / verbessern, was geht.

Frage:

wofür gibt es Goto/Gosub, wenn es eh nicht funktioniert? habe bisher von jedem gehört dass ich die Finger davon lassen soll... aber dabei ist MEIN PROBLEM genau DAS Anwendungsgebiet für Goto/Gosub...

Das verstehe ich nicht ...
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

Xeres

Moderator

BeitragDi, Okt 27, 2009 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Goto ist für Spezialfälle von nutzen, aber ganz und gar nicht zum sauberen programmieren zu empfehlen. Immer wiederkehrender Code kommt in Funktionen, so dass dein Spiel später aus einzelnen Blöcken aufgebaut ist, von denen jeder einen bestimmten Spielbereich abdeckt.

Mein grundsätzlicher Aufbau:
BlitzBasic: [AUSKLAPPEN]
Const GAME_STATE_MENU% = 0, GAME_STATE_PLAY% = 1
Global Game_State% = GAME_STATE_MENU
Local timer% = CreateTimer(60)

Global mx%, my%, mh1%, md1% ms%

Repeat
ms = MilliSecs()
mx = MouseX()
my = MouseY()
mh1 = MouseHit(1)
md1 = MouseDown(1)

Select Game_State
Case GAME_STATE_MENU
Run_Menu()
Case GAME_STATE_PLAY
Run_Play()
End Select

Flip(0)
WaitTimer(timer)
Cls
Until KeyHit(KEY_ESCAPE)
End
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Thunder

BeitragDi, Okt 27, 2009 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde Gosub ist total unnötig.
Goto dagegen kann sehr nützlich sein, und ich gebrauche es auch, wenn ich mit BlitzBasic programmiere, aber kann(!) es, wenn es falsch eingesetzt wird den Code unübersichtlich machen - deswegen wurde dir wahrscheinlich davon abgeraten.
Außerdem kann man es komplett durch Schleifen ersetzen.

Wenn du jetzt dein Fundament legen willst und später alles verbesserst, dann _MUSST_ du quasi auf Funktionen setzen sonst musst du mehrere Kilometer Code umschreiben.
Wenn du für dein Fundament Goto und Gosub verwendest verbaust du dir damit die Möglichkeiten der Wartbarkeit.

Das Anwendungsgebiet von goto war damals(Assembler) noch sehr klar. Denn mit If(cmp/test/...) und Goto(jmp/je/...) konnte man Schleifen implementieren, da diese in Assembler nicht enthalten sind. In den meisten höheren Programmiersprachen haben Goto und Gosub meist keinen Sinn. Ich verwende Sie in BB als fehlende continue Anweisung:

Code: [AUSKLAPPEN]
Repeat
.continue
...
If z="," Then goto continue1
Until z=""


Das hat meiner Meinung nach Sinn.


Edit:
Diesmal war ich zu langsam. Aber das Beispiel von Xeres ist gut.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

TimBo

BeitragDi, Okt 27, 2009 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
das Beispiel von Xeres ist echt gut...
so sieht meine Struktur auch aus ! zu 99%
ich lasse erst mit Waittimer() die Zeit vergehen und dann Flip ich...
Denn so ist 100% sichergestellt das nur die Gewünschte FPS erreicht wird, das verhindert das Flacker an einigen Bildschirmen.

Also kann mich auch Irren, meine aber, dass es vor dem Flip mehr Sinn macht.

Grüße
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.

Noobody

BeitragDi, Okt 27, 2009 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist völlig egal, wo das WaitTimer steht Wink

Das Flackern wird ja durch das Double Buffering verhindert und nicht durch den Timer, also ist dessen Position im Code relativ egal. Bei mir steht er wie bei Xeres immer direkt hinter dem Flip (wobei ich dafür das Cls am Anfang der Schleife habe).
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

TimBo

BeitragDi, Okt 27, 2009 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
nicht nur durch das DoubleBuffering.
Wenn ich ein Spiel mit 80 FPS auf meinem Flat zocke, der nur 75 dastellen kann, kann es sein, dass es wieder anfängt zu "flackern", da er sich beim malen selbst "überholt"

also wenn du es doch hinter dem Flip stehen hast, dann kann es doch sein , dass das Bild in 1 msc wieder geupdatet wird, da der Loop so schnell durch war.

Das heißt doch , dass wenn der Bildschirm nicht hinterherkommt es zum Flackern kommt.

Zitat:
Berechnen <- eine ms dauer
Flip <- seit dem letzten Warte sind 1 ms vergangen
Warte <-jetzt wartet er , bevor er weiter rechnet (?)


Zitat:
Berechnen <-dauer eine ms
Warte <-die überschüssige Zeit chillt der PC
Flip <-und nach dieser wartezeit kommt der Frame


ich finde das zweite logischer. Und auch "konstanter" -nicht ?
Haut mich nicht wenn ich aber gerade voll den Müll laber ^^

Greez
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.

CrowSmith

ehemals "Fleisch"

BeitragMi, Okt 28, 2009 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will ja nicht nerven aber könntet ihr das bitte in einem entsprechenden Thread diskutieren? Hier geht es immerhin um eine brauchbare Alternative von Goto/Gosub.

Also, ich suche immernoch nach einer Alternative.

Gruß, der Fleisch
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

TimBo

BeitragMi, Okt 28, 2009 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ich dachte das wäre schon geklärt, sry

benutze Functions . Ist am Anfang ungewohnt (habe mich auch sau spät (als ich angefangen habe) dazugerunden sie zu verwenden) sind aber sau nützlich.

Grüße
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.

CrowSmith

ehemals "Fleisch"

BeitragMi, Okt 28, 2009 3:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok also Funktionen sind mir jetzt schon häufiger zu Ohren gekommen doch ich kann sie einfach nicht auf meinen Source anwenden...


Hier ist zum Beispiel der Grundaufbau eines Levelauswahl - Bildschirmes, den ich gern ohne Goto verwenden würde. Momentan benutze ich nämlich noch Goto, wobei ich sagen muss dass es sogaer hierbei funktioniert!

Also hier der Source den ich gern in eine Funktion packen würde:

Code: [AUSKLAPPEN]

;Levelauswahl
Graphics 800, 600, 16
SeedRnd MilliSecs()
SetBuffer BackBuffer()
ClsColor 0,0,0
Cls

Cursor = LoadAnimImage ("./Graphics/Cursor/Cursor2.bmp",18,25,0,1)

Repeat
 Cls
 
 Color 225,0,0
 Rect 30,30,740,454,1
 For Breite = 0 To 9
  For Tiefe = 0 To 9
   Color 0,0,255
   Rect 30+3.5+Breite*73.5,30+4.75+Tiefe*44.75,70,40,1
  Next
 Next
 
 Color 255,0,0
 Rect 30,510,100,50,1

 Color 255,0,0
 Rect 670,510,100,50,1

 Color 255,0,0
 Rect 550,510,100,50,1

 Color 0,0,0
 Text 35,532.5, "Hauptmenü"
 
 Color 0,0,0
 Text 675,532.5, "Weiter"

 Color 0,0,0
 Text 555,532.5, "Zurück"

 X = MouseX()
 Y = MouseY()
 HidePointer
 MaskImage Cursor,255,255,255
 DrawImage Cursor,X,Y

 If (MouseX() >= 30 And MouseX() <= 30+100) And (MouseY() >= 510 And MouseY() <= 510+50)
  If MouseHit(1) Then Goto Hauptmenü
 EndIf

 If (MouseX() >= 550 And MouseX() <= 550+100) And (MouseY() >= 510 And MouseY() <= 510+50)
  If MouseHit(1) Then Goto Hauptmenü
 EndIf

 If (MouseX() >= 670 And MouseX() <= 670+100) And (MouseY() >= 510 And MouseY() <= 510+50)
  If MouseHit(1) Then Goto Hauptmenü
 EndIf
 
 Flip
Forever


Meine Fragen:
-wie packe ich das ordentlich in eine Funktion?
-wie verwende ich diese Funktion dann?
-wie komme ich aus dieser Funktion z.B. in mein Hauptmenü, bzw. in ein angewähltes Level?
-wohin packe ich die Funktion?

Ich wäre dankbar wenn mir das jemand erklären könnte.

Aber jetzt zu meinem eigentlichen Problem: Goto/Gosub

Hier ist jetzt mal mein Beispiel:

Code: [AUSKLAPPEN]

.Hauptmenü
Graphics 800, 600, 16
SeedRnd MilliSecs()
SetBuffer BackBuffer()
ClsColor 0,0,0
Cls
...
...
repeat
 cls
 ...
 ...
 ...
 flip
forever
...
...
...
.LevelMarke
Graphics 800, 600, 16
SeedRnd MilliSecs()
SetBuffer BackBuffer()
ClsColor 0,0,0
Cls
...
...
repeat
 cls
 ...
 ...
 ...
 If Gewonnen = 1
  Level = Level + 1
  Gewonnen = 0
  Goto LevelMarke
 EndIf
 
 If Verloren = 1
  Verloren = 0
  Goto Verlorenbildschirm
 EndIf
 ...
 ...
 ...
 flip
forever
...
...
...
.Verlorenbildschirm
Graphics 800, 600, 16
SeedRnd MilliSecs()
SetBuffer BackBuffer()
ClsColor 0,0,0
Cls
...
...
repeat
 cls
 ...
 ...
 ...
 Darstellung zweier Buttons:
 Wenn der Button "Hauptmenü" geklickt wird:  Goto Hauptmenü
 wenn der Button "Nochmal versuchen" geklicjt wird:  Goto Levelmarke
 ...
 ...
 flip
forever


So ihr seht ja dass ich eine .Levelmarke habe und eine Marke .Hauptmenü

Das Goto zum Hauptmenü funktioniert, das Goto zum Level jedoch nicht...........

Warum?? ich habe beide Marken ÜBER den Beginn der Darstellung gepappt, und immerhin funktioniert die Hauptmenü-Marke ja...

Wenn ich die Levelmarke anspringen will, startet das Level nicht neu sondern es erscheint direkt wieder der Verlorenbildschirm, was nicht sein dürfte, da ich die Verloren / Gewonnen Variablen wieder = 0 setze, sobald sie den Wert 1 erreichen.

Also wenn mir jemand sagen könnte warum das eine Goto funktioniert und das andere Goto nicht, dann müsste ich garnicht nach einer Alternative suchen sondern würde meinen Source "reparieren" damit das hinhaut mit der Levelmarke.

Ich hoffe jemand kann mir IRGENDWIE helfen.

MfG, der Fleisch
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

TimBo

BeitragMi, Okt 28, 2009 3:31
Antworten mit Zitat
Benutzer-Profile anzeigen
oh oh , das sieht nicht gut aus...

Also benutze immer nur eine Hauptschleife

BlitzBasic: [AUSKLAPPEN]

Repeat

WaitTimer(timer)
Flip:Cls
Until KeyHit(1)


in dieser Schleife spielt sich ALLES ab,
ob Menü , nicht Menü föllig egal.

Du brauchst eine Variable mit der du alles kontrollieren kannst.
Ich nenne sie Modus

BlitzBasic: [AUSKLAPPEN]

Global modus=1 ; am Anfang ins Menü

Repeat
Select modus
Case 1
Menue()
Case 2
Spiel()
Case 3
YouWin()
Case 4
YouLose()
Case 5
Highscore()
End Select

WaitTimer(timer)
Flip:Cls
Until KeyHit(1)

Function Menue()
If Button=1 Then Modus=2 ;wir gehen ins Spiel
End Function


habe jetzt 2 Funktionen einmal Menue und einmal Spiel()
In diese Funktionen kann ich jeweil das Menü bzw. das Spiel schreiben.
ABER KEIN FLIP etc verwenden...

wenn ich im Menü sagen will , ich will das spiel starten , dann änderst du die Variable Modus von 1 auf 2 und schon wird das spiel im nächsten durchlauf gestartet. Mit der Variable Modus sagst du dem Programm , welche Funktionen du haben willst.

Ganz ohne goto.

Grüße
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.

BladeRunner

Moderator

BeitragMi, Okt 28, 2009 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
wofür gibt es Goto/Gosub, wenn es eh nicht funktioniert? habe bisher von jedem gehört dass ich die Finger davon lassen soll... aber dabei ist MEIN PROBLEM genau DAS Anwendungsgebiet für Goto/Gosub...

- Goto und Gosub sind Relikte aus einer Zeit als der Arbeitsspeicher sehr knapp und die Rechenleistung sehr gering waren. Man nahm damals eine Unübersichtlichkeit in Kauf um Platz und Zeit zu sparen. Zudem waren viele der moderneren Sprachkonzepte noch in den Kinderschuhen. Sie sind nur noch aus reinen Kompatiblitätsgründen in moderneren Basic-Dialekten enthalten.

Dein Problem ist nicht genau DAS Anwendungsgebiet für Gosub/Goto, denn de facto ist kein Problem der Informatik nur mit diesen Strukturen lösbar.
Funktionen bieten Dir Datenkapselung und übersicht und sorgen für einen aufgeräumteren Stil. Der nächste Schritt wäre OOP, was eine noch weitere Kapselung bringt. Du musst nur deine Sichtweise des Problemes ein wenig anpassen. Spiel mit function herum, probier sie aus. Nach einer Zeit wirst Du nicht mehr ohne sie wollen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Tankbuster

BeitragMi, Okt 28, 2009 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Repeat

WaitTimer(timer)
Flip 0
Cls
Until KeyHit(1)


Mein Gott, warum vergisst jeder immer die NULL hinter dem Flip? Laughing
Twitter
Download Jewel Snake!
Windows|Android

TimBo

BeitragMi, Okt 28, 2009 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
mh ich habe es bewusst zu Flip 1 gemacht.
Flip 1 wartet ja nur , bis der Bildschirm bereit ist. Und sendet es dann rüber. Der timer sorgt für die FPS.
Der Vorteil ist halt, dass man den Bildschirm nicht "überholen" kann, und so ein Flackern entsteht.
Natürlich kann es durch das Flip 1 zu verlangsamungen kommen , dann muss man halt einen FPS Counter machen , der dann die Synchronisation auf 0 stellt. Flip 0 dann eben.

Grüße
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.

BladeRunner

Moderator

BeitragMi, Okt 28, 2009 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...hp?t=25242 Lesen, TimBo, lesen...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group