![]() |
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 |
AW: random befehl funktoniert nicht
Mach mal:
Delphi-Quellcode:
Dann kommen Zahlen zwischen 0 und 1 ;)
if (richtung=1) then zahl:=random(2);
...und eine Bitte, verwende für Quelltext bitte Delphi-Tags. |
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:
Und: Zitat-Tags sind schon eine gute Idee, Delphi-Tags (der Helm im Editor) wären die bessere Wahl.
Code:
[DELPHI][/DELPHI]
|
AW: random befehl funktoniert nicht
Und rufe einmal in irgendeinem Init-Teil die
Delphi-Quellcode:
-Funktion auf.
Ramdonize
Bernhard |
AW: random befehl funktoniert nicht
@Bernhard: Buchstabendreher, Du meinst Randomize :zwinker:
|
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 |
AW: random befehl funktoniert nicht
Am besten Doppelklöick auf das Formular und dann in der Prozedur OnFormCreate das Randomize eintragen.
|
AW: random befehl funktoniert nicht
Zitat:
Delphi-Quellcode:
) machen, aber keinen zum sichtbar machen.
if (zahl=1) then img_Boese.Visible := false;
Umschalten könntest du zB. so:
Delphi-Quellcode:
// Verneine die aktuelle Sichtbarkeit:
if (zahl=1) then img_Boese.Visible := not img_Boese.Visible; |
AW: random befehl funktoniert nicht
Zitat:
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. |
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 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz