Einzelnen Beitrag anzeigen

walli18

Registriert seit: 29. Jan 2009
21 Beiträge
 
#33

Re: Zufallszahl ziehen ohne wiederholung

  Alt 7. Feb 2009, 12:53
Hier ist mein Quelltext:
Delphi-Quellcode:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, MPlayer, jpeg, ExtCtrls;

type
  TForm5 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    MediaPlayer1: TMediaPlayer;
    Image1: TImage;
    Panel1: TPanel;
    Label1: TLabel;
    ListBox1: TListBox;
    procedure bennden1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure MediaPlayer1Notify(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure frage(z: integer);



  private
    { Private-Deklarationen }
  public
   Schwierigkeitsgrad,i,rnd,S,Loesung,sch, Fragezahl,eins,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn,elf,zwoelf,dreizehn,vierzehn,fuenfzehn, sechzehn,siebzehn,achtzehn,neunzehn,zwanzig,einundzwanzig,zweiundzwanzig,dreiundzwanzig,vierundzwanzig, fuenfundzwanzig,sechsundzwanzig,siebenundzwanzig,achtundzwanzig,neunundzwanzig,dreiissig,einunddreissig, zweiunddreissig,dreiunddreissig,vierunddreissig,fuenfunddreissig,sechsunddreissig:integer;
   FrageA,A,B,C,D:string; { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation

uses Unit1, Unit6;

{$R *.dfm}
  const gesamt=36;
      anzahl=15;
var
    liste: string;
procedure TForm5.bennden1Click(Sender: TObject);
begin
close;
form1.close;
end;

procedure TForm5.Button1Click(Sender: TObject);

var p,z:integer;
begin
  if length(liste)<=gesamt-anzahl then
  begin
    showmessage('Sie haben das Spiel erfolgreich beendet!');
    exit;
  end;
  p:=Random(length(liste))+1;
  z:=ord(liste[p]);
  delete(liste,p,1);
  Frage(z);


  Form6.caption:='Staat - Geschichte - Politik';
  Fragezahl:=1;
  Form6.Label1.Visible:=true;

  Form6.Panel1.Visible:=false;
  Form6.Panel2.Visible:=false;
  Form6.Panel3.Visible:=false;
  Form6.Panel4.Visible:=false;
  Form6.Panel5.Visible:=false;
  Form6.Panel6.Visible:=false;
  //Form5.Visible:=false;
  Form6.visible:=true;
    S:=1;
  Form6.Panel8.Caption:=' ';


   Schwierigkeitsgrad:=z;


  case Schwierigkeitsgrad of
      1: begin FrageA:='Wie viele Jahre beträgt die Amtszeit des Bundeskanzlers';
                A:='4 Jahre';
                B:='6 Jahre';
                C:='5 Jahre';
                D:='3 Jahre';
                Loesung:=1;
                eins:=1;
                end;

……………………………….. bis 36






procedure TForm5.Button2Click(Sender: TObject);

var p,z:integer;

    liste: string;
begin
if length(liste)<=gesamt-anzahl then
  begin
    showmessage('Sie haben das Spiel erfolgreich beendet!');
    exit;
  end;
  p:=Random(length(liste))+1;
  z:=ord(liste[p]);
  delete(liste,p,1);
  Frage(z);


 



  Form6.caption:='Geographie - Reisen';
  Fragezahl:=2;
  Form6.Label1.Visible:=true;

  Form6.Panel1.Visible:=false;
  Form6.Panel2.Visible:=false;
  Form6.Panel3.Visible:=false;
  Form6.Panel4.Visible:=false;
  Form6.Panel5.Visible:=false;
  Form6.Panel6.Visible:=false;
  //Form5.Visible:=false;
  Form6.visible:=true;
  Schwierigkeitsgrad:=z;
  S:=2;
  Form6.Panel8.Caption:=' ';


case Schwierigkeitsgrad of
      1: begin FrageA:='Wie heißt der tiefste Punkt unter dem Meeresspiegel?';
                A:='Marianengraben';
                B:='Tongraben';
                C:='Angola-Becken';
                D:='Japangraben';
                Loesung:=1;
……………………. Bis 40
procedure TForm5.frage(z: integer);
begin
  ListBox1.Items.Add(IntToStr(z)); // hier sollte natürlich die eigentliche Frage
                                   // mit der Nr. z bearbeitet werden
end;

 var Pfad: string;
procedure TForm5.FormActivate(Sender: TObject);
begin
  randomize;
  Getdir(0,Pfad);

with
  mediaplayer1 do
    begin Filename:=Pfad+'\Mediendateien\Musik\wahwah.wav';
      mediaplayer1.Open;
      mediaplayer1.Play;
      Mediaplayer1.Notify:=true;
  end;



end;

procedure TForm5.FormCreate(Sender: TObject);
var i:integer;
begin
  Randomize;
  liste:='';
  for i:=1 to gesamt do
    liste:=liste+chr(i);
end;

end.
bei Button 1 funktioniert es super, aber bei button 2 steht sofort da: Sie haben das Spiel erfolgreich beendet! Was habe ich falsch gemacht???
Genau das selbe Problem muss ich dann noch für Button 3,4 Lösen, da es insgesamt 4 Themenbereiche gibt!
Und ich hab noch ne Frage! Es gibt bei mir auch die Möglichkeit ein neues Spiel anzufangen, dann kann man den themenbereich neu wählen, deswegen müssen dann neue Zufallszahlen kommen von 1 bis 40, muss ich dann bei neustarten klick das aus form createn nochmal ausführen?? Oder wie mache ich das, dass alle Zahklen wieder am Anfang kommen??


[edit=Matze]Leerzeichen in die interessante Variablendeklaration eingefügt zur Vermeidung eines horizontalen Scrollbalkens. MfG, Matze[/edit]
  Mit Zitat antworten Zitat