Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi random befehl funktoniert nicht (https://www.delphipraxis.net/159427-random-befehl-funktoniert-nicht.html)

Coxy 27. Mär 2011 18:02

Delphi-Version: 6

random befehl funktoniert nicht
 
Hallo zusammen,
Wir sollen für die Schule ein Spiel mit Delphi erstellen (als Projekt). Leider komme ich gerade nicht weiter: ich bekomme meinen random Befehl nicht zum laufen und bräuchte Hilfe. (In der Letzten Zeile ist der Befehl).

Delphi-Quellcode:
vunit Unit1;

interface

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

type
  TForm1 = class(TForm)
    SHP_BALL: TShape;
    Timer_Ball: TTimer;
    img_Boese: TImage;
    Timer_Boese: TTimer;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer_BallTimer(Sender: TObject);
    procedure Timer_BoeseTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 var
hoch, runter, links, rechts, richtung, zahl :integer;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

if key = vk_up then hoch:= 1;
if key = vk_down then runter:= 1;
if key = vk_left then links:= 1;
if key = vk_right then rechts:= 1;

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

if key = vk_up then hoch:= 0;
if key = vk_down then runter:=0;
if key = vk_left then links :=0;
if key = vk_right then rechts :=0;
end;

procedure TForm1.Timer_BallTimer(Sender: TObject);
begin
if (hoch = 1) and (shp_ball.Top - 6 > 0) then shp_ball.Top := shp_ball.Top -5;
if (runter = 1) and (shp_ball.Top + shp_ball.Height + 35 < form1.Height) then shp_ball.Top := shp_ball.Top +5;
if (links = 1) and (shp_ball.Left + 5 > 0) then shp_ball.Left := shp_ball.Left -5;
if (rechts = 1) and (shp_ball.Left + shp_ball.Width + 12 < form1.Width) then shp_ball.Left := shp_ball.Left +5;

if (hoch = 1) and (shp_ball.Height > 100) then shp_ball.height := shp_ball.height - 1;

if runter = 1 then shp_ball.Brush.Color := clRed;




end;

procedure TForm1.Timer_BoeseTimer(Sender: TObject);
begin

If (richtung=1) and (img_Boese.Top + img_Boese.Height + 30 > form1.Height) then richtung :=2;
If (richtung=2) and (img_Boese.Left + img_Boese.Width + 30 > form1.Width) then richtung :=3;
If (richtung=3) and (img_Boese.Top < 10) then richtung := 4;
If (richtung=1) and (img_Boese.Left < 10) then richtung :=1;

If (richtung=2) and (img_Boese.Top < 1) then richtung :=1;
If (richtung=1) and (img_Boese.Left + img_Boese.Width + 30 > form1.Width) then richtung :=4;
If (richtung=4) and (img_Boese.Top + img_Boese.Height + 30 > form1.Height) then richtung := 3;
If (richtung=3) and (img_Boese.Left < 10) then richtung :=2;

case richtung of
1: Begin
img_Boese.Top := img_Boese.Top + 1;
img_Boese.Left := img_Boese.Left + 1;
end;

2: Begin
img_Boese.Top := img_Boese.Top - 1;
img_Boese.Left := img_Boese.Left + 1;
end;

3: Begin
img_Boese.Top := img_Boese.Top - 1;
img_Boese.Left := img_Boese.Left - 1;
end;

4: Begin
img_Boese.Top := img_Boese.Top + 1;
img_Boese.Left := img_Boese.Left - 1;
end;
end;

if (richtung=1) then zahl:=random(1);

if (zahl=1) then img_Boese.Visible := false;



end;

PS: Gibt es eigentlich eine gute Seite mit der man lernen kann Delphi spiele zu programmieren (z.B Kollisionen zwischen figuren usw.)

Grüße

turboPASCAL 27. Mär 2011 18:07

AW: random befehl funktoniert nicht
 
Mach mal:
Delphi-Quellcode:
if (richtung=1) then zahl:=random(2);
Dann kommen Zahlen zwischen 0 und 1 ;)


