![]() |
Quiz in Delphi
Hi Leute,
also ich will ein Quiz in Delphi machen, un zwar mit einen Mehrdimensionalen Array, wo: Frage, 4 Antwortmöglichkeiten und die richtige Frage! Quasi
Delphi-Quellcode:
--> Da es 60 Fragen sind 1..60 un da es 6 verschiedene zeilen sind, weil Frage, Antwortmöglichkeiten und die richtige Frage!
feld: array [1..60,1..6] of String;
Nun nutze ich auch module also Units, in den die Arrays sind! Im Projekt selber werden 3 verschieden Units verwendet: uses Fragen1, Antworten, richtige_Antworten;
Delphi-Quellcode:
Das ist mein Code für die erste Frage, man kann erkennen das ich für die erste Frage mittels Randomize eine von 3 Fragen aussuche, die im Array bzw Unit Fragen enthalten sind!
procedure TForm1.Button2Click(Sender: TObject);
begin showmessage('Verloren, versuchs noch einmal.'); close; end; procedure TForm1.Button1Click(Sender: TObject); begin randomize; panel3.Caption:='0 €'; panel2.caption:='Nr. 1'; n:=random(3)+1; panel1.caption:=quizfragen(feld[n,1]); radiobutton1.caption:=quizant(feld[2]); radiobutton2.Caption:=quizant(feld[n,3]); radiobutton3.caption:=quizant(feld[n,4]); radiobutton4.Caption:=quizant(feld[n,5]); if radiobutton2.checked then showmessage('Richtig'); end;
Delphi-Quellcode:
--> Hier im Panel die Frage angezeigt werden, und zwar soll sich das Programm die Frage aus der Unit und dem Feld holen..
panel1.caption:=quizfragen(feld[n]);
die Unit Fragen sieht so aus:
Delphi-Quellcode:
also sind diese 3 Fragen die 3 möglichen die ich mit Randomize aussuchen will!
procedure quizfragen;
var feld: array [1..60,1..6] of String; begin feld[1,1]:='Wie heißt der höchste Berg Deutschlands?'; feld[2,1]:='Wie viele Beine hat eine Spinne?'; feld[3,1]:='Was sind Pumps?'; Nun das Problem, das Programm holt sich leider keine Frage aus der Unit! Es wird die Fehlermedlung: [Fehler] Unit1.pas(67): E2034 Zu viele Parameter an der Stelle
Delphi-Quellcode:
angezeigt, nur leider weiß ich nicht was ich Falsch gemacht habe!?!?
panel1.caption:=quizfragen(feld[n,1]);
Bitte helft mir, danke! Und ist die überhaupt möglich eine Frage aus einer Unit und dem darin enthaltenen Array zu holen? Danke für die Antwort! LG Oli [edit=mkinzler]Delphi-Tags statt bold Mfg, mkinzler[/edit] |
Re: Quiz in Delphi
Hallo und Willkommen in der DP :dp:,
Du hast feld als lokale Variable definiert, d.h. es ist außerhalb der procedure quizfragen überhaupt nicht sichtbar. Auch wenn es etwas übertrieben erscheint, würde ich mir evtl. eine Klasse für die Frage und die möglichen Antworten bauen, das macht das Ganze leichter wartbar. |
Re: Quiz in Delphi
Die Prozedur besitzt auch keinen Parameter
|
Re: Quiz in Delphi
Die würden auch nichts nützen, es müsste dann schon eine Funktion sein :zwinker:.
|
Re: Quiz in Delphi
Als was müsste ich jez in die Unit reinschreiben, ich wollts halt mit Unit machen, weil wir das bald inner Klausur brauchen^^
...könnt mir nen Quelltextstück schreiben, wie ich das mit dem ausrufen der fragen aus dem array und unit mache?! |
Re: Quiz in Delphi
Delphi-Quellcode:
function quizfragen( n, m: Integer): string;
|
Re: Quiz in Delphi
wunderbar...danke!
:thumb: aber wie ändere ich es hier: panel1.caption:=quizfragen(feld[n,1]); ? |
Re: Quiz in Delphi
Delphi-Quellcode:
Kann man aber auch selbst drauf kommen ;)
panel1.caption:=quizfragen(n,1);
|
Re: Quiz in Delphi
ja stimmt...
nur leider wir immer noch als Fehlermeldung: Zu viele Parameter angezeit! |
Re: Quiz in Delphi
Wie sieht denn "quizfragen" jetzt aus?
|
Re: Quiz in Delphi
Delphi-Quellcode:
das der anfang!
unit Fragen;
interface function quizfragen(n,m: Integer): string; implementation function quizfragen(n,m: Integer): string; var feld: array [1..60,1..6] of String; begin feld[1,1]:='Wie heißt der höchste Berg Deutschlands?'; [edit=mkinzler]Delphi-Tag statt bold Mfg, mkinzler[/edit] |
Re: Quiz in Delphi
Das ist ein bisschen unglücklich, da Du bei jedem Aufruf der Funktion erstmal Dein Array neu befüllst, aber ist erstmal egal. Weist Du denn auch irgendwo Result zu?
|
Re: Quiz in Delphi
na ich wisses halt nich..., das ist das problem, das hab ich ja auch schon gesehn, aber wir könnte man sowas mithilfe von modulen/units lösen?
|
Re: Quiz in Delphi
Da muss doch am Ende der Funktion (nachdem Dein Array komplett befüllt ist) ein
Delphi-Quellcode:
rein. Evtl. vorher n und m auf die maximalen Grenzen prüfen.
Result := feld[n,m];
|
Re: Quiz in Delphi
ich wisses nich worans liegt, aber es tut sich immer noch nix
Delphi-Quellcode:
ist bis dahin auch alles richig deklariert...aber denke eig schon, denn 10 pkt in info, heißt bin nich dumm...xDxD!
var
feld: array [1..60,1..6] of String; n:integer; procedure TForm1.Button2Click(Sender: TObject); begin showmessage('Verloren, versuchs noch einmal.'); close; end; procedure TForm1.Button1Click(Sender: TObject); begin randomize; panel3.Caption:='0 €'; panel2.caption:='Nr. 1'; n:=random(3)+1; panel1.caption:=quizfragen(n,1); radiobutton1.caption:=quizant(feld[2]); [edit=mkinzler]Tag aufgefrischt Mfg, mkinzler[/edit] |
Re: Quiz in Delphi
Erstens ist feld jetzt nochmal unitglobal deklariert und zweitens sehe ich nirgendwo den Aufruf der Funktion quizfragen :gruebel:
|
Re: Quiz in Delphi
so dieses Porblem wäre jez behoben, musste nur an den uses was ändern...xDxD!
aber das nächste problem, ich will in dem quiz mit radiobuttons arbeiten, nun soll überprüft werden ob der angeklickte radiobutton mit der richtigen antwort übereinstimmt...!
Delphi-Quellcode:
könnte man es so vereinbaren?
if quizfragen(n,1)=quizrichtig(n,6) then
|
Re: Quiz in Delphi
Wie ich bereits angedeutet hatte erscheint mir die Verwendung einer Klasse irgendwie sinnvoller, da könnte man das schön setzen und auswerten.
|
Re: Quiz in Delphi
Zitat:
Delphi-Quellcode:
schau dir trotzdem das ganze nochmal mit ner Klasse an, wie DeddyH schon angedeutet hat.
[...]
ndx := Radiogroup.ItemIndex+1; // + 1 da dein array erst bei 1 startet, das erste item einer Radiogroup aber den index 0 hat if feld[n, ndx] = feld[n, 6] then [...] Gruß Ansgar |
Re: Quiz in Delphi
Das die Unit der richtigen antworten(der anfang)!
Delphi-Quellcode:
Das die Unit der Anworten überhaupt(der anfang)!
function quizrichtig(n,m: Integer): string;
var feld: array [1..60,1..6] of string; begin feld[1,6]:='Zugspitze'; feld[2,6]:='8'; feld[3,6]:='Damenschuhe';
Delphi-Quellcode:
Das die Unit der Fragen(der anfang)!
function quizant(n,m: Integer): string;
var feld: array [1..60,1..6] of string; begin feld[1,2]:='Watzmann'; feld[1,3]:='Zugspitze';
Delphi-Quellcode:
function quizfragen(n,m: Integer): string;
var feld: array [1..60,1..6] of String; begin feld[1,1]:='Wie heißt der höchste Berg Deutschlands?'; feld[2,1]:='Wie viele Beine hat eine Spinne?'; Das ist meine Button Click Prozedur:
Delphi-Quellcode:
das rot markierte funktioniert nicht, der rest schon!
procedure TForm1.Button1Click(Sender: TObject);
begin randomize; panel3.Caption:='0 €'; panel2.caption:='Nr. 1'; n:=random(3)+1; panel1.caption:=quizfragen(n,1); radiobutton1.caption:=quizant(n,2); radiobutton2.Caption:=quizant(n,3); radiobutton3.caption:=quizant(n,4); radiobutton4.Caption:=quizant(n,5); [color=#ff0000]if quizfragen(n,1)=quizrichtig(n,6) then[/color] Nun will ich Testen ob der markierte Radiobutton auch die richtige Antwort ist! Und ich will es mit Modulen/Units machen! Wie lautet der Quelltext zur überprüfung ob Radiobutton auch richtige antwort ist? |
Re: Quiz in Delphi
Was für ein Fehler wird angezeigt?
|
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "Multimedia" nach "Sonstige Fragen zu Delphi" verschoben.
Hat nichts mit Multimedia zu tun |
Re: Quiz in Delphi
Delphi-Quellcode:
Es wird an dieser Stelle kein Fehler angezeigt!
if quizfragen(n,1)=quizrichtig(n,6) then
Das Programm startet wie üblich, nur erfolgt keine überprüfung ob der markierte radiobutton auch die richtige antwort ist! Wie kann man dies überprüfen?!?? und zwar mittel units^^! dankööö |
Re: Quiz in Delphi
Zitat:
|
Re: Quiz in Delphi
Delphi-Quellcode:
Dies Funktioniert nicht!
if quizfragen(n,1)=quizrichtig(n,6) then
Das Programm startet wie üblich, nur erfolgt keine überprüfung ob der markierte radiobutton auch die richtige antwort ist! Dies ist mein problem! |
Re: Quiz in Delphi
grüße euch...
so ein weiteres problem, un zwar möchte ich nun zufalls zahlen im bereich zwischen 4 bis 6 bzw 7 bis 9 auswürfeln! geht da random(6)+4 und random(9)+7 oder wie macht ich das? lg |
Re: Quiz in Delphi
moin
also ich würds nicht so machen denk ich mal. Auf die schnelle würde ich sowas nutzen:
Delphi-Quellcode:
gibt bestimmt noch andere bessere methoden, aber ich denke es funktioniertvar zufall:array of integer; procedure TForm1.Button1Click(Sender: TObject); var a,zufallszahl:integer; begin setlength(zufall,3); zufall[0]:=4; zufall[1]:=5; zufall[2]:=6; a:=random(3); zufallszahl:=zufall[a]; showmessage(inttostr(zufallszahl)); end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; |
Re: Quiz in Delphi
tachchen...
ich bin nun soweit fertig mit mein Quiz :-D Nun möchte ich 3 Joker einfügen: 50:50, Nachschlagen und Publikumsjoker...! Den Nachschlage Joker hab ich wiefolgt gelöst:
Delphi-Quellcode:
Im 50:50 Joker wird bis jez nur eine Frage gestrichen...! Aber möchte 2 Löschen, wie realisiere ich dies?
procedure TForm1.Button3Click(Sender: TObject);
begin // Nachschlagen Joker ShellExecute(Handle,'open','http://de.wikipedia.org/wiki/Wikipedia:Hauptseite',nil,nil,SW_SHOW); Button3.enabled := false; end;
Delphi-Quellcode:
Und dann noch einen Lösungsvorschlag für den Publikumsjoker, bitte! :-D
procedure TForm1.Button2Click(Sender: TObject);// 50 : 50 Joker
begin // Einen falschen Eintrag ermitteln repeat Falsch1 := Random(3); until Falsch1 <> quizrichtig(n,6); // Falsche Antwort deaktivieren RadioGroup1.Buttons[Falsch1].Enabled := False; end; danke |
Re: Quiz in Delphi
Wenn du fertig bist, stell mal dein Prog on.
Hab auch ein Quiz geschrieben, unter Freeware kannst mal schauen. Also ![]() |
Re: Quiz in Delphi
|
Re: Quiz in Delphi
Zum 50:50-Joker: Ziehe doch einfach 2 Zahlen.
Eine für dich leicht nachvollziehbare Lösung könnte grob so aussehen (ungetestet):
Delphi-Quellcode:
"Random(3)" liefert übrigens Werte zwischen 0 und 2, und du brauchst welche zwischen 0 und 3 und somit "Random(4)".
// Zahl 1
repeat Falsch1 := Random(4); until Falsch1 <> quizrichtig(n, 6); // Zahl 2 repeat Falsch2 := Random(4); until (Falsch2 <> quizrichtig(n, 6)) and (Falsch2 <> Falsch1); // Falsche Antwort deaktivieren RadioGroup1.Buttons[Falsch1].Enabled := false; RadioGroup1.Buttons[Falsch2].Enabled := false; Beim Publikumsjoker kannst du zufällig Antworten bewerten, aber die richtige höher als die anderen. Da fällt mir auf Anhieb kein Beispiel ein, aber das kriegst du schon hin. ;) Grüße, Matze |
Re: Quiz in Delphi
Alle haben mal klein angefangen, auch ich, mach dir keine Sorgen, mach weiter so. :thumb:
|
Re: Quiz in Delphi
Grüße euch =)....
so das mit den Joker funzt nun auch, nun wollte ich zu jeder Frage ein passendes Bild einfügen.
Delphi-Quellcode:
Das wäre ja der Code für das einbinden von Bildern...! Nur bleibt dieses Bild immer da, wie kann man das Bild nun mit jeder neuen Frage ändern, diesen Wert einen Parameter zuweisen funktioniert nicht!
image1.picture.loadfromfile('D:\QUiz^^\million.bmp');
Bitte um Hilfe! Danke |
Re: Quiz in Delphi
Das habe ich nicht verstanden, was genau funktioniert nicht und was hast Du bislang versucht?
|
Re: Quiz in Delphi
Also ich habe versucht 1 Bild einzufügen das klappt auch ohne Problem,
doch da es sich im ein Bild handelt möchte ich zu jeder Frage ein passendes Bild einfügen (in TImage)...un da ich meine Fragen mit random:=n aussuche muss man dem Bild einen gewissen wert zufügen damit das passende Bild eingefügt wird! |
Re: Quiz in Delphi
Du brauchst also eine Zuordnung zwischen Frage und Bild. Da fällt mir ganz spontan eine Ini ein, die in etwas so aussehen könnte (die Zahlen sind der jeweilige Fragenindex):
Code:
Auslesen ließe sich dann ganz bequem mit den Methoden von TIniFile (ReadString).
[Bilder]
1=Geld.bmp 2=Auto.bmp 3=Baum.bmp |
Re: Quiz in Delphi
Grüße...
hab ein neues Problem, ich möchte einen zeilenumbruch in ein Panel einfüge, da meine Fragen teils zu lang für das Ausgebende Panel sind! wie realiesiere ich dies? danke |
Re: Quiz in Delphi
Pack doch ein Label drauf, AutoSize auf false und WordWrap auf true.
|
Re: Quiz in Delphi
Jetzt sind es aber genug Fragen hier. Erstelle zukünftig bitte für jede Frage ein neues Thema, sofern diese nicht unmittelbar zusammenhängen. Sonst geht das hier drunter und drüber und über die Suche findet man sonst keine konkreten Hilfestellungen.
Die Suchfunktion kannst du dir übrigens auch mal ansehen. "Zeilenumbruch" dürfte dir einige Themen ergeben, die 'string' + #13#10 + 'string' beinhalten, was einem Zeilenumbruch entspricht. Ich schließe das Thema an dieser Stelle. G E S C H L O S S E N |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz