ďťż

Ładny brzuch

Witam. Mam następujące pytanie. W pierwszym numerze KŚ-Espert był opublikowany artykuł jak napisać w Delphi grę edukacyjną. Wszystko było by OK tylko, że program zawsze wczytuje te same pytania.

Teraz pytanie: jak zrobić, żeby za każdym razem (po włączeniu programu) było losowanych np. 10 pytań z np. 100 zdefiniowanych w programie ?
Tylko przydało by się jakieś zabezpieczenie, żeby nie wylosowało podwójnie tych samych pytań...
Jak ktoś coś wie niech da znać. Dzięki...

Poniżej kod programu...

unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls; type  Ttest = class(TForm)    panelPytanie: TPanel;    panelOdpowiedzi: TPanel;    panelStatystyka: TPanel;    tekstPytanie: TLabel;    radioOdpowiedz1: TRadioButton;    radioOdpowiedz2: TRadioButton;    radioOdpowiedz3: TRadioButton;    Label2: TLabel;    Label3: TLabel;    Label4: TLabel;    tekstLiczbaPytan: TLabel;    tekstLiczbaPoprawnych: TLabel;    tekstLiczbaNiepoprawnych: TLabel;    Button1: TButton;    procedure FormCreate(Sender: TObject);    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; const liczbaPytan = 3; var  test: Ttest;  pytania: array [1..liczbaPytan] of String;  odpowiedzi1: array[1..liczbaPytan] of String;  odpowiedzi2: array[1..liczbaPytan] of String;  odpowiedzi3: array[1..liczbaPytan] of String;  poprawne: array[1..liczbaPytan] of Integer;  aktualnePytanie: Integer;  liczbaPoprawnych: Integer; implementation {$R *.dfm} procedure uaktualnijNapisy(numerPytania: Integer); begin  test.Caption:='Gra Edukacyjna. Pytanie ' + intToStr(aktualnePytanie) + '/' + intToStr(liczbaPytan);  test.tekstPytanie.Caption:=pytania[numerPytania];  test.radioOdpowiedz1.Caption:=odpowiedzi1[numerPytania];  test.radioOdpowiedz2.Caption:=odpowiedzi2[numerPytania];  test.radioOdpowiedz3.Caption:=odpowiedzi3[numerPytania];  test.tekstLiczbaPytan.Caption:=intToStr(aktualnePytanie - 1);  test.tekstLiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych);  test.tekstLiczbaNiepoprawnych.Caption:=intToStr(aktualnePytanie - liczbaPoprawnych -1 ); end; procedure Ttest.FormCreate(Sender: TObject); begin  pytania[1]:='Kto jest redaktorem naczelnym Komputer Świata ?';  odpowiedzi1[1]:='Ziemowit Buchalski';  odpowiedzi2[1]:='Wiesław Małecki';  odpowiedzi3[1]:='Łukasz Czejkawski';  poprawne[1]:=2;  pytania[2]:='Ile wynosi pojemność konta pocztowego w portalu o2.pl ?';  odpowiedzi1[2]:='1000 MB';  odpowiedzi2[2]:='1 GB';  odpowiedzi3[2]:='250 MB';  poprawne[2]:=2;  pytania[3]:='Co oznacza skrót RTS ?';  odpowiedzi1[3]:='Runtime Transfer System';  odpowiedzi2[3]:='Redudant Traffic System';  odpowiedzi3[3]:='Real Time Strategy';  poprawne[3]:=3;  liczbaPoprawnych:=0;  aktualnePytanie:=1;  uaktualnijNapisy(aktualnePytanie); end; function ktoraOdpowiedzWybrano: Integer; begin  if test.radioOdpowiedz1.Checked then  begin    test.radioOdpowiedz1.Checked:=False;    ktoraOdpowiedzWybrano:=1;  end else if test.radioOdpowiedz2.Checked then  begin    test.radioOdpowiedz2.Checked:=False;    ktoraOdpowiedzWybrano:=2;  end else if test.radioOdpowiedz3.Checked then begin  test.radioOdpowiedz3.Checked:=False;  ktoraOdpowiedzWybrano:=3; end else ktoraOdpowiedzWybrano:=-1; end; procedure Ttest.Button1Click(Sender: TObject); var wybranaOdpowiedz: Integer; begin wybranaOdpowiedz:=ktoraOdpowiedzWybrano(); if wybranaOdpowiedz=-1 then  ShowMessage('Zaznacz jeda opcje')  else  begin  if wybranaOdpowiedz=poprawne[aktualnePytanie] then  liczbaPoprawnych:=liczbaPoprawnych+1;  {przechodzimy do nastepnego pytania}  aktualnePytanie:=aktualnePytanie+1;  if aktualnePytanie <= liczbaPytan then    uaktualnijNapisy(aktualnePytanie)  else  begin  test.tekstLiczbaPytan.Caption:=intToStr(liczbaPytan );  test.tekstLiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych);  test.tekstLiczbaNiepoprawnych.Caption:=intToStr(liczbaPytan - liczbaPoprawnych );  ShowMessage('Odpowiedziales(-as) juz na wszytkie pytania');  end;  end;  end; end.



Zapobiaganie ponownemu wylosowaniu liczb:
http://forum.ks-eksp...28&hl=losowanie
http://forum.ks-eksp...76&hl=losowanie
http://forum.ks-eksp...24&hl=losowanie
http://forum.ks-eksp...69&hl=losowanie
Jesli chodzi o losowe pytania (np. 10 ze 100) to losuj liczby z zakresu 1-100 i pytania o tych numerach wrzucaj do tablicy z pytaniami :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •