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;
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.
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? :)
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?
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
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.