Problem mit Startpunk

yoshie117

Mitglied
Hi Leute

wir haben eine HA in Informatiksysteme aufbekommen, in dem wir ein kleines Ballspiel programmieren sollen. Der Ball soll sich in einem Spielfeld bewegen und man soll ihn mit der Maus treffen. Dafür bekommt man Punkte. Da ich nun absoluter Anfänger auf dem Gebiet bin, hab ich schon ne ganze weile gesessen und dran gearbeiet. Hier ist der Quelltext.


unit USpiel;

interface

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

type
TSpiel = class(TForm)
Leiste: TPanel;
Spielfeld: TShape;
Ball: TShape;
Start: TButton;
Stop: TButton;
Ausgabe: TLabel;
Uhr: TTimer;
Exit: TButton;
procedure StartClick(Sender: TObject);
procedure StopClick(Sender: TObject);
procedure UhrTimer(Sender: TObject);
procedure ExitClick(Sender: TObject);
procedure BallMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

private
{ Private-Deklarationen }

x,y,z:integer; //Datenfelder


public
{ Public-Deklarationen }
end;

var
Spiel: TSpiel;

implementation

{$R *.DFM}

procedure TSpiel.StartClick(Sender: TObject);
begin
Uhr.enabled:=true;
x:=3;
y:=3;

end;

procedure TSpiel.StopClick(Sender: TObject);
begin
Uhr.enabled:=false;
end;

procedure TSpiel.UhrTimer(Sender: TObject);
begin

Ball.Left:=Ball.Left+x;
If Ball.Left>=Spielfeld.width-12 Then x:=-x;
If Ball.Left=0 then x:=-x;

Ball.Top:=Ball.Top+y;
If Ball.Top>=Spielfeld.height-12 then y:=-y;
If Ball.Top<0 then y:=-y;
end;



procedure TSpiel.ExitClick(Sender: TObject);
begin
close;
end;

procedure TSpiel.BallMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

z:=z+1;

Ausgabe.caption:=FloatToStr(z);

end;

end.



Das mit dem ball treffen und das es Punkte gibt war ja nicht schwer, auch nicht das er sich bewegt unnd im Feld bleibt. Aber das problem ist, das der Ball immer wiedr am selben Anfangspunkt startet und immer wieder die selbe Bahn läuft. Auch wen man den Anfangspunkt Manul wechselt läuft er im grunde genommen die selbe Bahn. Man kann sie vorher schon berechnen. Nun meine Frage, wie kann man dies ändern. Der Ball soll eine nichtvoraussehbare bahn fliegen. Nicht immr in die selbe Richtung. Ich habe keinen passenden Befehl gefunden. Es wäre nett wen mir jemand helfen könnte.

MFG Thomas
 
dazu müsstest du zufallszahlen erzeugen, die dann die bahn festlegen. dazu änderst du einfach die werte etwas ab, so dass diese beim start zufällig gewählt werden. aus dieser prozedur:
Code:
procedure TSpiel.StartClick(Sender: TObject); 
begin 
  Uhr.Enabled := True; 
  x := 3; 
  y := 3; 
end;

wird dann diese prozedur:
Code:
procedure TSpiel.StartClick(Sender: TObject);
begin
  Randomize;
  x := Random(10);
  y := Random(10);
  Uhr.Enabled := True;
end;

der rest kann eigentlich gleich bleiben. beim klick auf den button start werden in die variablen x und y zwei zufällige werte zwischen 0 und 10 geschrieben.
 
re

vielen dank hat wunderbar geklappt, nur ein problem ist da jetzt noch dazugekommen. Mal funktioniert es perfekt unnd manchmal macht der Ball aber zur linken seite raus aus dem spielfeld. Weißt du woran das liegt?
 
so auf den ersten blick gesagt

veränder mal den block

Ball.Left:=Ball.Left+x;
If Ball.Left>=Spielfeld.width-12 Then x:=-x;
If Ball.Left=0 then x:=-x;

Ball.Top:=Ball.Top+y;
If Ball.Top>=Spielfeld.height-12 then y:=-y;
If Ball.Top<0 then y:=-y;
end;

in den

Ball.Left:=Ball.Left+x;
If Ball.Left>=Spielfeld.width-12 Then x:=-x;
If Ball.Left<=0 then x:=-x;

Ball.Top:=Ball.Top+y;
If Ball.Top>=Spielfeld.height-12 then y:=-y;
If Ball.Top<=0 then y:=-y;
end;

so das werte im negativen bereich noch mitbearbeitet werden

vielleicht war's ja das schon
 

Neue Beiträge

Zurück