AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen
Thema durchsuchen
Ansicht
Themen-Optionen

Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen

Ein Thema von AquaMari · begonnen am 23. Apr 2015 · letzter Beitrag vom 1. Mai 2015
Antwort Antwort
AquaMari

Registriert seit: 23. Apr 2015
7 Beiträge
 
Delphi 4 Standard
 
#1

Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen

  Alt 23. Apr 2015, 19:18
Hallo Forum,

ich versuche einen Multiple Choice-Quiz mit Delphi 4 zu programmieren. Ich habe schon die Fragen, die Antwortmöglichkeiten und die richtigen Antworten mit Hilfe von Feldern hingeschrieben und wenn man auf den 'weiter' Button drauf klickt kommt man zur nächsten Frage mit die jeweiligen Antwortmöglichkeiten (4), die ich im laufendem Programm mit Checkboxen erzeugt habe.

Diese Antworten haben bei jeder Frage aber immer die selbe Position. Zum Beispiel der richtige Antwort ist immer bei der ersten Checkbox zu sehen und das möchte ich ändern. Ich möchte also,dass jedes mal wenn man auf den 'weiter' Button klickt die Antworten ihre Positionen ändern.

Wie kann ich das nun anstellen?

Im Anhang befindet sich ein Bild wie das Programm ausschaut !

Danke im Voraus!

Lg,
AquaMari



und unten ist der Quell-Code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    Label1: TLabel;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure GroupBox1Click(Sender: TObject);
   

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  check:array[1..4] of Tcheckbox;
  fragen : array [1..4] of string;
  antworten : array [1..16] of string;
  r_antworten : array [1..7] of string;
  i,frage:integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var i,b:integer;
begin
b:=0;

frage:=0;

fragen[1]:='1. Zu welchem großen Reich gehörte Österreich ab dem Jahre Null fast 500 Jahre lang?';
fragen[2]:='2. Die Staatsgebiete welcher heutigen Staaten geho¨rten im Laufe der Geschichte zeitweise zum Kaiserreich Österreich?';
fragen[3]:='3. Welche der Religionen waren 1918 (Ende der Monarchie) in Österreich-Ungarn offiziell anerkannt?';
fragen[4]:='4. Wer wurde nach dem "Anschluss" von Österreich an Hitler-Deutschland verfolgt?';

antworten[1]:='Zum Römischen Reich';
antworten[2]:='Zum Ägyptischen Reich';
antworten[3]:='Zum Chinesischen Reich';
antworten[4]:='Zum Persischen Reich';

antworten[5]:='Slowakei';
antworten[6]:='Kroatien';
antworten[7]:='Ungarn';
antworten[8]:='Finnland';

antworten[9]:='Konfuzianismus';
antworten[10]:='Islam';
antworten[11]:='Judentum';
antworten[12]:='Buddhismus';

antworten[13]:='Juden';
antworten[14]:='Roma und Sinti';
antworten[15]:='Menschen mit Behinderung';
antworten[16]:='Nationalsozialisten';



r_antworten[1]:='Zum Römischen Reich';

r_antworten[2]:='Slowakei';
r_antworten[3]:='Kroatien';
r_antworten[4]:='Ungarn';

r_antworten[5]:='Islam';

r_antworten[6]:='Juden';
r_antworten[7]:='Menschen mit Behinderung';

groupbox1.caption:=fragen[1];

For i:=1 to 4 do

begin

     check[i]:=Tcheckbox.Create(self);
     check[i].left:=40;
     check[i].top:=35+b;
     check[i].width:=450;
     check[i].height:=40;
     check[i].font.size:= 12;
     check[i].parent:=groupbox1;
     b:=b+60;




end;


check[1].caption:=antworten[1];
check[2].caption:=antworten[2];
check[3].caption:=antworten[3];
check[4].caption:=antworten[4];

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

button2.visible:=false;
for i:=1 to 4 do

begin
check[i].color:=clwhite;
check[i].checked:=false;
end;

frage:=frage+1;
panel1.caption:=inttostr(frage)+' / 4';

case
     frage of 1: groupbox1.caption:=fragen[2];
              2: groupbox1.caption:=fragen[3];
              3: groupbox1.caption:=fragen[4];
           
     end;


case frage of 1: begin
                  check[1].caption:=antworten[5];
                  check[2].caption:=antworten[6];
                  check[3].caption:=antworten[7];
                  check[4].caption:=antworten[8];
                  end;

              2: begin
                  check[1].caption:=antworten[9];
                  check[2].caption:=antworten[10];
                  check[3].caption:=antworten[11];
                  check[4].caption:=antworten[12];
                   end;

              3: begin
                  check[1].caption:=antworten[13];
                 check[2].caption:=antworten[14];
                 check[3].caption:=antworten[15];
                 check[4].caption:=antworten[16];
                  end;

end;

 end;


procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin

if groupbox1.caption=fragen[1] then
begin

for i:=1 to 4 do
if check[i].caption=r_antworten[1] then check[i].color:=clgreen;

end;


if groupbox1.caption=fragen[2] then

begin
for i:=1 to 4 do
if (check[i].caption=r_antworten[2]) or (check[i].caption=r_antworten[3]) or (check[i].caption=r_antworten[4])then check[i].color:=clgreen;

   end;


if groupbox1.caption=fragen[3] then
begin
for i:=1 to 4 do
if check[i].caption=r_antworten[5] then check[i].color:=clgreen;

end;


if groupbox1.caption=fragen[4] then
begin
for i:=1 to 4 do
if (check[i].caption=r_antworten[6]) or (check[i].caption=r_antworten[7]) then check[i].color:=clgreen;

end;

end;

procedure TForm1.GroupBox1Click(Sender: TObject);
begin
button2.visible:=true;
end;
Angehängte Grafiken
Dateityp: jpg Unbenannt.jpg (101,8 KB, 48x aufgerufen)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen

  Alt 24. Apr 2015, 00:21
Dazu braucht man eine Routine die 4 Zufallszahlen berechnet, zum Beispiel so:
Delphi-Quellcode:
type
  TFourIntegers = array [1..4] of integer;

function GetFourRandoms: TFourIntegers;
var
  List: TList;
  I, Index: integer;
begin
  List := TList.Create;
  try
    for I := 1 to 4 do
      List.Add(Pointer(I));
    for I := 1 to 4 do
    begin
      Index := Random(List.Count);
      Result[I] := Integer(List[Index]);
      List.Delete(Index);
    end;
  finally
    List.Free
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  A: TFourIntegers;
begin
  A := GetFourRandoms;
  ShowMessage(Format('%d %d %d %d', [A[1], A[2], A[3], A[4]]));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;
  Mit Zitat antworten Zitat
AquaMari

Registriert seit: 23. Apr 2015
7 Beiträge
 
Delphi 4 Standard
 
#3

AW: Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen

  Alt 24. Apr 2015, 16:19
ok aber ich verstehe diesen Teil nicht ganz :

procedure TForm1.Button4Click(Sender: TObject);
var
A: TFourIntegers;
begin
A := GetFourRandoms;
ShowMessage(Format('%d %d %d %d', [A[1], A[2], A[3], A[4]]));
end;



Ich habe nämlich ein Feld von Checkboxen und bei die muss ich eben die Captions zu die jeweiligen Antworten ändern.
Was ist also mit A hier gemeint und mit die Zahlen in eckigen Klammern ? Wie muss ich das jetzt mit meinen Checkboxen hinschreiben??

Lg,
AquaMari
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#4

AW: Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen

  Alt 24. Apr 2015, 17:28
A ist eine Variable, wo 4 Integer reinpassen, für die 4 möglichen Antworten.


Selber Vorschlag, nur bissl Anders.
  • du erstellst dir eine Liste (oder ein Array)
  • füllst das mit den 4 Werten (Indize derLösungen), also mit 1 bis 4
  • dann vermischst du diese Liste (es gibt massig Tutorials bezüglich Sortieren oder Mischen ... ist ja grundsätzlich das Selbe ... nur Andersrum)
  • und am Ende gehst du diese Liste durch und holst mit den darin stehenden Indize dir nacheinandere eine der 4 Lösungen

oder
  • du nimmst ein Boolean-Array und füllst das mit False (für die Indize 1 bis 4)
  • holst dir eine Zufallszahl
  • schaust in das Array, ob der Index noch auf False steht
  • wenn nein, dann wirder hoch zum Zufallszahlenholen
  • wenn ja, dann wird diese Antwort ausgegeben
  • und das Ganze wird 4 Mal wiederholt, also wieder hoch zu Zufallszahlenholen, wenn noch nicht alle antworten ausgegeben sind (also zwei Schleifen)

oder
  • stringliste mit antworten füllen
  • zufallszahl holen (siehe Anzahl in der Liste)
  • diese Antwort auslesen, ausgeben und aus der liste löschen
  • wiederholen bis Liste leer ist

oder
oder
oder
eine der tausend anderen Lösungen, welche am Ende alle auf eine der beiden Lösungswege hinausgehen (liste mischen und abarbeiten /// liste per zufall auslesen und merken was schon weg ist)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
AquaMari

Registriert seit: 23. Apr 2015
7 Beiträge
 
Delphi 4 Standard
 
#5

AW: Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen

  Alt 24. Apr 2015, 20:16
Ich habe das mit A schon verstanden und habe es dann probiert und es hat geklappt

Vielen Dank an Bjoerk !

Danke dir auch Himitsu
  Mit Zitat antworten Zitat
AquaMari

Registriert seit: 23. Apr 2015
7 Beiträge
 
Delphi 4 Standard
 
#6

AW: Multiple Choice Quiz--> Antwort-Positionen zufällig auswählen

  Alt 25. Apr 2015, 12:28
Wo wir aber schon dabei sind habe ich jetzt eine andere Frage.
Ich möchte ja zum Schluss ein Ergebnis von diesem Quiz zeigen. Also dass ich dann zum Schluss angebe wie viele Fragen man richtig beantwortet hat. Und ich möchte also, dass nur wenn man die richtige Antwort oder die richtige Antworten angekreuzt (checked) hat (da auch mehrere Antworten richtig sein können) und die falschen eben nicht angekreuzt hat, einen Punkt bekommt und ansonsten nicht.

Also ich habe hier ein Procedure mit druecken (checkbox[i].onclick) und da habe ich schon was hingeschrieben(da werden bei mir eben die richtigen Antworten nicht richtig zusammengezählt):
unten seht ihr den Quell-Code

Wie kann ich das jetzt hinbekommen ?

Danke im Voraus

Lg,
AquaMari

Delphi-Quellcode:

procedure Tform1.druecken;
var i:integer;
begin
  if groupbox1.caption=fragen[1] then

for i:=1 to 4 do
   if check[i].caption=r_antworten[1] then richtige_A:=richtige_a+1
   else richtige_a:=richtige_a;

   
if groupbox1.caption=fragen[2] then
for i:=1 to 4 do

   if (check[i].caption=r_antworten[2]) and (check[i].caption=r_antworten[3]) and (check[i].caption=r_antworten[4]) then richtige_A:=richtige_a+1
    else richtige_a:=richtige_a;

   if groupbox1.caption=fragen[3] then
for i:=1 to 4 do

   if check[i].caption=r_antworten[5] then richtige_A:=richtige_a+1
   else richtige_a:=richtige_a;


   if groupbox1.caption=fragen[4] then
for i:=1 to 4 do
if (check[i].caption=r_antworten[6]) and (check[i].caption=r_antworten[7]) then richtige_A:=richtige_a+1
else richtige_a:=richtige_a;
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 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 by Thomas Breitkreuz