hilfe zu function

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Killer999

Betreff: hilfe zu function

BeitragSo, Okt 10, 2004 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich weiß nicht genau wie ich jetzte weiter kommen soll mein code ausschnitt

Code: [AUSKLAPPEN]
;frage 1

Function Frage1()



;Frage 1
frage1$ = "a)   Carlo Pedersoli"
frage12$ = "b)   Franco Pedersoli"
frage123$ = "c)   Alessandro Pedersoli"
frage1234$ = "Wie heisst Bud Spencer mit richtigem Namen?  :  "
;-----------------------------------------------------------------------

Cls
; Spieler Namen
Player$ = Input ("Spielernamen? : ")
;-------------------------------------------

bild = LoadImage(Pak("\Bilder\test.kfg"))
Pakclean()
DrawImage bild,1,1

Locate 300,450
high$ =  "1000"
Print " 0 Punkte"

stream = ReadFile(pak("frage.txt")) : DLPak()   ; DLPak() deletes the last Unpacked File
wert3$ = ReadLine$(stream)
Pakclean()

Locate 50,450
Color 0,0,0
Print wert3$
Print ""
Print frage1$
Print frage12$
Print frage123$
Print ""

nochmal$=Input (frage1234$)


da ich ja ein quiz machen will mussen ja antworten usw gehen früher hab ihc das mit goto gemacht will es jetzt auf function schreiben.

Hier stehen die fragen

Code: [AUSKLAPPEN]
Locate 50,450
Color 0,0,0
Print wert3$
Print ""
Print frage1$
Print frage12$
Print frage123$
Print ""

nochmal$=Input (frage1234$)[/


jetzt will ich machen das antwort a richtig ist aber wie ist der befehl das er zur nästen function rüber geht?
 

Timo

Betreff: Re: hilfe zu function

BeitragSo, Okt 10, 2004 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
So - vielleicht hilft dir das ja. Wenn du Fragen hast - melden Wink


Code: [AUSKLAPPEN]
Global bild = LoadImage(pak("\Bilder\test.kfg"))
Pakclean()


Cls
; Spieler Namen
Player$ = Input ("Spielernamen? : ")

; so, entweder du hast eine Bestimmte Frage die du stellen möchtest oder
Stellefrage(1)

;du stellst eine Frage per Zufall aus allen die du hast
Repeat
  StelleFrage(Rand(1,10)
  ;in diesem Fall ist max=10
  ;das heißt du brauchst auch
  ;10 Textdateien mit den namen
  ;frage1.txt
  ;frage2.txt
  ;...
  ;frage10.txt
Until Keyhit(1)





Function StelleFrage(nr)
  ;Frage
  file = readfile(pak("frage" + nr + ".txt"))
  ;bei 1 ist der pfad = frage1.txt
  ;du brauchst also für frage1 eine Datei im Pak-File
  ;namens frage + FrageNr + endung mit .txt
  ;In ihr sollten mit WriteString vorher die
  ;Antworten und die Frage hineingeschrieben werden...
  ;Fertig ;)
  Antwort1$ = ReadString(file)
  Antwort2$ = ReadString(file)
  Antwort3$ = ReadString(file)
  Frage$ = ReadString(file)
  Closefile(file) ; Ganz Wichtig!!
  DlPak()
  ;-----------------------------------------------------------------------
  DrawImage bild,1,1

  Locate 300,450
  high$ =  "1000"
  Print " 0 Punkte"

  Locate 50,450
  Color 0,0,0
  Print Frage$
  Print ""
  Print Antwort1$
  Print Antwort2$
  Print Antwort3$
  Print ""
  Print "Bitte Taste Drücken"
  waitkey()
end function
 

Killer999

BeitragSo, Okt 10, 2004 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die Antwort aber ich habe noch ein problem festgestellt

und zwar benutze ich ja in der
Code: [AUSKLAPPEN]
Function Frage1()

Player$ = Input ("Spielernamen? : ")


Dieses Player will ich aber unbedingt in

Code: [AUSKLAPPEN]
Function Frage2()
Text 0,50, Player$


denn Name auswerten dies geht aber nicht wie könnte man das hinbekommen?

Hubsi

BeitragSo, Okt 10, 2004 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Global Player$ am Anfang des Codes oder an die Function übergeben Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Timo

BeitragSo, Okt 10, 2004 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt, musst player noch global deklarieren, aber eigentlich wollte ich dir mit meiner Version die Vorzüge von Funktionen zeigen. Du brauchst nämlich nicht für jede Frage eine Funktion, sondern EINE Funktion, und du übergibst die Frage einfach.

Das spart Zeit,Nerven,Codezeilen und hilft den überblick zu behalten Wink
 

Killer999

BeitragMo, Okt 11, 2004 8:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Timo hat Folgendes geschrieben:
stimmt, musst player noch global deklarieren, aber eigentlich wollte ich dir mit meiner Version die Vorzüge von Funktionen zeigen. Du brauchst nämlich nicht für jede Frage eine Funktion, sondern EINE Funktion, und du übergibst die Frage einfach.

Das spart Zeit,Nerven,Codezeilen und hilft den überblick zu behalten Wink


Deine idee ist auch sehr gut ich will versuchen die zeilen zu verstehen aber dies dauert bei mir immer ^^ ich wolle auch diese functionen rein bauen mit zufall und aus txt daten lesen die dann in ein pak format hinzufügen.

ich versuch mal zu beschreiben und ihr sagt mir wenn ich was flasch erklärt habe

Also hier wie zufall ausgewählt aber nur wie soll ich jetzt diese Frage1.txt in diesesn Feature rein bringen?

/Zufall 1-10
und ich versteh das nicht ganz genau.
Code: [AUSKLAPPEN]
Repeat
  StelleFrage(Rand(1,10)
  ;in diesem Fall ist max=10
  ;das heißt du brauchst auch
  ;10 Textdateien mit den namen
  ;frage1.txt
  ;frage2.txt
  ;...
  ;frage10.txt
Until KeyHit(1)





Sobald ein zufall ausgewählt wurde Die nummer lesen und dann die Nummer die Function übergeben

TXT Datei wird ausgelesen und wir die nummer mit nr hinzugefügt datei wird geladen. Dann nach wir die Ganze zeile hintereinander aus gelesen
Datei wir geschlossen und die entpackten sachen werden gelöscht.

Code: [AUSKLAPPEN]
Function StelleFrage(nr)
  ;Frage
  file = ReadFile(pak("frage" + nr + ".txt"))
  ;bei 1 ist der pfad = frage1.txt
  ;du brauchst also für frage1 eine Datei im Pak-File
  ;namens frage + FrageNr + endung mit .txt
  ;In ihr sollten mit WriteString vorher die
  ;Antworten und die Frage hineingeschrieben werden...
  ;Fertig ;)
  Antwort1$ = ReadString(file)
  Antwort2$ = ReadString(file)
  Antwort3$ = ReadString(file)
  Frage$ = ReadString(file)
  CloseFile(file) ; Ganz Wichtig!!
  DlPak()
 

Timo

BeitragMo, Okt 11, 2004 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das hört sich doch garnicht so schlecht an!! Smile Also das meiste hast du verstanden. So, und hier ist ein code (nicht getestet, sollte aber funzen) der dir diese Txt dateien im richtigen Format herstellt. Einfach mal in deinem QuizOrdner speichern und Ausführen Wink :

Code: [AUSKLAPPEN]

name$ = Input("Name der Datei: ") ;Frage1.txt zum Beispiel eingeben
Frage$ = Input("Wie lautet die Frage? ") ;Frage eingeben
A1$     = Input("Antowort a) ") ;Antworten eingeben
A2$     = Input("Antowort b) ")
A3$     = Input("Antowort c) ")
Loesung = Input("Welche Antwort ist richtig? Bitte Zahl (1-3) eingeben: ")

file = writefile(name$)
WriteString file,Frage$
WriteString file,A1$
WriteString file,A2$
WriteString file,A3$
WriteByte file,Loesung
closefile(file)

Print " --- " + name$ + " --- wurde erfolgreich erstellt!"
Print "bitte Taste drücken..."
waitkey()
end


Allerdings ist die codierung jetzt n bissle anders, so dass die Funktion ein klein wenig abgeändert werden müsste beim Lesen:

Code: [AUSKLAPPEN]

Function StelleFrage(nr)
  ;Frage
  file = readfile(pak("frage" + nr + ".txt"))
  ;bei 1 ist der pfad = frage1.txt
  ;du brauchst also für frage1 eine Datei im Pak-File
  ;namens frage + FrageNr + endung mit .txt
  ;In ihr sollten mit WriteString vorher die
  ;Antworten und die Frage hineingeschrieben werden...
  ;Fertig ;)
  Frage$ = ReadString(file)
  Antwort1$ = ReadString(file)
  Antwort2$ = ReadString(file)
  Antwort3$ = ReadString(file)
  Loesung = ReadByte(file)

  Closefile(file) ; Ganz Wichtig!!
  DlPak()
  ;....
  ;....
 

Killer999

BeitragMo, Okt 11, 2004 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ok dies hab cih alles verstanden nur noch das mit denn zufall versteh ich nicht.
 

Timo

BeitragMo, Okt 11, 2004 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Repeat
  StelleFrage(Rand(1,10)
  ;in diesem Fall ist max=10
  ;das heißt du brauchst auch
  ;10 Textdateien mit den namen
  ;frage1.txt
  ;frage2.txt
  ;...
  ;frage10.txt
Until Keyhit(1)


ok, also diese Schleife (von Repeat bis Until) wird solange wiederholt, bis esc gedrückt wurde. Pro Schleife wird die Funktion StelleFrage aufgerufen. Wir übergeben ihr einen Zufallswert aus allen Fragen die wir insgesammt haben. Hast du zum Beispiel 20 txt dateien, dann ist der max. Wert 20. Übergibst du also den Wert 10, dann öffnet er die Datei Frage10.txt und gibt die Frage mit den Antworten aus. Sonst würdest du ja immer die Fragen nach der Reihe kriegen. So hast du ein gewisses zufallsprinzip drinne. Wenn du es nicht haben willst, dann kannst du es auch getrost rauslassen. Joa das war es eigentlich schon...
 

Killer999

BeitragMo, Okt 11, 2004 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Timo hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
Repeat
  StelleFrage(Rand(1,10)
  ;in diesem Fall ist max=10
  ;das heißt du brauchst auch
  ;10 Textdateien mit den namen
  ;frage1.txt
  ;frage2.txt
  ;...
  ;frage10.txt
Until Keyhit(1)


ok, also diese Schleife (von Repeat bis Until) wird solange wiederholt, bis esc gedrückt wurde. Pro Schleife wird die Funktion StelleFrage aufgerufen. Wir übergeben ihr einen Zufallswert aus allen Fragen die wir insgesammt haben. Hast du zum Beispiel 20 txt dateien, dann ist der max. Wert 20. Übergibst du also den Wert 10, dann öffnet er die Datei Frage10.txt und gibt die Frage mit den Antworten aus. Sonst würdest du ja immer die Fragen nach der Reihe kriegen. So hast du ein gewisses zufallsprinzip drinne. Wenn du es nicht haben willst, dann kannst du es auch getrost rauslassen. Joa das war es eigentlich schon...


ok bis jetzt verstanden muss ich die txt datei so reinschreiben?

Code: [AUSKLAPPEN]
  StelleFrage(Rand(1,10)
  ;in diesem Fall ist max=10
  ;das heißt du brauchst auch
  ;10 Textdateien mit den namen
  frage1.txt
  frage2.txt
  frage3.txt
  frage4.txt
  frage5.txt
  ;usw
  frage10.txt
Until Keyhit(1)
 

Timo

BeitragMo, Okt 11, 2004 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
nö in die Textdatei kommt nur das rein, was dieses Programm dafür produziert, führ das mal aus, dann siehst du ja was passiert, dieses Programm erstellt dann auch die richtige datei, musst nur den namen eingeben:
Code: [AUSKLAPPEN]
name$ = Input("Name der Datei: ") ;Frage1.txt zum Beispiel eingeben
Frage$ = Input("Wie lautet die Frage? ") ;Frage eingeben
A1$     = Input("Antowort a) ") ;Antworten eingeben
A2$     = Input("Antowort b) ")
A3$     = Input("Antowort c) ")
Loesung = Input("Welche Antwort ist richtig? Bitte Zahl (1-3) eingeben: ")

file = writefile(name$)
WriteString file,Frage$
WriteString file,A1$
WriteString file,A2$
WriteString file,A3$
WriteByte file,Loesung
closefile(file)

Print " --- " + name$ + " --- wurde erfolgreich erstellt!"
Print "bitte Taste drücken..."
waitkey()
end


so, in die Schleife kommt dann nur noch der aufruf der Funktion mit dem passenden Wert, der für die richtige Textdatei steht, ohne Kommentare also in der Form:

Code: [AUSKLAPPEN]
Repeat
  StelleFrage(Rand(1,10)
Until Keyhit(1)
 

Killer999

BeitragMo, Okt 11, 2004 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
habe das ganze jetzt mal zusammen gebaut



Code: [AUSKLAPPEN]
name$ = Input("Name der Datei: ") ;Frage1.txt zum Beispiel eingeben 
Frage$ = Input("Wie lautet die Frage? ") ;Frage eingeben 
A1$ = Input("Antowort a) ") ;Antworten eingeben 
A2$ = Input("Antowort b) ")   
A3$ = Input("Antowort c) ") 
Loesung = Input("Welche Antwort ist richtig? Bitte Zahl (1-3) eingeben: ") 



file = WriteFile(name$) 
WriteString file,Frage$ 
WriteString file,A1$ 
WriteString file,A2$ 
WriteString file,A3$ 
WriteByte file,Loesung 
CloseFile(file) 

Print " --- " + name$ + " --- wurde erfolgreich erstellt!" 
Print "bitte Taste drücken..." 
WaitKey() 
Stellefrage(1)

End 

Repeat
StelleFrage(Rand(1,10)
Until KeyHit(1)




Function StelleFrage()
;Frage
file = ReadFile("frage" + nr + ".txt")

Antwort1$ = ReadString(file)
Antwort2$ = ReadString(file)
Antwort3$ = ReadString(file)
Frage$ = ReadString(file)

Print Frage$
Print Antwort1$
Print Antwort2$
Print Antwort3$
CloseFile(file) ; Ganz Wichtig!!
WaitKey()
End Function


nur es kommt noch ein fehler
Mismatched brackets
in der zeile

Code: [AUSKLAPPEN]
StelleFrage(Rand(1,10)
 

Timo

BeitragMo, Okt 11, 2004 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
argg! also erstmal, das sollen zwei unterschiedliche Programme sein, einmal eins, was die Txt Dateien erstellt und eins was sie halt ausliest (das eigentliche Programm)
Also so hatte ichs gedacht:


Das Programm zum erstellen der .txt dateien:
Code: [AUSKLAPPEN]
name$ = Input("Name der Datei: ") ;Frage1.txt zum Beispiel eingeben 
Frage$ = Input("Wie lautet die Frage? ") ;Frage eingeben 
A1$ = Input("Antowort a) ") ;Antworten eingeben 
A2$ = Input("Antowort b) ")   
A3$ = Input("Antowort c) ") 
Loesung = Input("Welche Antwort ist richtig? Bitte Zahl (1-3) eingeben: ") 



file = WriteFile(name$) 
WriteString file,Frage$ 
WriteString file,A1$ 
WriteString file,A2$ 
WriteString file,A3$ 
WriteByte file,Loesung 
CloseFile(file) 

Print " --- " + name$ + " --- wurde erfolgreich erstellt!" 
Print "bitte Taste drücken..." 
WaitKey()
end



und das hier ist das eigentliche spiel, wenn du die .txt dateien alle erstellt hast, die du brauchst...
Code: [AUSKLAPPEN]


;hier war noch der Einleitungsteil von deiner eigntlichen Version

Repeat
StelleFrage(Rand(1,10)
Until KeyHit(1)
end




Function StelleFrage(nr)
;Frage
file = ReadFile("frage" + nr + ".txt")

Antwort1$ = ReadString(file)
Antwort2$ = ReadString(file)
Antwort3$ = ReadString(file)
Frage$ = ReadString(file)

Print Frage$
Print Antwort1$
Print Antwort2$
Print Antwort3$
CloseFile(file) ; Ganz Wichtig!!
WaitKey()
End Function
 

Killer999

BeitragMo, Okt 11, 2004 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
jo ich weiss habe nur mal alles zusammen gefasst.

aber die einziege schwierig keit ist das hier

Code: [AUSKLAPPEN]
StelleFrage(Rand(1,10)

in der kommt ein fehler

Mismatched bracket
 

Timo

BeitragMo, Okt 11, 2004 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
nö jetzt nicht mehr... sollte zumindest nicht..

denn vorher fehlte in deinem in der Funktionsdeklaration:
Code: [AUSKLAPPEN]
Function StelleFrage()

die zu übergebende varibable bzw. ihr name
Code: [AUSKLAPPEN]
Function StelleFrage(nr)


sollte es immer noch nicht gehen dann wunderts mich gewaltig Smile
 

Killer999

BeitragMo, Okt 11, 2004 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
habve deinen genommen

Code: [AUSKLAPPEN]
;hier war noch der Einleitungsteil von deiner eigntlichen Version

Repeat
StelleFrage(Rand(1,10)
Until KeyHit(1)
End




Function StelleFrage(nr)
;Frage
file = ReadFile("frage" + nr + ".txt")

Antwort1$ = ReadString(file)
Antwort2$ = ReadString(file)
Antwort3$ = ReadString(file)
Frage$ = ReadString(file)

Print Frage$
Print Antwort1$
Print Antwort2$
Print Antwort3$
CloseFile(file) ; Ganz Wichtig!!
WaitKey()
End Function


geht immer noch nicht

simi

BeitragDi, Okt 12, 2004 10:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, zu mismatcht brackets (oder so ähnlich), du hasst eine KLammer vergessen:

Zitat:

StelleFrage(Rand(1,10))
 

Killer999

BeitragDi, Okt 12, 2004 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
dank dir Wink
  • Zuletzt bearbeitet von Killer999 am Di, Okt 12, 2004 15:05, insgesamt 2-mal bearbeitet
 

Killer999

BeitragDi, Okt 12, 2004 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
aso diese zufall geht irgend wie nicht er nimmt immer die selbe frage am anfang.

Code: [AUSKLAPPEN]
Include "pak.bb"

Repeat
StelleFrage(Rand(1,4))
Until KeyHit(1)
end




Function StelleFrage(nr) 
;Frage 
file = ReadFile(Pak("\fragen\frage" + nr + ".txt"))

Frage$ = ReadString(file) 
Antwort1$ = ReadString(file) 
Antwort2$ = ReadString(file) 
Antwort3$ = ReadString(file) 


Print Frage$ 
Print Antwort1$ 
Print Antwort2$ 
Print Antwort3$ 
CloseFile(file) ; Ganz Wichtig!!
WaitKey()
End Function
 

Timo

BeitragDi, Okt 12, 2004 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das stimmt, das kommt daher das, es ja eigentlich keine echte Zufallszahlen gibt. Aber man kann den Anfangswert "zufällig" erscheinen lassen, indem man ihn auf den Wert von Millisecs() setzt.
Schreibe diese Zeile hier am besten noch ganz an den Anfang in deinem Programm
Code: [AUSKLAPPEN]
SeedRnd Millisecs()

bzw. schau dir den Befehl SeedRnd am besten noch einmal an Smile

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group