Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Quiz in Delphi (https://www.delphipraxis.net/127887-quiz-delphi.html)

chuck.9 20. Jan 2009 18:34


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:
feld: array [1..60,1..6] of String;
--> Da es 60 Fragen sind 1..60 un da es 6 verschiedene zeilen sind, weil Frage, Antwortmöglichkeiten und die richtige Frage!

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:
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;
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!
Delphi-Quellcode:
panel1.caption:=quizfragen(feld[n]);
--> Hier im Panel die Frage angezeigt werden, und zwar soll sich das Programm die Frage aus der Unit und dem Feld holen..
die Unit Fragen sieht so aus:

Delphi-Quellcode:
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?';
also sind diese 3 Fragen die 3 möglichen die ich mit Randomize aussuchen will!
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:
panel1.caption:=quizfragen(feld[n,1]);
angezeigt, nur leider weiß ich nicht was ich Falsch gemacht habe!?!?

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]

DeddyH 20. Jan 2009 18:43

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.

mkinzler 20. Jan 2009 18:44

Re: Quiz in Delphi
 
Die Prozedur besitzt auch keinen Parameter

DeddyH 20. Jan 2009 18:48

Re: Quiz in Delphi
 
Die würden auch nichts nützen, es müsste dann schon eine Funktion sein :zwinker:.

chuck.9 20. Jan 2009 18:51

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?!

mkinzler 20. Jan 2009 18:54

Re: Quiz in Delphi
 
Delphi-Quellcode:
function quizfragen( n, m: Integer): string;

chuck.9 20. Jan 2009 18:59

Re: Quiz in Delphi
 
wunderbar...danke!
:thumb:

aber wie ändere ich es hier: panel1.caption:=quizfragen(feld[n,1]);
?

DeddyH 20. Jan 2009 19:01

Re: Quiz in Delphi
 
Delphi-Quellcode:
panel1.caption:=quizfragen(n,1);
Kann man aber auch selbst drauf kommen ;)

chuck.9 20. Jan 2009 19:05

Re: Quiz in Delphi
 
ja stimmt...
nur leider wir immer noch als Fehlermeldung: Zu viele Parameter angezeit!

DeddyH 20. Jan 2009 19:06

Re: Quiz in Delphi
 
Wie sieht denn "quizfragen" jetzt aus?

chuck.9 20. Jan 2009 19:09

Re: Quiz in Delphi
 
Delphi-Quellcode:
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?';
das der anfang!

[edit=mkinzler]Delphi-Tag statt bold Mfg, mkinzler[/edit]

DeddyH 20. Jan 2009 19:12

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?

chuck.9 20. Jan 2009 19:17

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?

DeddyH 20. Jan 2009 19:19

Re: Quiz in Delphi
 
Da muss doch am Ende der Funktion (nachdem Dein Array komplett befüllt ist) ein
Delphi-Quellcode:
Result := feld[n,m];
rein. Evtl. vorher n und m auf die maximalen Grenzen prüfen.

chuck.9 20. Jan 2009 19:27

Re: Quiz in Delphi
 
ich wisses nich worans liegt, aber es tut sich immer noch nix

Delphi-Quellcode:
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]);
ist bis dahin auch alles richig deklariert...aber denke eig schon, denn 10 pkt in info, heißt bin nich dumm...xDxD!

[edit=mkinzler]Tag aufgefrischt Mfg, mkinzler[/edit]

DeddyH 20. Jan 2009 19:40

Re: Quiz in Delphi
 
Erstens ist feld jetzt nochmal unitglobal deklariert und zweitens sehe ich nirgendwo den Aufruf der Funktion quizfragen :gruebel:

chuck.9 20. Jan 2009 19:59

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:
if quizfragen(n,1)=quizrichtig(n,6) then
könnte man es so vereinbaren?

DeddyH 20. Jan 2009 20:01

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.

angos 20. Jan 2009 21:59

Re: Quiz in Delphi
 
Zitat:

Zitat von chuck.9
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:
if quizfragen(n,1)=quizrichtig(n,6) then
könnte man es so vereinbaren?

müsstest du in dem Fall nicht einfach direkt deinen array abfragen? ist alles ein bisschen undurchsichtig, da immer nur bruchstückcode gepostet wurde, aber vielleicht hilft der schnipsel weiter:

Delphi-Quellcode:
  [...]
  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
  [...]
schau dir trotzdem das ganze nochmal mit ner Klasse an, wie DeddyH schon angedeutet hat.

Gruß
Ansgar

chuck.9 20. Jan 2009 22:10

Re: Quiz in Delphi
 

Das die Unit der richtigen antworten(der anfang)!

Delphi-Quellcode:
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';
Das die Unit der Anworten überhaupt(der anfang)!
Delphi-Quellcode:
function quizant(n,m: Integer): string;

var feld: array [1..60,1..6] of string;
begin
feld[1,2]:='Watzmann';
feld[1,3]:='Zugspitze';
Das die Unit der Fragen(der anfang)!
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:
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]
das rot markierte funktioniert nicht, der rest schon!

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?

mkinzler 21. Jan 2009 05:35

Re: Quiz in Delphi
 
Was für ein Fehler wird angezeigt?

DP-Maintenance 21. Jan 2009 05:35

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Multimedia" nach "Sonstige Fragen zu Delphi" verschoben.
Hat nichts mit Multimedia zu tun

chuck.9 21. Jan 2009 14:09

Re: Quiz in Delphi
 
Delphi-Quellcode:
if quizfragen(n,1)=quizrichtig(n,6) then
Es wird an dieser Stelle kein Fehler angezeigt!
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ööö

DeddyH 21. Jan 2009 15:37

Re: Quiz in Delphi
 
Zitat:

Zitat von chuck.9
und zwar mittel units^^!

:wiejetzt: Es gibt kein VCL-Programm ohne Units, was meinst Du?

chuck.9 21. Jan 2009 20:07

Re: Quiz in Delphi
 
Delphi-Quellcode:
if quizfragen(n,1)=quizrichtig(n,6) then
Dies Funktioniert nicht!

Das Programm startet wie üblich, nur erfolgt keine überprüfung ob der markierte radiobutton auch die richtige antwort ist!
Dies ist mein problem!

chuck.9 11. Feb 2009 18:59

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

blink182 11. Feb 2009 19:36

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:

var 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;
gibt bestimmt noch andere bessere methoden, aber ich denke es funktioniert

chuck.9 13. Feb 2009 15:15

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:
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;
Im 50:50 Joker wird bis jez nur eine Frage gestrichen...! Aber möchte 2 Löschen, wie realisiere ich dies?

Delphi-Quellcode:
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;
Und dann noch einen Lösungsvorschlag für den Publikumsjoker, bitte! :-D

danke

AlexII 13. Feb 2009 15:28

Re: Quiz in Delphi
 
Wenn du fertig bist, stell mal dein Prog on.
Hab auch ein Quiz geschrieben, unter Freeware kannst mal schauen. Also hier

chuck.9 13. Feb 2009 15:36

Re: Quiz in Delphi
 
Cool, nicht schlecht!

Ich muss sagen, da ist meins extrem Primitiv :P

Hier

Matze 13. Feb 2009 16:21

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:
// 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;
"Random(3)" liefert übrigens Werte zwischen 0 und 2, und du brauchst welche zwischen 0 und 3 und somit "Random(4)".

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

AlexII 13. Feb 2009 19:45

Re: Quiz in Delphi
 
Alle haben mal klein angefangen, auch ich, mach dir keine Sorgen, mach weiter so. :thumb:

chuck.9 17. Feb 2009 09:05

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:
image1.picture.loadfromfile('D:\QUiz^^\million.bmp');
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!

Bitte um Hilfe!

Danke

DeddyH 17. Feb 2009 09:08

Re: Quiz in Delphi
 
Das habe ich nicht verstanden, was genau funktioniert nicht und was hast Du bislang versucht?

chuck.9 17. Feb 2009 09:25

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!

DeddyH 17. Feb 2009 09:37

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:
[Bilder]
1=Geld.bmp
2=Auto.bmp
3=Baum.bmp
Auslesen ließe sich dann ganz bequem mit den Methoden von TIniFile (ReadString).

chuck.9 20. Feb 2009 10:51

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

DeddyH 20. Feb 2009 11:06

Re: Quiz in Delphi
 
Pack doch ein Label drauf, AutoSize auf false und WordWrap auf true.

Matze 20. Feb 2009 16:28

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