Błąd z grom THE BALL

0

Kupiłem książke Delphi Ćwiczenia Praktyczne.Utworzyłem nową forme i z jej kodu wszystko skasowałem i wklepałem to co było w książce.Prosiłby o sprawdzenie kodu bo roi się od błędów a w książce tak jest.Tu kod :

unit Unit1;

interface

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

type
TForm1 = class(TForm)
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
MainForm:TMainForm;
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 (termianted) do
begin
case MAinForm.counter of
0..10; delay:=10;
11..20=8;
21..30=5;
end;
if MainForm.counter>31 thenb delay:=1;
Sleep(delay);
Synchronize(MoveImage);
end;
end;

procedure Tball.moveimage;
begin
with MainForm 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

0

Jest:
while not (termianted) do

powinno byc:
while not (terminated) do

A tak poza tym to podawaj zawsze jakiego rodzaju blad ci wyskakuje. Bo watpie zeby komus chcialo sie czytac cale kody programow.
Chyba ja taki glupi jestem ... :d ... ale calego nie przeczytalem.

0

Pochwalony!
Też czytałem ten rozdział, próbowałem przepisywać cały kod, ale nie chciał mui działać. troszeczkę zdenerwuje... wściekłem :) się na to i napisałem cały program od początku, po swojemu. Majlnij do mnie: [email protected] to Ci dam kod mojego The Ball'a :)

0

No niezupelnie. Oto kod z ksiazki:

unit MainFrm;

interface

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

type
TMainForm = class(TForm)
Line: TPaintBox;
Ball: 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;

{ Engine gry - poruszanie kulką }
TBall = class(TThread)
private
Delay : Integer; // opóźnienie kulki
procedure MoveImage;
protected
procedure Execute; override;
end;

var
MainForm: TMainForm;
X, Y : Integer; // wartości X i Y, o które będzie przesuwana kulka
Engine : TBall;

implementation

{$R *.dfm}

const
{ Kody ASCII klawiszy strzalek }
VK_LEFT = 37;
VK_RIGHT = 39;

var
LeftPos : Integer = 300; // poczatkowa pozycja deseczki

procedure TBall.Execute;
begin
FreeOnTerminate := True; // zwolnij po zakończeniu
while not (Terminated) do // kontynuuj az do zniszczenia watku
begin
{ zmienna Couner oznaczać będzie ilość zdobytych punktów }
{ w zależności od ilości tych punktów ustawiania zostaje prędkość
poruszania myszą (zmienna Delay) }
case MainForm.Counter of
0..10: Delay := 10;
11..20: Delay := 8;
21..30: Delay := 5;
end;
if MainForm.Counter > 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

1.Przenosze tan kod do delphi 6 personal i niedziała.
2.Czy jak ściągnołem przez pana gre moge ją sobie przerobić.
3.Gdy ściągnołem ten theball z kody źrudłowe/delphi to kod źródłowy jest w ogóle inny niż w książce.
4.Teraz nie przepisałem kodu z książki tylko zrobiłem krok po kroku jak jest w książce i cały czas są jakieś błędy i to niemało ok. 8.
5. Prosił bym jeśli to możliwe o napisanie kodu z książki w delphi i przesłanie wszystkich plików na adres [email protected] .
6.Jeśli pan mi wyśle kod czy będe go mudł przedobić do własnich zapotrzebowań.
7.Czy da się tak jeśli żeby piłka nie odbijała się od dołu tylko wychodziła za ekran w duł pojawiał się komunikat przegrałeś.
8.Czy da się zrobić aby deseczka niemogła wyjść poza plansze.
9.Czy da się zrobić abyś deseczką ruszał dżojstikiem skonfigurowanym w windowsie.
10.Czy dało by się zrobić tak jak w grze Dx-ball czyki że po środku są jakieś klocki i jeśli piłka w niego uderzy to klocek znika.

0

To moze bys napisal jakie bledy sie pojawiaja?

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