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
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