quizspiel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Earl Grey

Betreff: quizspiel

BeitragFr, Jan 28, 2005 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
würde mal gerne von euch wissen wie man am besten ein quiz im stile von wer wird millionär aufbaut. will das game für eine freundin zum geburtstag machen und ev. später dann immer wieder mal erweitern.


danke
cu
 

David

BeitragFr, Jan 28, 2005 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Dann wäre es sinnvoll die Fragen in eine externe Datei zu legen und diese dann vom Programm auslesen zu lassen.
Wie die Datei aufgebaut ist, musst du dir dann eben überlegen, Beispiel:

Code: [AUSKLAPPEN]

Frage: [blah...]
Antwort1: ...
Antwort2: ...
Antwort3: ...
Antwort4: ...
...


So kannst du ganz leicht (ohne neu zu compilieren) Fragen zu deinem Spiel hinzufügen.

grüße
 

NForcer

BeitragSo, Jan 30, 2005 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi, ich bin auch dabei grade ein größeres Quiz zu programmieren.

Soll aber schon etwas größer werden^^.

Ich machs genau so wie von David beschrieben, allerdings verschlüssle ich diese Fragen, damit man nicht einsehen kann, welche Richtig ist und welche nicht ^^. Später werde ich eine art "Editor" hinzufügen mit dem man dann die Fragen selbst hinzufügen kann.
Wenn du willst, kann ich dir ja helfen oder wir arbeiten zusammen...

Momentan bin ich dann dabei die Joker hinzuzufügen.

Zum Beispiel machste das so:
man hat 10 Fragereihen à XX-Fragen

die liest man dann zum Beispiel so aus:
Code: [AUSKLAPPEN]

For i = 1 To 4
   Fragentxt(i) = OpenFile("Data\Fragen"+i+".txt")
Next

For i = 1 To 4
   For j = 1 To Fragen_Anzahl(i)
      Fragenlinie$(i,j) = ReadLine(Fragentxt(i))
   Next
Next


das gleiche dann mit den Antworten...

falls du nicht weiterkommst, kannste mich ja fragen

Hummelpups

BeitragSo, Jan 30, 2005 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
das is so ja überlst umständlich. wieviele Dateien willst du denn machen?

Würde alles in einer Datei speichern.

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

NForcer

BeitragSo, Jan 30, 2005 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
insgesamt werden es so wohl um die 25...
10x Fragen +10x Antworten und dann noch einige Config dateien....

na und sicherlich, hätte ich auch in eine packen können, aber kA... irgendwie weiss ich nicht mehr warum ich das damals nicht so gemacht habe... jetzt wäre es mir etwas zu umständlich ditt zu ändern...
 

Earl Grey

BeitragMo, Jan 31, 2005 10:58
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
danke für die antworten. bin noch nicht sehr weit. aber eine generelle frage hab ich da noch:
ich hab das bis hierher sehr ähnlich gemacht. ich lies die daten ein. 1 frage und 4 antwortmöglichkeiten. die frage ist dann zb. text(1). die richtige antwort text(2). nun lasse ich mittels zufallzahl text(2) - text(5) zufällig (gemischt, mit rand(2,5)) am bildschirm positionieren. nun wird zwar alles schön angezeigt, nur weiß ich nicht wie ich vermeiden kann dass eine antwort doppelt ausgegeben wird. sprich: wie frage ich ab ob ein text(x) schon am bildschirm steht um zu verhindern dass eine auswahlmöglichkeit doppelt oder gar dreimal vorhanden ist? ich hab mir schon gedacht alle antwortmöglichkeiten in ein temp file zu schreiben, und jedesmal neu zu überprüfen ob der string schon verwendet wurde. denk aber mal das muß sich eleganter lösen lassen.....

big thx
cu
 

NForcer

BeitragMo, Jan 31, 2005 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
jo, am besten du machst das nicht per rand() sondern konstante Fragenummern.

also:
Meinetwegen lässt du das programm einmal laufen, dann wird immer die erste Frage in den Dateien aufgerufen. anschließend speicherst du ab, welche Fragereihe du aus der Datei ausgelesen hast und speicherst das ab.

Beim nächsten Programmstart wird dann diese Variable aus der Datei geladen (in dem fall dann 1) und anschließend um 1 erhöht. (nun also 2). dann übergibst du diese Varialbe der Funktion bei der du die Fragen ausliest sodass dann immer die 2. Fragereihe ausgelesen wird. usw.
(so habe ich es gemacht, ist zwar etwas umsändlicher, aber wie ich finde sehr leicht umzusetzen.)

zuerst wollte ich das auch per rand() befehl machen, aber dabei ist mir dann das gleiche aufgefallen wie bei dir^^.

Aber um dich richtig zu verstehen, lädst du die Fragen aus EINER Datei aus oder aus mehreren (so wie ich) ?

@ IMurDOOM:
Jetzt fällt mir wieder ein, warum ich die Fragen aus mehreren Dateien auslesen lasse und zwar:
Damit man später noch Fragen dran ranhängen kann.
Denn wenn ich alle (später mal 10x10 Fragen) in eine Datei packe, ist es schwerer eine Frage meinetwegen in die 3. Fragereihe ranzuhängen, da ja dann schon die 4. anfangen würde...

Mein System ist halt das man später 10 Fragen hintereinander vorgesetzt bekommt. (wie bei Wer wird Millionär).
Die 1. Frage wird aus der Datei Fragen1.txt ausgelesen (in der dann mal 10 Fragen drin stehen werden oder halt noch mehr).
Wenn man diese richtig beantwortet kommt man zur 2. Frage (Fragen2.txt) aus der dann wieder einer der xx-Fragen ausgesucht wird usw. usf.
Da kann ich ja dann in jede Datei ganz bequem einfach ne Frage hinzufügen, erklär mir mal wie das machen soll wenn ich alle fragen in eine Datei packe...

@ Earl Gray:
Wenn du später mal manuell Fragen hinzufügen wollen willst, achte darauf das dein Programm ausliest wieviele Fragen in der/n Datei/en vorhanden sind, denn wenn du einfach immer nur rand(10,10) (oder was auch immer) machst, werden immer nur die gleichen Fragen aufgerufen, egal wieviele du anfügst...

UND: Wie machst du das mit dem erkennen der Richtigen Frage?
Ich mache es so: ich hänge einfach die die Antwort die Richtig ist einfach ein ", RICHTIG" an, und lass dies vom Programm erkennen und anschließend beim ausgeben der Antwortmöglichkeiten wieder löschen (muss ja nicht jeder sehen welche Frage richtig ist^^).
ist zwar, zumindest bei mir, seeeehr kompliziert im Quelltext, weil ich dazu ne ganze menge Dims brauche, aber immernoch besser als ein Ansatz wo ich im Forum nachfrage, was ich dann eh nicht verstehe^^.

so das war jetzt wieder eine ganze Menge Zeugs was ich hier geschrieben habe, aber vllt. hilft dir das ja weiter.

mfG
 

Earl Grey

BeitragMo, Jan 31, 2005 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
ich les auch aus mehreren dateien aus. aber du hast mich falsch verstanden. ich will die antworten "mischen" um zu verhindern dass die richtigen antworten immer an der selben stellle anzuklicken sind. d.h. ich will wenn die antwort auf frage 15 die möglichkeit A ist dann aber beim nächsten mal nicht A sonder irgendetwas anderes ist um zu verhindern sich das zeug auswendig zu merken.

das mit den richtigen antworten stell ich mir in etwa so vor:
ich les meine fragen/antworten ja immer so ein:
text(1); frage
text(2);richtige antwort
text(3);falsche antwort
text(4);falsche antwort
text(5);falsche antwort

die richtige wird nach beantwortung eingeblendet und dann mit der vom spieler gewählten verglichen. deshalb brauch ich ja auch diese "mischfunktion" weil es ja sonst ziemlich blöd wär wenn immer die erste antwort richtig ist.

cu

SpionAtom

BeitragMo, Jan 31, 2005 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Also nochmal zu den Zufallsfragen ohne Wiederholungen. Kann sein, dass dieses Thema Zufallszahlen ohne Doubletten schon mal aufgetaucht ist. Find ich jetzt aber nicht. Also du kannst dir zum Bleistift mit einem Array merken, ob schon die und die Zahl dran war.

Const max = 4
Global zahl[max - 1]

Repeat
i = Rand(max)
Until zahl[i] = 0: zahl[i] = 1

Wenn die Zufallszahl(i) schonmal vorgekommen ist, sprich zahl[i] ist nicht null, dann muss die Schleife wiederholt werden. Ist die Zufallszahl hingegen "neu", so kann die Schleife verlassen werden und es wird mit zahl[i] = 1 vermerkt, dass i schon als Zufallszahl drangekommen ist.
Hab ich mal für ein Memory gebraucht. Naja. Bis dann.
 

Earl Grey

BeitragDi, Feb 01, 2005 1:53
Antworten mit Zitat
Benutzer-Profile anzeigen
@SpionAtom:

ich habs jetzt nach einigem herumprobieren geschafft. danke für den denkanstoß.

big thx
cu

SpionAtom

BeitragDi, Feb 01, 2005 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
@Earl Grey

Freut mich, dass es jetzt funzt. Ich würd mich aber noch mehr freuen, wenn du mir dein (halb-)fertiges Programm zumailen würdest.

mailto: tdpb@gmx.de (mit passendem Betreff)

CU2
 

Earl Grey

BeitragDo, Feb 03, 2005 10:42
Antworten mit Zitat
Benutzer-Profile anzeigen
@SpionAtom:
wenn du das wirklich willst schick ich es dir gerne. is aber wirklich sehr diletantisch und wahrscheinlich auch überaus unübersichtlich und unstrukturiert. ist mein erster gehversuch in sachen programmierung mit blitz basic. vieles basier rein auf herumprobieren.

würde dir dankbar sein wenn du es dir mal ansehen würdest.

big thx
cu
 

Combine

BeitragDo, Feb 03, 2005 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wink



.Anfang
Print "Wer Moderiert Wer wird Millionär"
Print "A) Günter Jauch"
Print "B) Florian Killo"
Print "C) Thomas Strauch"
frage$ = Input("Gib den Anfangsbuchstaben ein: ")







;// Abfrage der Antwort
;// dabei den eingegebenen Text Groß machen
If (Upper(frage$)) = "A"

;// Bildschirm löschen, Position zurücksetzen
Cls : Locate 0,0



Print "ja"


;// 3 Sekunden warten, 1 Sekunde = 1000 Milli Sekunden
Delay 1 * 3000

;// Bildschirm löschen, Position zurücksetzen
Cls : Locate 0,0

End
Else
;// Bildschirm löschen, Position zurücksetzen
Cls : Locate 0,0


;// Fehler
Print "nein"

;// 3 Sekunden warten, 1 Sekunde = 1000 Milli Sekunden
Delay 1 * 2000

;// Bildschirm leeren, Position zurücksetzen
Cls : Locate 0,0

Goto Anfang



End If

wunderkind

BeitragDo, Feb 03, 2005 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@Combine
Goto ist böse Wink! Den gleichen Effekt kann man auch mit einer While-Schleife erreichen. Wenn ich schon sehe, dass du aus dem If-Block herausspringst, wird mir ganz anders.
 

Earl Grey

BeitragFr, Feb 04, 2005 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Combine:
ein bisserl komplexer soll es ja dann schon sein.

Very Happy

cu[/quote]
 

Combine

BeitragFr, Feb 04, 2005 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke Very Happy
aber sonst is mein code okay oder?
 

NForcer

BeitragFr, Feb 04, 2005 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
was heisst okay^^.
Funktionstüchtig sollte er sein, aber wenn man sich solch einen programmierstil angewöhnt, wirst du es später seeehr schwer haben.
Packe lieber alles in Funktionen und benutze kein Goto.
Aber so hatte ich halt auch mal angefangen^^.
Code: [AUSKLAPPEN]

Graphics 800,600,32,3
SetBuffer BackBuffer()

Global Buchstabe
Global Eingabe$
Global Fragereihe

Text 50,20, "Dies soll ein sehr simpler Code zum Zeigen einer möglichen Strukturierung eines Quizzes sein"
Text 50,35, "Jedoch würde dieses 'Quiz' schon nach einiger Zeit sehr langweilig werden, "
Text 50,50, "da es nur 2 Fragen gibt"

WaitKey
   Cls
Fragereihe = 1
Repeat
   While Fragereihe = 1
      Cls
      Buchstabe = GetKey() ; Getkey() gibt den ASCII Code wieder... gibt zwar noch bessere Lösungen,
      Frage1_Funktion      ; aber ich wollte jetzt auf die schnelle nicht noch einen Eingabealgorithmus
      Flip             ; aus dem Hut zaubern.
   Wend
   
   While Fragereihe = 2
      Cls
      Buchstabe = GetKey()
      Frage2_Funktion
      Flip
   Wend
until keyhit(1)
WaitKey


Function Frage1_Funktion()

Text 150,200, "Wer moderiert die Senundung 'Wer wird Millionär' ?"

Text 200,250, "A) Günter Jauch "
Text 200,300, "B) Florian Killo "
Text 200,350, "C) Thomas Strauch "

Eingabe_Funktion

If Eingabe = "A" Then
   Text 200,150, "RICHTIG! Sie sind eine Frage weiter"
   Fragereihe = 2
   Eingabe = " "
                waitkey
ElseIf Eingabe = "B" Or Eingabe = "C"
   Text 200,150, "FALSCH! Sie haben verloren!"
   Eingabe = " "
   WaitKey
   End
End If

End Function

Function Frage2_Funktion()

Text 150,200, "Welcher ist der größte Kontinent auf der Erde?"

Text 200,250, "A) Europa "
Text 200,300, "B) Asien "
Text 200,350, "C) Afrika "

Eingabe_Funktion

If Eingabe = "B" Then
   Text 200,150, "RICHTIG! Sie sind eine Frage weiter"
   Fragereihe = 3
   Eingabe = " "
                waitkey
ElseIf Eingabe = "A" Or Eingabe = "C"
   Text 200,150, "FALSCH! Sie haben verloren!"
   Eingabe = " "
   WaitKey
   End
End If

End Function


Function Eingabe_Funktion()

If Buchstabe = 65 Or Buchstabe = 97 Then ; 65 = A ; 97 = a
   Eingabe$ = "A"
End If
If Buchstabe = 66 Or Buchstabe = 98 Then ; 66 = B ; 98 = b
   Eingabe = "B"
End If
If Buchstabe = 67 Or Buchstabe = 99 Then ; 67 = C ; 99 = c
   Eingabe$ = "C"
End If

End Function


Aber in größeren späteren Projekten würde ich sowieso lieber Buttons und Kollisionsabfraben benutzen... ist auch nicht so aufwendig wie mit dem getkey() ...
Und sowieso sind in meinem Programm, was ich eben auf die schnelle geschrieben habe noch einige schönheitsfehler vorhanden...

Und überhaupt soll das nur eine klitzekleine Grundstruktur eines Quizzes wiederspiegeln, ich bei meinem aktuellen Quiz hab sowieso eine ganz andere Technik was es die Fragen und Antworten bzw. erkennend er richtigen Antworten angeht^^.

Wie du siehst habe ich kein Goto benutzt^^
 

René Meyer

BeitragFr, Feb 04, 2005 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Zufällig programmiere ich auch ein Quiz. :-)

Das zufällige Suchen einer noch nicht gestellten Frage und das Mischen der vier Antworten (eingelesen werden die Daten so, daß die erste Antwort richtig ist) habe ich so gelöst:

Code: [AUSKLAPPEN]
 ; freie Frage finden
 Repeat
  Frage = Rand(1,MaxFragen)
 Until Gestellt(Frage) = 0
 Gestellt(Frage) = 1


 ; Antworten mischen
 For J=0 To 4
  Antwort(J) = 0
 Next

 For J=1 To 4
  Repeat
   X = Rand(1,4)
  Until Antwort(X) = 0
  Antwort(X) = J
  If J=1 Then Antwort(0) = X
 Next
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group