Variable in Variablen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

progger3D

Betreff: Variable in Variablen

BeitragDi, Apr 27, 2010 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe eine Frage.
Für ein kleines Programm was ich schreibe, brauche ich in eine Variablen eine Variable.

BSP:
Code: [AUSKLAPPEN]

x=x+1
goto Zeile"x"
.Zeile1
.Zeile2
...


oder
Code: [AUSKLAPPEN]

Zeile_"x"=Input("...")
...


Geht das? Wenn ja! Wie?

Eingeproggt

BeitragDi, Apr 27, 2010 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit den Labels geht leider nicht, aber um mehrere EIngaben zu speichern bietet sich Dim wunderbar an:

Code: [AUSKLAPPEN]
Dim zeilen(5)
For i=0 To 5
  zeilen(i)=Input("Gib ein was in Zeile "+i+" steht: ")
Next


mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Thunder

BeitragDi, Apr 27, 2010 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein. Das geht nicht. Gewöhn dir GOTO am Anfang nicht an. Später ist es ganz nützlich, aber hier wird es von sehr vielen abgelehnt.
Ich nehme an für so einen Fall ist Select mit Case das Richtige:
BlitzBasic: [AUSKLAPPEN]
x=Input()
Select x
Case 1 ;.Zeile1
Case 2 ;.Zeile2
; ...
End Select



mfg Thunder

Edit: Zu langsam. Vielleicht habe ich den Startbeitrag falsch verstanden.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

progger3D

BeitragMi, Apr 28, 2010 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Schön
 

BBPro2

BeitragMi, Apr 28, 2010 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Nein. Das geht nicht. Gewöhn dir GOTO am Anfang nicht an. Später ist es ganz nützlich, aber hier wird es von sehr vielen abgelehnt.


zurecht. man braucht es nie (!) und es erzeugt schlechten code
wir sollten froh sein, dass wir eine höhere programmiersprache vor uns haben und
keinen assembler code erzeugen...

wann bitte sollte es später ganz nützlich sein?
wenn man vernünftig programmiert sollte dieser fall niemals eintreten imo

Thunder

BeitragMi, Apr 28, 2010 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
In BlitzMax brauche ich es nie, aber in BlitzBasic:

BlitzMax: [AUSKLAPPEN]
Repeat
If ... Then Continue
Until ...


BlitzBasic: [AUSKLAPPEN]
Repeat
.loop1mark
If ... Then Goto loop1mark
Until ...


Einziger Nachteil: Das geht nur bei Repeatschleifen gut.
Aber ich verwende es und ich denke es gibt einige andere Bereiche in denen Goto einfach die sauberere Lösung ist.

mfg Thunder


Edit: Goto ist nicht Assembler - Goto ist BASIC! Very Happy
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

BBPro2

BeitragMi, Apr 28, 2010 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@ erster teil:

sehe ich anders, alles lässt sich ohne goto lösen Wink

@ edit:

ja goto ist basic... aber goto ist eine 1:1 umsetzung der jump variante von assembler Wink

Thunder

BeitragDo, Apr 29, 2010 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe auch nichts anderes behauptet. Alles lässt sich ohne Goto lösen, allerdings, Zitat:
Ich hat Folgendes geschrieben:
[...] und ich denke es gibt einige andere Bereiche in denen Goto einfach die sauberere Lösung ist.


Edit: Es musste ja unbedingt einen geben, der goto so stark ablehnt, dass ich auf meinen Beitrag in dem ich schrieb, dass man es am Anfang(!) sein lassen sollte, eine Antwort kassiere Confused
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Hubsi

BeitragFr, Apr 30, 2010 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Wobei ich das Gefuehl habe das es in den allermeisten Faellen die neuen bis frischen sind die Goto so verteufeln.
Vielleicht daher das sie es immer wieder eingetrichtert bekommen und bisweilen noch nicht an groesseren Projekten gearbeitet haben. Denn dort sehe ich es immer wieder das eine deutliche Erleichterung sein kann, ganz ohne Spaghetti-Code. Fuer das Problem von Progger3D ist Goto so fehl am Platz wie sonst nichts, aber ... ja, siehe Satz 2 und 3 Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

BBPro2

BeitragFr, Apr 30, 2010 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hubsi hat Folgendes geschrieben:
Wobei ich das Gefuehl habe das es in den allermeisten Faellen die neuen bis frischen sind die Goto so verteufeln.
Vielleicht daher das sie es immer wieder eingetrichtert bekommen und bisweilen noch nicht an groesseren Projekten gearbeitet haben. Denn dort sehe ich es immer wieder das eine deutliche Erleichterung sein kann, ganz ohne Spaghetti-Code. Fuer das Problem von Progger3D ist Goto so fehl am Platz wie sonst nichts, aber ... ja, siehe Satz 2 und 3 Very Happy


nein
wenn der code vernünftig aufgebaut ist wird ganz sicher niemals ein goto besser sein
als irgendwas anderes
in richtig großen projekten würde ich von goto erst recht abraten...
es mag sein dass es für den programmierer im ersten moment leichter und "eleganter" scheint

leicher vielleicht... aber eleganter in keinem fall

durch goto wird der code einfach viel zu statisch und lässt sich kaum mehr erweitern, umbauen etc.
deswegen: kein goto, in großen projekten noch weniger als in kleinen

Hubsi

BeitragSa, Mai 01, 2010 3:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun gut, das sieht wohl jeder etwas anders. Ich werde weiterhin beim Goto bleiben, denn ich habe noch keine wirklich gute Loesung fuer folgendes finden koennen:

Code: [AUSKLAPPEN]
.menu
repeat ; Menuschleife
if auswahl=neues Spiel then goto new_game
if auswahl=Spiel laden then goto load_game
until keyhit(1)
end

.load_game
LoadTheGame()
Do some other shit

.new_game
Tu_alles_was_immer_gemacht_werden_muss()


Klar koennte man auch eine Hilfsvariable nehmen welche True ist wenn das Spiel geladen werden soll, nur finde ich das sogar uebersichtlicher. Zudem kann ich ganz ohne grossen Trara ins Menu zurueck. Diese Struktur verwende ich seit vielen Jahren. Aber wie gesagt, schlussendlich machts jeder so wie er meint Very Happy

Edit: Fehler im Pseudocode ausgebessert.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
  • Zuletzt bearbeitet von Hubsi am Sa, Mai 01, 2010 10:04, insgesamt einmal bearbeitet

US-Blitz

ehemals "SimssmiS"

BeitragSa, Mai 01, 2010 9:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich stimme hubsi zu vorallem im spielmenü sind goto und gosub echt eine erleichterung

Xeres

Moderator

BeitragSa, Mai 01, 2010 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Gerade beim Menü ist GoTo fehl am Platz - um Programmteile zu Kapseln nimmt man Funktionen - die Hubsi in seinem Beispiel komischer Weise auch verwendet - da ist das GoTo wirklich nur noch zur verkomplizierung da.
Um Continue zu imitieren oder doppelt verschachtelte Suchschleifen zu beenden ist GoTo in Ordnung; für Anfänger bleibt GoTo die schlechteste Wahl zur Programmstrukturierung.
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)

Hubsi

BeitragSa, Mai 01, 2010 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres, ich denke Du hast meinen Beispielcode in den falschen Hals bekommen. Das soll lediglich zeigen wie ich Programmteile, die an sich nichts miteinander zu schaffen haben, voneinander trenne. Ich verwende Functionen gerne wo sie Sinn machen, aber nicht in einer Form wie dieser bspw.:

BlitzBasic: [AUSKLAPPEN]
Repeat ; Menuschleife
If MouseHit(1)
If Mauszeiger_ueber_Spiel_starten Then main()
EndIf
Until KeyHit(1)
End

Function main()
; das eigentliche Spiel
End Function


