Bardzo proszę, wczoraj jeszcze trochę nad tym posiedziałem i doszedłem chociaż po części do tego co źle - mianowicie dodałem sobie 2 komponenty edit.text i zauważyłem, że problem jest z warunkiem wykonującym się co sekundę:
if(y+wielkosc<Form1.Height) and (Form1.Width > x+wielkosc) then rysuj_dol_prawo(x,y,sender)
else if(x+wielkosc>=Form1.Width) then rysuj_dol_lewo(x,y,sender)
Przecież ten warunek wykona się tylko raz, przy dotknięciu i potem powróci co warunku wyżej, niestety nie wiem teraz jak zrobić, by program wiedział, że akurat odbił się od dołu. 2 Zmienne prawda/fałsz by zaznaczać sobie nimi dotknięcie góra-dół / lewo-prawo?
Dorobiłem sobie procedury, odpowiedzialne za rysowanie piłki z każdego rogu by sprawdzić, czy poruszają się w dobrych kierunkach i poruszają się dobrze. Tutaj dołączam kod
@Patryk27, dzięki za podpowiedź, lecz niestety wektorów w szkole jeszcze nie przerabialiśmy i nawet nie wiem, czy będziemy a facet zaproponował bym się może pobawił i zrobił coś na wzór gry 'ping pong', tylko najpierw muszę rozgryźć problem odbijania się piłeczki. Zaproponował mi do tego użycie komponentu Timer.
Pozdrawiam serdecznie
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
const wielkosc = 50;
type
TForm1 = class(TForm)
Timer1: TTimer;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
procedure rysuj_gora_prawo(x,y :integer; Sender: TObject);
procedure rysuj_gora_lewo(x,y :integer;Sender: TObject);
procedure rysuj_dol_prawo(x,y :integer;Sender: TObject);
procedure rysuj_dol_lewo(x,y :integer;Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
x,y, odbicie:integer;
last:integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
x := 0;
y := 0;
odbicie := 0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x+1; y:=y+1; Edit1.Text := FloatToStr(x); Edit2.Text := FloatToStr(y);
if(y+wielkosc<Form1.Height) and (Form1.Width > x+wielkosc) then rysuj_dol_prawo(x,y,sender)
else if(x+wielkosc>=Form1.Width) then rysuj_dol_lewo(x,y,sender)
else if(y+wielkosc>=Form1.Height) then rysuj_dol_lewo(x,y,sender)
else if(y+wielkosc<=0) then rysuj_dol_prawo(x,y,sender)
else if(x+wielkosc<=0) then rysuj_dol_prawo(x,y,sender);
end;
procedure TForm1.rysuj_gora_prawo(x,y :integer;Sender: TObject);
begin
Form1.Canvas.Ellipse(x, Form1.Height-y, wielkosc+x, Form1.Height-(wielkosc+y));
end;
procedure TForm1.rysuj_gora_lewo(x,y :integer;Sender: TObject);
begin
Form1.Canvas.Ellipse(Form1.Width-x, Form1.Height-y, Form1.Width-(wielkosc+x), Form1.Height-(wielkosc+y));
end;
procedure TForm1.rysuj_dol_prawo(x, y:integer; Sender: TObject);
begin
Form1.Canvas.Ellipse(x, y, wielkosc+x, wielkosc+y);
end;
procedure TForm1.rysuj_dol_lewo(x,y :integer;Sender: TObject);
begin
Form1.Canvas.Ellipse(Form1.Width-x, y, Form1.Width-(wielkosc+x), wielkosc+y);
end;
end.