No, not so weird, SilverWarior, after all you are right: if I would like help from an English-speaking programmer community, the best is when I write my codes totally in English in order to better understand.
Therefore today I have made a small program, which is focusing the "bullet appearing" problem:
Code:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
type TGameObject=class(TObject)
private
public
xplace,yplace,celx,cely,movedir: integer;
itsimage: TBitmap;
canshoot: boolean;
shoottimer: byte;
constructor create(xplacehere,yplacehere: longint; imagehere: Tbitmap);
end;
var
Form1: TForm1;
backgroundimg,bulletimg,spaceshipimg: TBitMap;
spaceship: TGameObject;
bullet: array [0..100] of TGameObject;
numofbullets: integer;
implementation
{$R *.lfm}
constructor TGameObject.create(xplacehere,yplacehere: integer; imagehere: Tbitmap);
begin
xplace:=xplacehere;
yplace:=yplacehere;
itsimage:=imagehere;
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var initialmovedir: shortint;
begin
backgroundimg := TBitmap.Create;
backgroundimg.LoadFromFile('kepek/urhatter.bmp');
bulletimg:=TBitMap.Create;
bulletimg.LoadFromFile('kepek/ell_lov.bmp');
bulletimg.transparent:=true;
spaceshipimg:=TBitMap.Create;
spaceshipimg.LoadFromFile('kepek/ell1.bmp');
spaceshipimg.transparent:=true;
randomize;
if round(random(2))=1 then initialmovedir:=-2 else initialmovedir:=2;
spaceship:=TGameObject.create(Form1.ClientWidth div 2,spaceshipimg.height,spaceshipimg);
spaceship.movedir:=initialmovedir;
spaceship.shoottimer:=100;
spaceship.canshoot:=false;
numofbullets:=0;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
backgroundimg.free;
bulletimg.free;
spaceshipimg.free;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j: integer;
begin
Form1.Canvas.StretchDraw(Rect(0, 0, ClientWidth, ClientHeight), backgroundimg);
if spaceship.shoottimer>0 then dec(spaceship.shoottimer) else spaceship.canshoot:=true;
if (spaceship.xplace+spaceship.movedir>=ClientWidth-spaceshipimg.width) or (spaceship.xplace+spaceship.movedir<=1) then
begin
if spaceship.yplace+spaceshipimg.height<ClientHeight then
spaceship.yplace:=spaceship.yplace+spaceshipimg.height
else
spaceship.yplace:=spaceshipimg.height;
spaceship.movedir:=-spaceship.movedir;
end
else
begin
spaceship.xplace:=spaceship.xplace+spaceship.movedir;
end;
Form1.Canvas.Draw(spaceship.xplace,spaceship.yplace,spaceshipimg);
if (round(random(50))=1) and (spaceship.canshoot=true) then
begin
bullet[numofbullets]:=TGameObject.create(spaceship.xplace,spaceship.yplace,bulletimg); {!!!WRONG!!!}
inc(numofbullets);
spaceship.canshoot:=false;
spaceship.shoottimer:=100;
end;
if numofbullets>0 then
begin
i:=0;
while i<numofbullets-1 do
begin
if bullet[i]<>nil then
begin
if bullet[i].yplace>ClientHeight then
begin
freeandnil(bullet[i]);
if i=numofbullets-1 then
dec(numofbullets)
else
begin
for j:=i+1 to numofbullets-1 do
bullet[j-1]:=bullet[j];
dec(numofbullets);
dec(i);
end;
end
else
begin
bullet[i].yplace:=bullet[i].yplace+4;
Form1.Canvas.Draw(bullet[i].xplace,bullet[i].yplace,bulletimg);
end;
end;
inc(i);
end;
end;
end;
end.
Maybe somebody can help me...
Bookmarks