Seite 1 von 1
variable Variablen?
Verfasst: 11.04.2009 12:25
von ralfschmitt
Moin,
ich programmiere zur Übung ein "Hangman"-Spiel auf der Konsole. Nun möchte ich in Abhängigkeit von der Fehlerquote das entsprechende Hangman-Stadium einblenden. Dafür habe ich ne numerische Variable, die heißt
Hangman.
Da ich auf der Konsole arbeite, besteht mancher Hangman-Zustand ja aus mehreren Zeilen Zeichen, deshalb kann ich keine Struktur oder Array verwenden. Statt dessen würde ich Prozeduren bzw. Gosubs verwenden. Da müßte ich dann aber den Namen zusammenflicken. Wie geht das?
Beispiel:
Code: Alles auswählen
If Hangman > 0
For i= 1 To i <= Hangman Step 1
Gosub_i
Next
EndIf
Gruß
Ralf
Re: variable Variablen?
Verfasst: 11.04.2009 12:32
von cxAlex
> Da ich auf der Konsole arbeite, besteht mancher Hangman-Zustand ja aus mehreren Zeilen Zeichen, deshalb kann ich keine Struktur oder Array verwenden.
Ich versteh die Logik dahinter nicht.
Mach einfach für jeden Zustand eine Procedure und die rufst du je nach Zustand auf. Und wenn das ganze unbedingt über nen Counter machen musst:
Code: Alles auswählen
Prototype _HangmanState()
Structure HangmanState
Show._HangmanState
EndStructure
Procedure State1()
; Hangman Zeichnen
Debug "Hangman1"
EndProcedure
Procedure State2()
; Hangman Zeichnen
Debug "Hangman2"
EndProcedure
Procedure State3()
; Hangman Zeichnen
Debug "Hangman3"
EndProcedure
Dim State.HangmanState(3)
State(1)\Show = @State1()
State(2)\Show = @State2()
State(3)\Show = @State3()
For i = 1 To 3
State(i)\Show()
Next
Und in die Proceduren kommen eben deine Print(),... mit was du eben den Hangman zeichnest.
PS:
Deine For - Loop pass auch nicht ganz (Hast du früher C programmiert ?)
> For i= 1 To i <= Hangman Step 1
müsste
> For i= 1 To Hangman Step 1
heißen, oder
> For i= 1 To Hangman
, Step 1 ist Standard.
Verfasst: 11.04.2009 12:34
von Kaeru Gaman
garnicht.
gewöhn dir am besten GoSub ganz schnell wieder ab.
für so etwas würde sich ggf eine Select/Case konstruktion empfehlen.
aber:
> besteht mancher Hangman-Zustand ja aus mehreren Zeilen Zeichen, deshalb kann ich keine Struktur oder Array verwenden.
wieso? wo ist das problem?
definier dir ein Array von Strings zweidimensional.
die eine Dimension ist die Zeile, die andere das Stadium.
[edit]
@cxAlex
oy, bitte! doch nicht mit Procedure-Adressen in Strukturen ankommen!
das ist ja ein fürchterlicher Overkill für so ein echtes Anfänger-Problem.
Verfasst: 11.04.2009 12:40
von ralfschmitt
mhm, wahrscheinlich habe ich Strukturen einfach noch nicht richtig verstanden
Danke für die Tipps. Ich setz mich gleich mal dran und probiere das aus.
Und richtig, mein Loop hat gewisse Schreibfehler. Die stammen aber eher von PHP

Verfasst: 11.04.2009 12:43
von cxAlex
Ich wollte es nur so machen wie er es beschrieben hat, aber du hast recht, das dürfte wohl Overkill sein (mal abgesehen davon ob das ein Anfänger versteht). Hier mal dasselbe mit Select - Case:
Code: Alles auswählen
Procedure State1()
; Hangman Zeichnen
Debug "Hangman1"
EndProcedure
Procedure State2()
; Hangman Zeichnen
Debug "Hangman2"
EndProcedure
Procedure State3()
; Hangman Zeichnen
Debug "Hangman3"
EndProcedure
For State = 1 To 3
Select State
Case 1
State1()
Case 2
State2()
Case 3
State3()
EndSelect
Next
Verfasst: 11.04.2009 13:27
von Kaeru Gaman
hier noch ne demo, wie ich das mit nem 2dimensionalen Stringarray meinte...
Code: Alles auswählen
Dim Hang.s(5,3)
Hang(0,0) = "dies 1"
Hang(0,1) = "ist 1"
Hang(0,2) = "erster 1"
Hang(0,3) = "status 1"
Hang(1,0) = "dies 2"
Hang(1,1) = "ist 2"
Hang(1,2) = "zweiter 2"
Hang(1,3) = "status 2"
Hang(2,0) = "dies 3"
Hang(2,1) = "ist 3"
Hang(2,2) = "dritter 3"
Hang(2,3) = "status 3"
Hang(3,0) = "dies 4"
Hang(3,1) = "ist 4"
Hang(3,2) = "vierter 4"
Hang(3,3) = "status 4"
Hang(4,0) = "dies 5"
Hang(4,1) = "ist 5"
Hang(4,2) = "fünfter 5"
Hang(4,3) = "status 5"
Hang(5,0) = "dies 6"
Hang(5,1) = "ist 6"
Hang(5,2) = "sechster6"
Hang(5,3) = "status 6"
OpenConsole()
For Status = 0 To 5
PrintN("Anzeige Status " + Str(Status+1))
For Zeile = 0 To 3
PrintN(Hang(Status,Zeile))
Next
PrintN("")
Next
Input()
Verfasst: 14.04.2009 15:49
von ralfschmitt
Erst noch mal Danke! an alle. Hab das jetzt mit case ... select gelöst.
in PHP kann ich halt den Inhalt einer Variablen zum Namen einer neuen Variablen machen, dachte das ginge in Purebasic vlt. auch
Gruß
Ralf
Verfasst: 14.04.2009 18:14
von Falko
Vielleicht könnte man es ja auch mit Preferences machen:
Code: Alles auswählen
CreatePreferences("Test.MyV")
For i= 1 To 10
MyString$="a"+Str(i)
WritePreferenceString(MyString$,Str(i))
Next i
ClosePreferences()
OpenPreferences("Test.MyV")
ExaminePreferenceKeys()
While NextPreferenceKey()>0
Debug PreferenceKeyName()+" entspricht "+ReadPreferenceString(PreferenceKeyName(),"0") ;= PreferenceKeyValue()
Wend
Delay(10000)
Zwar sind das keine Variablen, aber zufällig Namen und deren
Werte würde man so ermitteln können.
Ich denke aber, das du damit auch nicht viel anfangen kannst.
Gruß Falko