[Delphi;Win95] - Zufallszahl immer 0

Hallo, ich versuche für die Schule ein Zahlenspiel zu programmieren, aber ich erhalte als Zufallszahl immer 0.
Und zwar sieht das Script wie folgt aus:

procedure rand;
begin
randomize;
Zahl1:=random(100)+1;
end;

Zahl1 eins ist als Integer definiert. In meinem Spiel geht es darum eine Zahl zwischen 1 und 100 zu erraten aber ich brauch blos null einzugeben und habe schon die richtige zahl.
Woran kann das liegen?

Zeig mal den ganzen Source…

procedure rand;
begin
randomize;
Zahl1:=random(100)+1;
end;

Zahl1 eins ist als Integer definiert.

Hi Zero,

der Code ist völlig OK, d. h. Zahl1 hat beim Verlassen der Prozedur einen zufälligen Wert zwischen 1 und 100. Das kannst Du auch leicht sebst überprüfen, indem Du folgendes tust:

  1. ein Label-Control irgendwo ins Formular setzen,
  2. eine Stringvariable s deklarieren („VAR s: STRING“ vor das „begin“ schreiben),
  3. nach der „Zahl1 := …“-Anweisung die Zeilen „Str(Zahl1,s)“ und danach „LabelXX.Caption := s“ einfügen.

Das Label-Control zeigt Dir dann bei jedem Run den Wert der Zahl1 an. Ich mach das oft, wenn ich eine Variable überprüfen will, ohne gleich den Debugger zu bemühen und einen Haltepunkt zu setzen.

Ach ja: Wenn Zahl1 bei Dir immer Null ist, dann läuft irgendwo sonst was schief in Deinem Code.

Gruß
Martin

Zeig mal den ganzen Source…

Here u Are
________________________________________
unit Zahlenraten;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
Zahl1: Integer;
Input: String;
implementation

{$R *.DFM}

procedure rand;

begin
randomize;
Zahl1:=random(10)+1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Input:=Edit1.Text;
if Zahl1>strtoint(input) then showmessage(‚zu klein‘)
else if Zahl1

Und wann rufst Du rand dann auf?

Und wann rufst Du rand dann auf?

Wie muß ich das denn wo tun?
ich bin totaler neuling. ist für die Schule.

Du musst die Prozedure rand, die Du geschrieben hast ja irgendwo aufrufen. Am Besten Du loescht diese Prozedure rand und dann nimmst Du das Ereignis OnCreate der Form und schreibst diese zwei Zeilen da rein.
Ausserdem sollte man in der OOP (Objekt Orientierten Programmierung) moeglichst wenig globalen Variablen deklarieren. Form1, Zahl1, Input sind solche globalen Variablen. Das mit der Form1 ist ok, weil das Delphi das automatisch macht, die anderen aber nicht.
Da Input nur in der Click-Eigenschaft verwendet wird, sollte das eine lokale Variable im Click-Unterprogramm sein und Zahl1 wird im ganzen Objekt benoetigt und sollte deswegen in der Private-Deklaration von TForm1 drinnenstehen. Hier der Code (Du kannst den Code nicht einfach bei Dir im Delphi reinkopieren, Du musst auch noch die OnCreate-Eigenschaft der Form und die OnClick-Eigenschaft vom Button im Objektinspektor setzten, am sichersten ist, wenn Du alles selber schreibst).

type
 TForm1 = class(TForm)
 Button1: TButton;
 Edit1: TEdit;
 procedure FormCreate(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 private
 Zahl1:Integer;
 public
 { Public-Deklarationen }
 end;

var
 Form1: TForm1;

implementation

{$R \*.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 randomize;
 Zahl1:=random(10);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Input:string;
begin
 Input:=Edit1.Text;
 if Zahl1\>strtoint(input) then showmessage('zu klein')
 else if Zahl1

Wenn Du den Code, den Du hast moeglichst beibehalten willst, dann musst Du nur vor dem end. ganz am Ende des Sources hinschreiben:



    
    begin
     rand;
    end.

Dank dir, alles workt.