Else(Anfängerproblem)

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

globecrash

Betreff: Else(Anfängerproblem)

BeitragSa, Jan 31, 2004 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Will ein kleines Programm schreiben, es geht darum das der user ein bestimmtes Wort in einer bestimmten Zeit herausfinden/eintippen muss.
Ich hab erst jetz angefangen und bin auf ein Problem gestossen, wie der Titel schon verrät es geht um Else.

Hier mal der Angefangene Code:

Code: [AUSKLAPPEN]

Graphics 600,400
 .Marke
Repeat

kennwort = Input$("Find it:")
If kennwort = Auto Then Print " Du hast es geschafft" Else
Goto Marke

Until Input(1) = 1

Wairkey


Der Code funzt, aber egal was ich eingebe es kommt immer: du hast es geschafft.
Aber ich will das nur" du hast e geschafft" kommt wenn man das kennwort(hier Auto) eintippt.

Wo ligt der Fehler?

mfg Fu

D2006

Administrator

BeitragSa, Jan 31, 2004 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
kennwort --> kennwort$
Auto --> "Auto"

MfG

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 31, 2004 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 600,400
; .Marke
Repeat

kennwort$ = Input$("Find it:")
If kennwort = "Auto" Then
    Print " Du hast es geschafft"
Else
    Print " Du hast es nicht geschafft"
End If

;Goto Marke

Until KeyHit(1)   

WaitKey

schaus die an..
[BB2D | BB3D | BB+]
 

globecrash

BeitragSa, Jan 31, 2004 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Vielen Dank.Jetzt geht es.
Nachdem ich das kennwort hineingegeben hab kommt wie erwartet "du hast es geschafft".
Aber auch find it:

Das heisst es kommt:Code: [AUSKLAPPEN]

Du hast es geschafft
find it:


Wie krieg ich die :" find it: " weg?

mfg Fu

joKe

BeitragSa, Jan 31, 2004 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ich weiss nicht warum du da Rpeat hast weil Input sowie so das ganze Programm anhält und auf die Eingabe wartet
außerdem kommt das "find it" trotzdem noch weil du doch zur marke springst oder ? also wenn du das Goto nicht als Kommentar hast ... ansonsten repeated er weil kein Keyhit(1) und die Eingabe kommt wieder =)

mfg j0k3
Projekt: Pollux Renegades Coop
[Maschine: Intel DualCore2 2x 3Ghz | 4096 DRR2 | GeForce GTX 260 Ultra]
 

globecrash

BeitragSa, Jan 31, 2004 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Hab das Problem mit einer weiteren Marke und Goto gelöst.
Ist meine Repeat until schleife unnötig?

mfg Fu

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 31, 2004 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi das mit dem Goto solltest du möglicht weglassen das bringt nur Problem wie dies
>>>>haArrEisaUspaGeTtiCodeSobAldEsZuvIElewiRd

Laß die Schleife, die hattest ich dir schon im Code richtig eingebaut, wiederholt die input aber immer wieder, bis du ESC drückst!
aber das hattest du ja vor zum testen!
normal reicht es ja aus das eimal abzufragen
dann einfach

Code: [AUSKLAPPEN]
Graphics 600,400

kennwort = Input$("Find it:")

If kennwort = "Auto" Then
    Print " Du hast es geschafft"
Else
    Print " Du hast es nicht geschafft"
End If
Print "Taste für WEITER!!"
WaitKey


und weg mit GOTO
Goto nur in absolut nichtanders lösbaren Proggys
evt. für Neustart
[BB2D | BB3D | BB+]

Xenon

BeitragSa, Jan 31, 2004 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde sagen deine GOTOs und Marken sind unnötig!

Du wolltest ja auch nach einer bestimmten Zeit oder?

Mach das lieber in dieser Art (OTF geschrieben):

Code: [AUSKLAPPEN]
geschafft = false
starttime = Millisecs()

Repeat
kennwort$ = Input$("Find it: ")

If kennwort$ = "Auto" Then geschafft = true
Until (Millisecs()-starttime > 60000) or geschafft

If geschafft Then
Print "Bravo, du hsat es geschafft"
Else
Print "Leider nicht geschafft, deine Zeit ist vorrüber"
End If


Nun hat man 60 Sekunden Zeit, um das Kennwort richtig einzugeben.
Sollte funktionieren wenn ich keinen Fehler gemacht habe.

Mfg Xenon
 

globecrash

BeitragSa, Jan 31, 2004 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Im Buch von Rene Meyer steht auch man sollte Goto weglassen, aber ich seh es nicht ein Goto ist ein ganz normaler befehl.
Wenn man über Goto disktutiert wird man sich eh nie einig ob es gut ist oder nicht.

Seit mir nicht böse aber ich lass es mal mit Goto es sei den jemand belehrt mich des besseren und sagt mir wieso ich nicht Goto anwenden soll.
ich mach mal das programm ohne zeit , wenn ich es "fertig habe" bau ich noch jeweils bei jedem begriff ein timer.

Jetzt habe ich ein anderes Problem , hier der Code:Code: [AUSKLAPPEN]


AppTitle
Graphics 600,400
SetBuffer BackBuffer()

Text 100, 100, "Hack it"
Text 130, 200, "Finde Das Kennwort"
WaitKey
Cls
SetBuffer FrontBuffer()
Flip 

.Marke


Repeat


kennwort$ = Input$("find  it:")
If kennwort$ = "Auto" Then Print "Du hast es geschafft"  Goto Marke2  Else
Goto Marke

Until KeyDown(1)

WaitKey 
.Marke2
Print "hallo das ist das 2te Level"
WaitMouse


Was ist da falsch?? es kommt : Not enough parameters??

mfg Fu

Travis

BeitragSa, Jan 31, 2004 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Du schreibst zwar AppTitle, schreibst aber nicht, wie das Programm denn heißen soll.

Code: [AUSKLAPPEN]

AppTitle "Hier muß doch der Name rein"


Außerdem fehlt bei Graphics noch die Farbtiefe und der Modus.

Code: [AUSKLAPPEN]

Graphics 600,400,16,2


Der Modus und die Farbtiefe sind zwar optionale Werte, aber wenn sie nicht angegeben werden, wird automatisch der Vollbildmodus aktiviert und der ist in der Regel mit einer Auflösung von 600x400 nicht möglich. Also entweder 640x480 Pixel verwenden, oder den Fenstermodus benutzen. Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

TheShadow

Moderator

BeitragSa, Jan 31, 2004 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
GOTO ist nicht böse und nützlich

Sollte aber nicht für Strukturierung des Codes benutzt werden (so wie du es vor hast)

Wenn du große Programme hast, wirst du Funktionen und Includes zu schätzen wissen - ansonsten wirst du irgendwann nicht durchblicken

Wenn du Funktionen hast, dann kannst du es nach BlackBox-System machen - Variablen übergeben, Wert empfangen - in "Notfällen" wo es nicht geht, Globale Variablen benutzen und eben GOTO
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

globecrash

BeitragSa, Jan 31, 2004 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Danke Travis jetzt geht es.

Na dann gebt mir ne Lösung ohne gross den Code zu verendern.welcher befehl und ein beispiel were nett Smile

mfg Fu

Blatolo

BeitragSo, Feb 01, 2004 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist eigentlich ganz einfach deinen code ohne goto zu lösen.

Code: [AUSKLAPPEN]
Graphics 640,480,16,1
SetBuffer BackBuffer()

Text 100, 100, "Hack it"
Text 130, 200, "Finde Das Kennwort"
Flip
WaitKey
SetBuffer FrontBuffer()
Cls

Repeat
   If KeyHit(1) Then End
   kennwort$ = Input$("find  it:")
   If kennwort$ = "Auto" Then Print "Du hast es geschafft"  Exit
Forever

WaitKey
Print "hallo das ist das 2te Level"
WaitMouse
 

globecrash

BeitragSo, Feb 01, 2004 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

@blatolo ich check das nit: Code: [AUSKLAPPEN]
if keyhit(1) then end
??????????
und nach dem Code: [AUSKLAPPEN]
.."du hast es geschafft" exit
was soll das exit?

aber sonst ist es wirklich besser als mit dem goto, Laughing
ich probiers aus

mfg Fu.

Blatolo

BeitragSo, Feb 01, 2004 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
mit exit verlässt man die schleife und mit end wird das ganze programm beendet
 

globecrash

BeitragSo, Feb 01, 2004 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

@Blatolo das mit der repeat forever schleife ist wirklich besser , im prinzip hatte mein alter code auch eine schleife , nur dann habe ich die schleife mit dem goto umgangen.Ich kannte den befehll exit nicht auf jeden Fall danke .

an alle anderen auch danke, diemir geholfen haben . jetz muss ich nur noch ein paar "levels "machen und den timer dazu.Wer interessiert ist an der fertigen version soll mir ne PN schicken oder gleich hier reinschreiben.

mfg Fu

Travis

BeitragSo, Feb 01, 2004 9:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hätte da noch einen Verbesserungsvorschlag, der den Code etwas kürzt. Für solche einfachen Textausgaben ist der BackBuffer überhaupt nicht notwendig.

Folgendes funktioniert genauso gut:

Code: [AUSKLAPPEN]

Graphics 640,480,16,1

Text 100, 100, "Hack it"
Text 130, 200, "Finde Das Kennwort"

WaitKey
Cls

Repeat
 kennwort$ = Input$("find it:")
 If kennwort$ = "Auto" Then Print "Du hast es geschafft" Exit
Until KeyHit(1)

WaitKey
Print "hallo das ist das 2te Level"
WaitMouse

Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Blatolo

BeitragSo, Feb 01, 2004 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt in diesem Fall ist es unnötig.

Code: [AUSKLAPPEN]
Until KeyHit(1)

Aber das ist ein Fehler da dies dann nur wiederholt wird bis man ESC drückt aber das Programm läuft dann weiter und man kommt ins nächste evel.
Ich denk in diesem Fall könnte man jedes level in ne Funktion packen dass würde der code funktionieren.
 

globecrash

BeitragSo, Feb 01, 2004 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

ja stimmt den bakckbuffer könnte ich weglassen , aber ich lass es so den am schluss des spieles wechelt es soweiso wieder in ein anderes Puffer.

mfg Fu
 

feider

ehemals "Decelion"

BeitragMo, Feb 02, 2004 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
versuchs mal so:

Code: [AUSKLAPPEN]
Graphics 640,480,16,1

Text 100, 100, "Hack it"
Text 130, 200, "Finde Das Kennwort"

WaitKey
Cls

Repeat
 kennwort$ = Input$("find it:")
 If kennwort$ = "Auto" Then Print "Du hast es geschafft" level2()
 If keyhit(1) Then waitkey end

forever
function level2()
WaitKey
Print "hallo das ist das 2te Level"
end function
WaitMouse


das wär halt jetzt n bisschen ineinandergeschachtelt, wenn es mehrere Lvls geben soll, aber es müsste gehn.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group