goto oder gosub frage

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

*GHOST*

Betreff: goto oder gosub frage

BeitragDo, Apr 07, 2005 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
also, ich habe mein programm in drei teile geteilt:

.start
.modus
.hilfe

wenn ich im .start bin, dann kann man, in dem eine best. aktion durchgeführt wurde, zum modus und zur hilfe kommen.
wenn ich zum modus will, klappt das prima und wenn man da etwas klickt, gehts auch wieder zum start. allerdings wenn ich auf hilfe klicke, dann bleibt das programm hängen...
#
warum?

hat einer ne ahnung, danke! Wink
 

Michi

BeitragDo, Apr 07, 2005 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ohne den ganzen Code wird dir das wohl keiner sagen können
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Hubsi

BeitragDo, Apr 07, 2005 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermutlich Tippfehler oder dergleichen. Poste bitte den Code, bzw. wenn er schon länger ist den entsprechenden Ausschnitt, dann ists sehr viel leichter zu helfen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

*GHOST*

BeitragDo, Apr 07, 2005 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
okay:

Code: [AUSKLAPPEN]


.start

Cls
Graphics 1024,768
SetBuffer BackBuffer()



background=LoadImage("data\gfx\background.jpg")
cursor=LoadImage("data\gfx\cursor.bmp")
starten_button=LoadImage("data\gfx\buttons\starten.bmp")
optionen_button=LoadImage("data\gfx\buttons\optionen.bmp")
credits_button=LoadImage("data\gfx\buttons\credits.bmp")
beenden_button=LoadImage("data\gfx\buttons\beenden.bmp")
hilfe_button=LoadImage("data\gfx\buttons\hilfe.bmp")

MaskImage starten_button,0,255,0
MaskImage optionen_button,0,255,0
MaskImage credits_button,0,255,0
MaskImage beenden_button,0,255,0
MaskImage hilfe_button,0,255,0



While Not KeyHit(1)




DrawBlock background,0,0

DrawImage starten_button,370,200
DrawImage hilfe_button,370,235
DrawImage credits_button,370,270
DrawImage beenden_button,370,305



mausx=MouseX()
mausy=MouseY()



Text 20,20, mausx
Text 70,20,mausy



If MouseX()>370 And MouseX()<370+270 And MouseY()>200 And MouseY()<200+30 And MouseDown(1) Then Gosub spielmodi
If MouseX()>370 And MouseX()<370+270 And MouseY()>235 And MouseY()<235+30 And MouseDown(1) Then Gosub hilfe
If MouseX()>370 And MouseX()<370+270 And MouseY()>270 And MouseY()<270+30 And MouseDown(1) Then Text 100,100,"credits"
If MouseX()>370 And MouseX()<370+270 And MouseY()>305 And MouseY()<305+30 And MouseDown(1) Then End
 



Flip



Wend



.spielmodi

Cls



einzel_button=LoadImage("data\gfx\buttons\einzel.bmp")
multi_button=LoadImage("data\gfx\buttons\multi.bmp")
training_button=LoadImage("data\gfx\buttons\training.bmp")
hauptmenü_button=LoadImage("data\gfx\buttons\hauptmenü.bmp")

MaskImage einzel_button,0,255,0
MaskImage multi_button,0,255,0
MaskImage training_button,0,255,0
MaskImage hauptmenü_button,0,255,0



While Not KeyHit(1)



DrawBlock background,0,0

DrawImage einzel_button,370,200
DrawImage multi_button,370,235
DrawImage training_button,370,270
DrawImage hauptmenü_button,370,305



mausx=MouseX()
mausy=MouseY()



Text 20,20, mausx
Text 70,20,mausy



If MouseX()>370 And MouseX()<370+270 And MouseY()>200 And MouseY()<200+30 And MouseDown(1) Then Text 100,100,"einzel"
If MouseX()>370 And MouseX()<370+270 And MouseY()>235 And MouseY()<235+30 And MouseDown(1) Then Text 100,100,"multi"
If MouseX()>370 And MouseX()<370+270 And MouseY()>270 And MouseY()<270+30 And MouseDown(1) Then Text 100,100,"training"
If MouseX()>370 And MouseX()<370+270 And MouseY()>305 And MouseY()<305+30 And MouseDown(1) Then Goto start



Flip



Wend







.hilfe

Cls


schrift=LoadFont("data\stgs\eurasia.ttf",20)
SetFont schrift
hauptmenü_button=LoadImage("data\gfx\buttons\hauptmenü.bmp")
Text 370,220,"Supersoakerspiel text"

While Not KeyHit(1)

DrawBlock background,0,0

DrawImage hauptmenü_button,370,235


If MouseX()>370 And MouseX()<370+270 And MouseY()>235 And MouseY()<235+30 And MouseDown(1) Then Text 100,100,"multi"




Wend

Hubsi

BeitragDo, Apr 07, 2005 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Da sind gleich mehrere Fehler. Zum einen lädst Du jedesmal wenn Du irgendein Label aufrufst die Grafiken und Schriftarten neu, zum anderen fehlt bei .hilfe in der Schleife wohl das Flip, was wahrscheilich Deinen Fehler darstellt Wink

Edit: Ein Cls ausserhalb der Schleife ist meist nicht sonderlich sinnvoll Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

*GHOST*

BeitragDo, Apr 07, 2005 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ich danke dir für die tips Very Happy
 

David

BeitragDo, Apr 07, 2005 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ein Tipp, gewöhn' dir das Zeuch mit Goto etc... lieber ganz schnell ab. Smile
Spätestens bei einem größeren Programm wirst du es irgendwann verfluchen, das ist sowas von unsauber!

grüße
 

*GHOST*

BeitragDo, Apr 07, 2005 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
aber da ist nochwas:

sagen wir, ich bin im hauptmenü (start)

klicke dann auf hilfe, dann kommt hilfe. von der hilfe aus kann ich ja zurück ins menü (start). das funzt auch. aber wenn ich dann NOCHMAL in die hilfe will, dann kommt bei jedem klick nur wieder das hauptmenü, nicht die hilfe. was ist das?!?

PS: mit dem modus funzt das immer, so wie ich das will, nur die hilfe halt nicht...
 

David

BeitragDo, Apr 07, 2005 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Es gibt Leute die werden's nie lernen...
Versuch es doch lieber gleich ohne den Goto Kram zu lösen?!? Siehstja, das du jetzt schon Probleme bekommst. Twisted Evil

grüße
 

*GHOST*

BeitragDo, Apr 07, 2005 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
wie soll ich das denn sonst lösen?????? Crying or Very sad
 

David

BeitragDo, Apr 07, 2005 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nicht alles im "Spagetticodestil" programmieren, sondern die Möglichkeiten von BlitzBasic etwas mehr ausschöpfen, soll heisen, Funktionen, Schleifen etc verwenden!

grüße
 

*GHOST*

BeitragDo, Apr 07, 2005 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du mir sagst, wie ich mein menü mit functionen machen kann, dann will ich es gerne tun... Smile
 

David

BeitragDo, Apr 07, 2005 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Du könntest beispielsweise deine Codeteile zwischen, den Labels, in Funktionen packen und diese dann bei Bedarf aufrufen.
Außerdem schadet ein wenig Nachdenken sowiso nichts!

grüße
 

*GHOST*

BeitragDo, Apr 07, 2005 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, hab mir mal die hilfe nochmals gründlich durchgeguckt, ich weiß jetzt wie functionen funktionieren ( Laughing ) Wink

Egon Dragon

BeitragDo, Apr 07, 2005 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist nicht schwer

überall wo du in deinem code gosub... geschrieben hast schreibst du jetzt
den namen der function zum beispiel:

Code: [AUSKLAPPEN]

if keyhit(bla) then Hilfe()


und da wo du das hilfe-label hast schreibst du:

Function Hilfe()
;irgentwas
end function

und so weiter


- da fällt mir noch ne frage ein sind goto und gosub langsamer oder schneller als while und repeat. ich frage das, weil ich mal son code gesehen hab wo stand:

Code: [AUSKLAPPEN]

.schleifenanfang

;irgentwas wo bla1 >0 wird wenn man was macht

if bla1=0 then goto schleifenanfang

;irgentwas anderes

Hubsi

BeitragDo, Apr 07, 2005 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du ein wenig Webspace? dann pack das Zeug mal zusammen (Grafiken und Code) und lads hoch, damit man das ausprobieren kann. Ich hab keine Lust den ganzen Code zu durchwühlen und die Loadimages zu ersetzen Very Happy

P.S.: Zu dem "Goto ist böse": Ich verwende auch Goto / Gosub und wenn man es überlegt einsetzt ist es keinesfalls evil. Nur weils mal in der OH stand muss es doch nicht jeder nachplappern Wink

Edit: @Egon Dragon: Ich habs nicht ausprobiert, aber es dürfte sich im Speed nicht unterscheiden da beim compillieren die Schleifen auch in Goto-Konstrukte zerlegt werden.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
  • Zuletzt bearbeitet von Hubsi am Do, Apr 07, 2005 14:52, insgesamt einmal bearbeitet

diGGa

GruppenKaspar

BeitragDo, Apr 07, 2005 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
goto überlegt einsetzen, und goto überall einsetzen is ja auch ein unterschied nesch
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram

Hubsi

BeitragDo, Apr 07, 2005 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicher, aber an der Struktur des Codes von GHOST ist doch in dieser Hinsicht nichts auszusetzen? Oder ist ein entscheidender Unterschied wenn ich mit zwölfundneunzig Trilliarden Globalen bzw. Parametern arbeiten muss oder ob ich ein Gosub einsetze (in dem Stadium sicher auch nicht erwähnenswert, aber der Code wird sich ja noch weiter entwickeln) ? Aber im Prinzip ist es mir wurscht, soll jeder so machen wie er es für richtig hält und mir mein Goto lassen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Gast

BeitragFr, Apr 08, 2005 8:31
Antworten mit Zitat
Noch n Tipp!
Setzt die Labels immer hinter dein Programmende (d.h. nach END) da sie sich, wenn sie im Programmcode an der Reihe sind, auch ohne Aufforderung ausgeführt werden!
Ausser du willst es natürlich so haben!!!!!!!! Wink
MFG

Hof das war irgendwie verständlich!!! Confused

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group