Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi break it problem (https://www.delphipraxis.net/147030-break-problem.html)

speedy23 31. Jan 2010 19:14

Re: break it problem
 
achsoo
dann muss ich mal nochn bissl rumodivizieren hfftl bekomm ichs hin

himitsu 31. Jan 2010 19:18

Re: break it problem
 
erstmal: VERGiß das CONST.

du brauchst Variablen, welche veränderbar sein müssen.

lege sie in das PRIVATE der Form.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, sSkinManager, Buttons, sBitBtn, StdCtrls, sButton, jpeg,
  ExtCtrls, sPanel;

type
  TForm1 = class(TForm)
    sSkinManager1: TsSkinManager;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Hilfe1: TMenuItem;
    NeuesSpiel1: TMenuItem;
    Beenden1: TMenuItem;
    Image1: TImage;
    Startknopf: TsButton;
    Pauseknopf: TsBitBtn;
    reflektor: TImage;
    Shape1: TShape;
    Timer1: TTimer;
    procedure PauseknopfClick(Sender: TObject);
    procedure StartknopfClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure NeuesSpiel1Click(Sender: TObject);

  private
    { Private-Deklarationen }
    dx, dy: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PauseknopfClick(Sender: TObject);
begin
  {Spiel pausieren und button pause unsichtbar --> Start sichtbar}
pauseknopf.visible:=false;
timer1.enabled:=false;
end;

procedure TForm1.StartknopfClick(Sender: TObject);
begin
  {macht den pauseknopf sichtbar, setzt spiel fort}
  timer1.Enabled:=true;
  pauseknopf.Visible:=True;
  dx := 5;
  dy := 5;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

   case ord(key) of
     vk_left:
       if reflektor.left > 110 then
         reflektor.left:=reflektor.left-14;
     vk_right:
       if (reflektor.left < 426) then
         reflektor.left:=reflektor.left+14;
   end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (Shape1.Top <= image1.Top) or (Shape1.Top >= image1.Top + image1.Height - Shape1.Height) then
  begin
    dy := -dy;
  end;
  if (Shape1.Left <= image1.Left ) or (Shape1.Left >= image1.Left + image1.Width - Shape1.Width) then
  begin
    dx := -dx;
  end;

  Shape1.Left := Shape1.Left + dx;
  Shape1.Top := Shape1.Top + dy;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=false;

end;

procedure TForm1.NeuesSpiel1Click(Sender: TObject);

begin
timer1.enabled:=true;

end;

end.

EWeiss 31. Jan 2010 19:19

Re: break it problem
 
Zitat:

Zitat von speedy23
achsoo
dann muss ich mal nochn bissl rumodivizieren hfftl bekomm ichs hin

Klar bekommst du das hin..
Ein bißchen mußt auch selbst machen sonst macht es keinen Spass mehr und es bleibt nichts hängen.

gruss

speedy23 31. Jan 2010 19:21

Re: break it problem
 
habs tauuuusend dank... ich hoffe ich bin euch nicht zusehr auf die nerven gefallen :(

ich melde mich wieder wenn ich noch fragen habe, ist ja noch lange nicht fertig das projekt (wenn ch noch darf ;) )

speedy23 31. Jan 2010 19:23

Re: break it problem
 
kennt ihr das break it spielsystem... meine frage ist gerade... ich habe ja dann oben die steine...
die müssen alle reflektieren und dann unsichtbar werden und nichtmehr reflektieren(nach kollision)... was aber passiert wenn ich alle steine abgeräumt habe und ich will nen neues level? das programm läuft dann ja einmal...ich kann ja nicht wärend der laufzeit neue steine erstellen oder?
blöd formuliert, aber wisst ihr wie ich meine?

mkinzler 31. Jan 2010 19:30

Re: break it problem
 
Zitat:

die müssen alle reflektieren und dann unsichtbar werden und nichtmehr reflektieren(nach kollision)... was aber passiert wenn ich alle steine abgeräumt habe und ich will nen neues level? das programm läuft dann ja einmal...ich kann ja nicht wärend der laufzeit neue steine erstellen oder?
Warum nicht? Einfach Timer anhalten Steine setzen. Ball neu positionieren.
Zudem würde ich dx/dy nicht als absolute Deltawerte nehmen, sondern als Maxwert. Bei Kollision mit Steinen könnte man diese dann ändern.

speedy23 31. Jan 2010 20:10

Re: break it problem
 
stimmt das ist ne gute idee, danke dir :)

i hab auch gerade überlegt
die reflektion am schläger müsste ja eigentlich nur

wenn beim shape linke obere ecke - höhe (quasi dann linke untere ecke) <= die ebene(linie) als y wert begrenzt durch die horizintale ausdehnung des schlägers sein, oder bin ich falsch? es geht mir nur um den ansatz

mkinzler 31. Jan 2010 20:24

Re: break it problem
 
Es besteht halt nur die Gefahr, dass der Ball dann durch den Schläger "springt"

speedy23 31. Jan 2010 20:25

Re: break it problem
 
stimmt... hmm... äähm... aber mit "gleich" geht das doch nicht oder ? besteht dann nicht die möglichkeit das es nie zu einer übereinstimmung kommt?

mkinzler 31. Jan 2010 20:27

Re: break it problem
 
Eine Gleichheit wird sehr selten zustandekommen, deshalb muss es auf jedenfall <= >= heißen. Da der Schläger aber so dünn ist, könnte es trotzdem geschehen, dass keine Kollision erkannt wird

speedy23 1. Feb 2010 06:28

Re: break it problem
 
du hast evtl noch mein projekt... ist der schläger zu dünn?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 2 von 2     12   

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