Zum einen sieht das optisch grottig aus und zum anderen, der eigentlich wichtige Grund, brauche ich in der Variante eine deutlich größere Menge an globalen Variablen, die ich eigentlich so weit als möglich vermeide. Die ganzen Einstellungen aus dem Menü wie Tastenbelegung, Lautstärke, Schwierigkeitsgrad... häng dran was immer Dir einfällt wären ja quasi "verloren". Ein "mal eben da und dann dort hinspringen" führt unweigerlich zum Tod des Projekts, soweit klar. Aber zur elemetaren Trennung von grundverschiedenen Teilen wie Menü und Spiel setze ich es seit Anbeginn der Zeit ein und bin nie auf die Schn... Nase gefallen Very Happy In der konkreten Fragestellung ist es aber natürlich fehl am Platz, kein Thema.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Xeres

Moderator

BeitragSa, Mai 01, 2010 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit der Zeit sammeln sich ein paar Globale Variablen an, aber da die für das ganze Spiel gelten, kann ich eigentlich gut damit leben.
Mein Favorisierter Aufbau:
BlitzBasic: [AUSKLAPPEN]
Global Game_State
Const Game_State_MAIN=0, Game_State_OPTIONS=1, Game_State_PLAY=2, Game_State_SCORE=3, Game_State_CREDITS=4

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


Select Game_State
Case Game_State_MAIN
Run_Menu()
Case Game_State_OPTIONS
Run_Options()
Case Game_State_PLAY
Run_Game()
Case Game_State_SCORE
Run_ScoreBoard()
Case Game_State_CREDITS
Run_Credits()
End Select

Flip(0)
WaitTimer(Frametimer)
Forever
End

Der Variable Game_State weißt man einfach die passende Konstante zu. Ist Leicht zu lesen und der Programmlogik ist leicht zu folgen.
Wer weiß was er tut - und im Forum dazu dann keine Hilfe erwartet - kann ja eh konstruieren was er möchte.
Zitat:
Ein "mal eben da und dann dort hinspringen" führt unweigerlich zum Tod des Projekts, soweit klar.
Solange wir uns darin einig sind Wink
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)
 

BBPro2

BeitragSa, Mai 01, 2010 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@hubsi

dein fehler liegt schon darin, dass du einen programmteil hast, welcher quasi das gesamte spiel
übernimmt

es sollte weder eine funktion, noch einen über goto erreichbaren programmabschnitt geben, welcher die
gesamte spieldynamik übernimmt...

ein programm sollte viel viel viel viel viel feiner strukturiert sein und dann kann man das alles über funktionen
regeln und benötigt kein "goto maingame" mehr

klar kannst du das für dich weiterhin so machen etc
so lange du das nur als hobby betreibst ist das ja vollkommen legitim und egal
weder werden die projekte dann so groß, dass es unabdingbar wäre anders zu programmieren
noch störst du jemanden damit

solltest du das ganze jedoch wie ich beruflich anstreben wäre eine feinere strukturierung
sinnvoll
blitzbasic ist aber ohnehin nicht die perfekte sprache für so etwas... oop erleichtert das z.b. ungemein

Hubsi

BeitragSo, Mai 02, 2010 1:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann Dir nicht folgen wie ich oder man es anders strukturieren könnte? Das Spiel an sich hat ja mit dem Menü (in Bezug auf den Beispielcode) erstmal nichts zu schaffen? Ich fürchte ich blick nicht was Du meinst Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

FireballFlame

BeitragSo, Mai 02, 2010 2:16
Antworten mit Zitat
Benutzer-Profile anzeigen
BBPro2 hat Folgendes geschrieben:
wenn der code vernünftig aufgebaut ist wird ganz sicher niemals ein goto besser sein
als irgendwas anderes

Doch.
Für BlitzMax und viele andere Sprachen magst du Recht haben, aber in BB ergeben sich beispielsweise durch einen fehlenden "Continue"-Befehl durchaus Situationen, in denen das strikte Vermeiden von Goto den Code augesprochen hässlich macht.

EDIT: Oh, ich sehe gerade, es wurde schon gesagt. Trotzdem: Goto zu vermeiden ist meiner Meinung nach nur sinnvoll, denn einem die Programmiersprache einen guten Ersatz für für die jeweilige Situation bietet. Das ist in BB nicht immer gegeben.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group