...und eine Bitte, verwende für Quelltext bitte Delphi-Tags.

BUG 27. Mär 2011 18:13

AW: random befehl funktoniert nicht
 
EDIT: Auch wenn turboPASCAL vermutlich richtig liegt, schick ich das mal ab, als Hinweis für eventuell folgende Fragen.


Zitat:

ich bekomme meinen random Befehl nicht zum laufen
Könntest du genauer erläutern, was du damit meinst (eventuelle Fehlermeldung, was ist falsch, usw.)?

Und: Zitat-Tags sind schon eine gute Idee, Delphi-Tags (der Helm im Editor) wären die bessere Wahl.
Code:
[DELPHI][/DELPHI]

rollstuhlfahrer 27. Mär 2011 19:14

AW: random befehl funktoniert nicht
 
Und rufe einmal in irgendeinem Init-Teil die
Delphi-Quellcode:
Ramdonize
-Funktion auf.

Bernhard

DeddyH 27. Mär 2011 19:27

AW: random befehl funktoniert nicht
 
@Bernhard: Buchstabendreher, Du meinst Randomize :zwinker:

Coxy 27. Mär 2011 19:36

AW: random befehl funktoniert nicht
 
danke erst einmal,
also ich habe einfach random(2) gemacht und jetzt wird er unsichtbar (vorher ist einfach nichts passiert) wenn die Figur sich nach rechts bewegt, nur leider dachte ich das er erneut würfelt und er nach einer Zeit wieder sichtbar wird? Das passiert jedoch nicht, wieso?
Außerdem wollte ich fragen ob ihr eine gute Seite kennt dir mir helfen kann ein Spiel zu erstellen (ich hab keine Ahnung wie ich das mit der Kollision der Figuren später machen soll)
Grüße

Wolfgang Mix 27. Mär 2011 19:40

AW: random befehl funktoniert nicht
 
Am besten Doppelklöick auf das Formular und dann in der Prozedur OnFormCreate das Randomize eintragen.

BUG 27. Mär 2011 19:51

AW: random befehl funktoniert nicht
 
Zitat:

Zitat von Coxy (Beitrag 1091398)
danke erst einmal,
also ich habe einfach random(2) gemacht und jetzt wird er unsichtbar (vorher ist einfach nichts passiert) wenn die Figur sich nach rechts bewegt, nur leider dachte ich das er erneut würfelt und er nach einer Zeit wieder sichtbar wird? Das passiert jedoch nicht, wieso?

Da hast Code zum unsichtbar (
Delphi-Quellcode:
if (zahl=1) then img_Boese.Visible := false;
) machen, aber keinen zum sichtbar machen.
Umschalten könntest du zB. so:
Delphi-Quellcode:
// Verneine die aktuelle Sichtbarkeit:
if (zahl=1) then img_Boese.Visible := not img_Boese.Visible;

Delphi-Laie 27. Mär 2011 22:45

AW: random befehl funktoniert nicht
 
Zitat:

Zitat von Wolfgang Mix (Beitrag 1091399)
Am besten Doppelklöick auf das Formular und dann in der Prozedur OnFormCreate das Randomize eintragen.

Warum am besten?

Randomize zum Programmstart kann man ebensogut in den initialization-Teil der Unit 1 oder in das Hauptprogramm (dpr-Datei) einfügen. Könnte ein Unterprogramm (nämlich das oncreate-ausgelöste) sparen.

rollstuhlfahrer 28. Mär 2011 09:13

AW: random befehl funktoniert nicht
 
Ganz einfach: Nicht-Experten könnte man damit überfordern, dass man irgendwelche neuen Bereiche (init./fini.) einführt. Da das Hauptformular sowieso erzeugt wird und das am Anfang passiert, ist es egal, ob das Randomize (ja, war vorher ein Buchstabendreher) dort oder sonstwo aufgerufen wird.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz