Delphi 6 Ćwiczenia Praktyczne

0

Kupiłem książkę Delphi 6 - Ćwiczenia Praktyczne. Jeden z przykładów - gra The ball nie działą poprawnie. Ściągnąłem z helionu kod źródłowy - wszystko działa. Nie wiem co jest nie tak. Proszę o pomoc.

Kod nie poprawny ( ode mnie ):

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Ball: TPaintBox;
Line: TPaintBox;
procedure FormPaint(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
Counter : Integer;
public
{ Public declarations }
end;

TBall = class(TThread)
private
Delay : integer;
procedure MoveImage;
protected
procedure Execute; override;
end;

var
Form1: TForm1;
X, Y : Integer;
Engine : TBall;

implementation

{$R *.dfm}

const
VK_LEFT = 37;
VK_RIGHT = 39;
var
LeftPos : Integer = 300;

procedure TBall.Execute;
begin
FreeOnTerminate := true;
while not (Terminated) do
begin
case Form1.Counter of
0..10: Delay := 10;
11..20: Delay := 8;
21..30: Delay := 5;
end;
if Form1.Counter > 31 then Delay := 1;
Sleep(Delay);
Synchronize(MoveImage);
end;
end;

procedure TBall.MoveImage;
begin
with Form1 do
begin
Caption := 'The Ball... :: punktów: ' + inttostr(Counter);

            Ball.Left := Ball.Left + X;
            Ball.Top := Ball.Top + Y;

            if Ball.Left = (Height - 40) then
            begin
                    Ball.Top := 1;
                    Y := Random(3)+1;
                    Dec(Counter);
            end;

            if ((Ball.Top = Line.Top) and (Ball.Left >= Line.Left) and (Ball.Left  31 then Delay := 1;
Sleep(Delay);  // odczekaj 10 mils.
Synchronize(MoveImage); // wywolaj procedure

end;
end;

procedure TBall.MoveImage;
begin
with MainForm do
begin
Caption := 'The Ball... :: punktów: ' + IntToStr(Counter); // wyświetl ilość punktów

{ przemiszanie kulki }
Ball.Left := Ball.Left + X; // dodaj nowa wartosc
Ball.Top := Ball.Top + Y;

{ te instrukcje if sprawdzaja, czy pilka nie dotknela scian formy. w takim przypadku
losowane zostaja nowe wartosci X i Y. Jezeli kulka spadnie na sam dol - punkty
zostają odjęte, a kulka przesunięta na samą górę }

if Ball.Left = (Height - 40) then
begin
  Ball.Top := 1;
  Y := Random(3)+1;
  Dec(Counter); // odejmij punkty
end;

{ jeżeli piłka dotknie paska - odbijamy ją i dodajemy punkt }

if ((Ball.Top = Line.Top) and (Ball.Left >= Line.Left) and (Ball.Left 
0

Może byś podał komunika t? [???]

0

Było na forum. Poszukaj.

0

Może coś źle przepisałeś. Poza tym co to za problem porównać oba kody i znaleŹć błąd ?

0

Heh przeciez od porownywania takiego kodu mozna dostac oczoplasuuuu :| - nie zycze nikomu tego porownywac ;-) i tak zostanie jakas literowka, poza tym autorze napisz nam komunikat o bledzie ;-)

0

Aaaa tam. Jest przeciez jeszcze dosowe polecenie fc...

0

Ja trzy razy porównywałem i nic nie znalazłęm. Kompilowaałem i moje niechodzi, a z Helionu chodzi. Moje się kompiluje i chodzi tylko że jakby komputer myślał że hcodzi, ale rysunek się nie porusza :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1