AW: RandomRange() oder Random() beim Bewegen einer Komponente
Zitat:
Danke dir. :D Ich gehe mich jetzt in die Ecke schämen ;D |
AW: RandomRange() oder Random() beim Bewegen einer Komponente
Denk mal nicht, dass Du der Erste bist, der diesen Fehler gemacht hat ;)
|
AW: RandomRange() oder Random() beim Bewegen einer Komponente
Liste der Anhänge anzeigen (Anzahl: 1)
So,
habe die vielen Ratschläge nun möglichst beherzigt und bin mit dem Spiel quasi fertig. Den "auf Zeit"-Modus habe ich verworfen und somit ein klassisches Pong-Spiel programmiert. Die Schläger sind jetzt in 4 Bereiche unterteilt, die den Ball mit einer jeweils anderen X-Geschwindigkeit fliegen lassen. Hier mal der Quelltext des ganzen Programms:
Delphi-Quellcode:
Wenn jemand Sachen findet, die schlecht oder zumindest noch verbesserungswürdig sind, dann sagt bescheid. :) Will mich da stetig verbessern.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Math, StdCtrls; type TForm1 = class(TForm) shpFeld: TShape; shpSP1: TShape; shpCPU: TShape; btnSpielen: TButton; shpBall: TShape; tmrBeweger: TTimer; tmrCPU: TTimer; tmrZaehler: TTimer; lblSpieler: TLabel; lblCPU: TLabel; lblPunkteSpieler: TLabel; lblPunkteCPU: TLabel; procedure btnSpielenClick(Sender: TObject); procedure OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure tmrBewegerTimer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure tmrCPUTimer(Sender: TObject); procedure tmrZaehlerTimer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; vBeginne: Boolean; vX, vY: Integer; //horizontale u. vertikale Geschw. implementation {$R *.dfm} //Fängt das Spiel an; startet Möglichkeiten zur Balkensteuerung procedure TForm1.btnSpielenClick(Sender: TObject); begin beep; //beep vBeginne := True; //Setzt die Spiel-Variable auf 1 btnSpielen.Enabled := False; vX := 0; vY := 12; end; //Richtet den Zufallsgenerator ein -> Zufallszahlen werden nicht nach der Systemzeit ausgerichtet procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; //Startet die zwei Timer, erlaubt es, den Spieler-Balken zu bewegen procedure TForm1.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (vBeginne) then //Wenn Spiel-Variable auf 1, dann beginnt das Spiel begin tmrBeweger.Enabled := True; tmrCPU.Enabled := True; tmrZaehler.Enabled := True; if (Key = VK_RIGHT) and (shpSP1.Left <= 500) then (shpSP1.Left := shpSP1.Left + 14); if (Key = VK_Left) and (shpSP1.Left >= 0) then (shpSP1.Left := shpSP1.Left - 14); end; end; //Sorgt für die Bewegung des Balls und achtet auf die Spielregeln procedure TForm1.tmrBewegerTimer(Sender: TObject); begin //Falls der Ball auf den unteren Balken trifft... if (shpBall.Top >= (shpSP1.Top - 20)) and (shpBall.Left >= shpSP1.Left) and (shpBall.Left <= (shpSP1.Left + 25)) then begin vX := -16; vY := (vY * (-1)); end; if (shpBall.Top >= (shpSP1.Top - 20)) and (shpBall.Left > (shpSP1.Left + 25)) and (shpBall.Left <= (shpSP1.Left + 50)) then begin vX := -12; vY := (vY * (-1)); end; if (shpBall.Top >= (shpSP1.Top - 20)) and (shpBall.Left > (shpSP1.Left + 50)) and (shpBall.Left <= (shpSP1.Left + 75)) then begin vX := 12; vY := (vY * (-1)); end; if (shpBall.Top >= (shpSP1.Top - 29)) and (shpBall.Left > (shpSP1.Left + 75)) and (shpBall.Left <= (shpSP1.Left + 100)) then begin vX := 16; vY := (vY * (-1)); end; //Falls der Ball auf den oberen Balken trifft... if (shpBall.Top <= (shpCPU.Top + 20)) and (shpBall.Left >= shpCPU.Left) and (shpBall.Left <= (shpCPU.Left + 25)) then begin vX := -16; vY := (vY * (-1)); end; if (shpBall.Top <= (shpCPU.Top + 20)) and (shpBall.Left > (shpCPU.Left +25)) and (shpBall.Left <= (shpCPU.Left + 50)) then begin vX := -12; vY := (vY * (-1)); end; if (shpBall.Top <= (shpCPU.Top + 20)) and (shpBall.Left > (shpCPU.Left +50)) and (shpBall.Left <= (shpCPU.Left + 75)) then begin vX := 12; vY := (vY * (-1)); end; if (shpBall.Top <= (shpCPU.Top + 20)) and (shpBall.Left > (shpCPU.Left +75)) and (shpBall.Left <= (shpCPU.Left + 100)) then begin vX := 16; vY := (vY * (-1)); end; //Abpraller von Wänden! if (shpBall.Left <= 0) or (shpBall.Left >= 590) then begin vX := (vX * (-1)); end; //Bewegt den Ball einfach nur. shpBall.Top := (shpBall.Top + vY); //Steuert vertikal! shpBall.Left := (shpBall.Left + vX); //Steuert horizontal! end; //Bewegt den Balken des Computer-Gegners. procedure TForm1.tmrCPUTimer(Sender: TObject); begin if (shpBall.Left > shpCPU.Left) then begin shpCPU.Left := (shpCPU.Left + 14); end; if (shpBall.Left <= shpCPU.Left) then begin shpCPU.Left := (shpCPU.Left - 14); end; end; //Steuert den Zähler. procedure TForm1.tmrZaehlerTimer(Sender: TObject); var vPSpieler, vPCPU: Integer; begin if (StrToInt(lblPunkteCPU.Caption) >= 21) or (StrToInt(lblPunkteSpieler.Caption) >= 21) then begin tmrBeweger.Enabled := False; tmrZaehler.Enabled := False; shpBall.Left := 296; shpBall.Top := 200; shpSP1.Left := 250; shpCPU.Left := 250; vX := 0; vY := 12; if (StrToInt(lblPunkteCPU.Caption) >= 21) then begin ShowMessage('Leider verloren! CPU gewinnt'); //tmrZaehler.Enabled := False; end; if (StrToInt(lblPunkteSpieler.Caption) >= 21) then begin ShowMessage('Herzlichen Glückwunsch! Gewonnen!'); //tmrZaehler.Enabled := False; end; //tmrZaehler.Enabled := False; lblPunkteSpieler.Caption := IntToStr(0); lblPunkteCPU.Caption := IntToStr(0); vPSpieler := 0; vPCPU := 0; btnSpielen.Enabled := True; end; if (shpBall.Top <= 0) or (shpBall.Top >= 380) then begin if (shpBall.Top <= 0) then //Gibt Spieler einen Punkt. begin vPSpieler := StrToInt(lblPunkteSpieler.Caption); lblPunkteSpieler.Caption := IntToStr(vPSpieler +1); end; if (shpBall.Top >= 380) then //Gibt CPU einen Punkt. begin vPCPU := StrToInt(lblPunkteCPU.Caption); lblPunkteCPU.Caption := IntToStr(vPCPU +1); end; //Reset tmrBeweger.Enabled := False; shpBall.Left := 296; shpBall.Top := 200; shpSP1.Left := 250; shpCPU.Left := 250; vX := 0; vY := 12; tmrBeweger.Enabled := True; sleep(250); end; end; end. Gruß, und schon mal vielen Dank an alle die geholfen haben, besonders den Exil-Sauerländer. :P |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr. |
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