Avatar billede chrfoss Nybegynder
07. september 2005 - 22:02 Der er 8 kommentarer

Hjælp til: Quiz med pointsystem

Hej
Vi er 3 gutter der i datalogi har lavet en quiz i Delphi.
Vi har 2 kategorier med 3 spørgsmål i hver.
Til hver knap har vi 2 tekster. En der loades i en memo(spørgsmål-teksten) og en i en radiogroup(svarmulighederne).
Så vil vi gerne ha' at der bliver talt points op. Der gives mellem 100 og 300 points pr. knap. Hvordan kan dette nemmest gøres?

Der ud over vil er vi stødt på det problem at det rigtige og de forkerte svarmuligheder i radiogroupen(3 muligheder pr. spørgsmål), ændrer sig alt afhængig af hvilken rækkefølge man vælger spørgsmålene i. Fx. i et 100 points spørgsmål kan svarmulighed nr. 1 være den rigtige, og vælges denne kommer en popup der siger "Du har svaret rigtigt!", MEN, bliver det samme 100 pointsspørgsmål valgt EFTER at have valgt et andet spørgsmål så bliver svarmulighed nr. 1 den forkerte.
Vi har angivet "nr" som en arry der men det fucker med radiogroupen..

Som i nok kan høre er vi ikke vildt hardcore til Delphi.. Men det kommer!

Her er coden;

[code]
var Svar: array[1..6] of Integer;  //angiver "svar" som et heltal mellem 1 og x
Nr, antalrigtige: integer;  //angiver nummer som et heltal


procedure TForm1.FormCreate(Sender: TObject);
begin
Svar[1]:=1;    //spm nr1 er 1 rigtig
Svar[2]:=1;    //spm nr 2 er 0 rigtig osv..
Svar[3]:=1;
svar[4]:=1;
svar[5]:=1;
svar[6]:=1;
{svar[7]:=1;
svar[8]:=1;
svar[9]:=1;}
Nr:=1;  //sætter nr til 1 for at starte
antalrigtige:=0;
end;

procedure TForm1.stopClick(Sender: TObject);
begin
  Close
end;

procedure TForm1.svargroupClick(Sender: TObject);
begin
  if svargroup.ItemIndex=Svar[Nr]  //er det det rigtige svar?
  then showmessage('Du svarede rigtigt')
  else showmessage('Du svarede desværre forkert');
  spmmemo.Lines.LoadFromFile('clear2.txt');  //clear memo
  svargroup.Items.LoadFromFile('clear.txt'); //clear radio-gr
  svargroup.ItemIndex:=-1;  //sletter radio-gr's index
  svargroup.Visible:=false;    //skjuler rg'en
  Nr:=Nr+1    //looper nr-funktionen
end;

//Her kommer dyrespørgsmål-loaderne
procedure TForm1.dyr100Click(Sender: TObject);
begin
  Spmmemo.Lines.LoadFromFile('spm.dyr1.txt');
  SvarGroup.Items.LoadFromFile('sv.dyr1.txt');
  antalrigtige:=antalrigtige+100;
  svargroup.Visible:=true;
  dyr100.visible:=false;
end;

procedure TForm1.dyr200Click(Sender: TObject);
begin
  Spmmemo.Lines.LoadFromFile('spm.dyr2.txt');
  SvarGroup.Items.LoadFromFile('sv.dyr2.txt');
  antalrigtige:=antalrigtige+200;
  svargroup.Visible:=true;
  dyr200.Visible:=false;
end;

procedure TForm1.dyr300Click(Sender: TObject);
begin
    Spmmemo.Lines.LoadFromFile('spm.dyr3.txt');  {loader spm i memo}
    SvarGroup.Items.LoadFromFile('sv.dyr3.txt');  {loader svarmuligheder i radiogr}
    antalrigtige:=antalrigtige+300;
    svargroup.Visible:=true;
    dyr300.Visible:=false;
end;
//Mel Gibson spm's

procedure TForm1.mel100Click(Sender: TObject);
begin
    Spmmemo.Lines.LoadFromFile('spm.mel1.txt');
    SvarGroup.Items.LoadFromFile('sv.mel1.txt');
      antalrigtige:=antalrigtige+100;
    svargroup.Visible:=true;
    mel100.Visible:=false;
end;

procedure TForm1.mel200Click(Sender: TObject);
begin
    Spmmemo.Lines.LoadFromFile('spm.mel2.txt');
    SvarGroup.Items.LoadFromFile('sv.mel2.txt');
      antalrigtige:=antalrigtige+200;
    svargroup.Visible:=true;
    mel200.Visible:=false;
end;

procedure TForm1.mel300Click(Sender: TObject);
begin
    Spmmemo.Lines.LoadFromFile('spm.mel3.txt');
    SvarGroup.Items.LoadFromFile('sv.mel3.txt');
      antalrigtige:=antalrigtige+300;
    svargroup.Visible:=true;
    mel300.Visible:=false;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Text:=antalrigtige;
end;

end.
[/code]
Avatar billede kroning Nybegynder
07. september 2005 - 22:13 #1
Kan vi få txt filerne at se?
Avatar billede chrfoss Nybegynder
07. september 2005 - 22:30 #2
Ja..
Du mener dem der indeholder spørgsmål og svar?
Ser således ud:
spm.dyr1.txt:
Dyrets DNA ligner meget menneskets

sv.dyr1.txt
Hvad er aben? //itemindex=0
Hvad er grisen? //itemindex=1
Hvad er giraffen? //itemindex=2

...
Hvis det er det du mener?
Avatar billede kroning Nybegynder
07. september 2005 - 23:35 #3
Jo det var det jeg mente. Og er det så ikke bedre at samle alle spørgsmål og svar i en og samme txt fil, så kan man undgå en hel del af den kode i har nu. F.eks.:

[Dyr 1]
Spørgsmål=Dyrets DNA ligner meget menneskets
Antal svar=3 // egentlig ikke nødvendig
Svar_1=Hvad er aben?
Svar_2=Hvad er grisen?
Svar_3=Hvad er giraffen?
Rigtig svar=1

[Dyr 2]
bla.
bla.

[Mel 1]
bla.
bla.

Så er det bare et spørgsmål at bruge TInifile og da det rigtige svar også står i ini filen kan man helt undvære svar array´et.
Avatar billede chrfoss Nybegynder
08. september 2005 - 19:29 #4
Hmm.. Du er nok nødt til at uddybe lidt?
Som sagt er dette vores første projekt med delphi. Jeg kan godt følge dig med at det smarteste er at samle det hele i én txt-fil. Men hvordan ska koden så se ud?
Og hvordan giver man point? :)

Tak!
Avatar billede kroning Nybegynder
08. september 2005 - 20:56 #5
Gætter jeg rigtig hvis jeg tror at jeres brugerflade er 2 rækker med knapper (2 kategorier)og i hver række er der 3 knapper (en for hver spørgsmål). De øverste knapper giver så 100 point de miderste 200 point og de nederste 300 points?
Avatar billede chrfoss Nybegynder
08. september 2005 - 20:59 #6
Præcis! Skal jeg poste SS?
Avatar billede kroning Nybegynder
08. september 2005 - 23:37 #7
Jeg har smidt 6 Buttons på en form og sat Tag på dem fra 1 til 6 (Spørgsmål 1 til 6). En Memo en RadioGroup og en Label til at vise antal points.

Bemærk: Alle de 6 buttons OnClick peger på den samme Button1Click

Koden:

var
  Form1: TForm1;
    AntalRigtige : integer=0;
  RigtigSvar,Point : integer;

implementation

{$R *.dfm}

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
    if RadioGroup1.ItemIndex+1=RigtigSvar then
    begin
      showmessage('Du svarede rigtigt');
        inc(AntalRigtige,Point);
  end
  else
      showmessage('Du svarede desværre forkert');
    Label1.Caption:=IntToStr(AntalRigtige);
    RadioGroup1.Items.Clear;
  Memo1.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    Inifile : TInifile;
  i : Integer;
  Section : String;
begin
    i:=(Sender as TButton).Tag;
    Section:='Spg '+IntToStr(i);

    Inifile:=TInifile.Create('c:\Spg.txt');
    Memo1.Lines.Text:=Inifile.ReadString(Section, 'Spørgsmål','');
    i:=1;
    RadioGroup1.Items.Clear;
    while Inifile.ValueExists(Section,'Svar '+IntTostr(i)) do
    begin
        RadioGroup1.Items.Add(Inifile.ReadString(Section, 'Svar '+IntToStr(i),''));
    inc(i);
  end;
  RigtigSvar:=Inifile.ReadInteger(Section,'Rigtig svar',0);
  Point:=Inifile.ReadInteger(Section,'Point',0);
  Inifile.Free;
end;

-------------------

Txt filen ser såled ud (dog kun 4 spørgsmål)

[Spg 1]
Spørgsmål=Dyrets DNA ligner meget menneskets
Svar 1=Hvad er aben?
Svar 2=Hvad er grisen?
Svar 3=Hvad er giraffen?
Rigtig svar=1
Point=100

[Spg 2]
Spørgsmål=Hundelytteren i praksis
Svar 1=Hvem er Hansen?
Svar 2=Hvem er Fennell
Svar 3=Hvem er Andersen?
Rigtig svar=2
Point=200

[Spg 3]
Spørgsmål=Elitens bagmænd
Svar 1=Hvem er Hansen og Petersen
Svar 2=Hvem er giraffen?
Svar 3=Hvem er Magnus, Morten og Mølholm
Rigtig svar=3
Point=100

[Spg 4]
Spørgsmål=Big Bertha kaldes de
Svar 1=Hvem er Callaway
Svar 2=Hvem er Adidas
Svar 3=Hvem er Athena
Rigtig svar=1
Point=300
Avatar billede kroning Nybegynder
09. september 2005 - 08:40 #8
Husk Inifiles i uses
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester