Einzelnen Beitrag anzeigen

ShadowDeath

Registriert seit: 11. Apr 2017
10 Beiträge
 
#1

Elfmeterschießen Spiel - Frage zum Aufbau

  Alt 12. Apr 2017, 18:08
Hallo Leute,
nun zu meinem nächsten 'Problem'. Erstmal was möchte ich programmieren? Dazu habe ich euch eine Skizze unten angehängt. Also man soll den Ball durch die 4 Buttons bzw mit den Pfeiltasten nach unten, oben & nach links und rechts bewegen können. Bei Go soll der Ball abgeschossen werden und sobald er die Torlinie überquert soll eine Messagebox mit 'GOAL' aufploppen. Bisher habe ich es geschafft den Ball per Timer nach vorne bis zum Tor zu bewegen. Die Kollision habe ich auch getestet doch die hatte nicht den gewünschten Effekt. Als Tor habe ich mom. ein Panel um die Kollision zu testen. Aber ich möchte ja später, wie auf dem Bild oben und unten jeweils eine Aus Linie haben und NUR wenn der Ball zwischen den beiden Torpfosten(-linien) ist soll er Goal ausgeben ---> Abfragen ob der Ball zwischen den Pfosten ist & breite des Balls mit einbeziehen. Zusätzlich soll der Ball nur bis zum Ende des Tors bewegt werden --> Timer 1-2 sec. nach der Kollision stoppen? Sobald der Ball gegen einen Pfosten kommt soll 'Pfosten' ausgegeben werden und wenn der Ball ins Aus geht, dann soll er 'Aus' ausgeben und beim bestätigen des Dialoges das Spiel resetten ---> confirmationDLG? Das Spielfeld an sich soll Grün sein --> Grünes Image als Hintergrund? Wie würdet ihr das am besten lösen?

Hier mein bisheriger Test Code (mehr Experiment als etwas wirkliches):
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,
  Vcl.ExtCtrls, Vcl.ExtDlgs, Vcl.Imaging.pngimage;

type
  TForm1 = class(TForm)
    Button1: TButton;
    TrackBar1: TTrackBar;
    Button2: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    Timer1: TTimer;
    Image1: TImage;
    Panel1: TPanel;
    procedure TrackBar1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  vx: Integer = 1;
  i: Integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.DoubleBuffered := True;
  Timer1.Enabled := true;
end;

function IsCollision (Rect1, Rect2: TRect): Boolean;
begin
  Result := (Rect1.Right > Rect2.Left) and
            (Rect2.Right > Rect1.Left) and
            (Rect1.Bottom > Rect2.Top) and
            (Rect2.Bottom > Rect1.Top);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Image1.Left := Image1.Left + vx;
  if Image1.Left > ClientWidth - Image1.Width - 1 then
    vx := vx * -1;
  if Image1.Left < 1 then
    vx := vx * -1;
  if IsCollision(Image1.BoundsRect, Panel1.BoundsRect) then
       If i = 0 then
       begin
       i := i+1;
       Timer1.Enabled := false;
       ShowMessage('TORR!!!11');
       Panel1.SendToBack;
       end
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Image1.Width := 30 * Trackbar1.Position;
  Image1.Height := 30 * Trackbar1.Position;
end;

end.
Miniaturansicht angehängter Grafiken
skizze.png  
Angehängte Dateien
Dateityp: zip Elfmeter.zip (3,62 MB, 6x aufgerufen)
  Mit Zitat antworten Zitat