Добрый день.
Честно говоря впечатлен вашей статьей,
не могли бы вы мне помочь
Сразу говорю, я относительно недавно начал изучать язык, поэтому попрошу сильно не ругаться, за некоторые возможно глупые вопросы).
Сейчас сам пытаюсь реализовать небольшую игру.
И у меня возникла проблемка в самом начале, не могли бы подсказать как вы реализовали создание объектов Player (игрок) и Enemy(враги).
Вот, например, (начну с самого начала):
у меня есть модуль main и модуль objects:
Код:
TBase=class
private
x: Integer;
y: Integer;
public
constructor Create(x0, y0: Integer);
procedure setX (x0: Integer); //назначают координаты
procedure setY (y0: Integer);
function getX: Integer; //возвращают координаты
function getY: Integer;
end;
{ TStatic }
TStatic=class(TBase)
private
bitmap: TBitmap;
public
constructor Create(x0, y0: Integer; bitmap0: TBitmap);
procedure setBitmap (bitmap0: TBitmap); // меняет изображ. внутри объекта
function getBitmap: TBitmap; // возвращает изображение
end;
{ TAnimate }
TAnimate=class(TBase)
private
bitmap: array[0..100] of TBitmap;
curFrame: Integer; //текущий кадр
maxFrame: Integer; //максим.кадр
public
constructor Create(x0, y0: Integer; bitmap0: array of TBitmap;
maxFrame0: Integer);
procedure nextFrame; //меняет кадры
procedure setBitmap(bitmap0: array of TBitmap);
function getBitmap:TBitmap;
end;
{ TEnemy }
TEnemy=class(TAnimate)
public
procedure move;
end;
{ TPlayer }
TPlayer=class(TAnimate)
private
health: Integer;
public
constructor Create(x0, y0: Integer; bitmap0: array of TBitmap;
maxFrame0: Integer);
procedure moveLeft;
procedure moveRight;
function getHealth: Integer;
end;
implementation
{ TEnemy }
procedure TEnemy.move;
begin
y:= y+3;
end;
{ TPlayer }
constructor TPlayer.Create(x0, y0: Integer; bitmap0: array of TBitmap;
maxFrame0: Integer);
begin
inherited;
health:= 100;
end;
procedure TPlayer.moveLeft;
begin
x:= x-5;
end;
procedure TPlayer.moveRight;
begin
x:= x+5;
end;
{ TAnimate }
constructor TAnimate.Create(x0, y0: Integer; bitmap0: array of TBitmap;
maxFrame0: Integer);
begin
x:=x0;
y:=y0;
bitmap:=bitmap0;
curFrame:= 0;
maxFRame:= maxFrame0;
end;
procedure TAnimate.nextFrame;
begin
if curFrame < maxFrame then
curFrame:=curFrame+1
else
curFrame:=0;
end;
procedure TAnimate.setBitmap(bitmap0: array of TBitmap);
begin
bitmap:=bitmap0;
end;
function TAnimate.getBitmap: TBitmap;
begin
result:=bitmap[curFrame];
end;
{ TStatic }
constructor TStatic.Create(x0, y0: Integer; bitmap0: TBitmap);
begin
x:=x0;
y:=y0;
bitmap:=bitmap0;
end;
procedure TStatic.setBitmap(bitmap0: TBitmap);
begin
bitmap:=bitmap0;
end;
function TStatic.getBitmap: TBitmap;
begin
result:=bitmap;
end;
{ TBase }
constructor TBase.Create(x0, y0: Integer);
begin
x:=x0;
y:=y0;
end;
procedure TBase.setX(x0: Integer);
begin
x:=x0;
end;
procedure TBase.setY(y0: Integer);
begin
y:=y0;
end;
function TBase.getX: Integer;
begin
result:=x;
end;
function TBase.getY: Integer;
begin
result:=y;
end;
end.
В модуле main у меня след.образом объявлены переменные:
Код:
Form1: TForm1;
//graphics
plPic: array [0..2] of TBitmap;
grPic: array [0..2] of TBitmap;
enPic: array [0..2] of TBitmap;
seaPic: TBitmap;
bulPic: TBitmap;
//objects
Player: TPlayer;
Sea: array [0..1] of Tsea ;
Ground: array [0..2] of TGround;
Bullet: array [0..100] of TBullet;
Enemy: array [0..100] of TEnemy;
//booleans
MoveL, MoveR: boolean;
Shoot: boolean;
//Integers
delay:Integer;
score: Integer;
И подгружается графика:
//load graphics
//player
for i:=0 to 2 do
begin
plPic[i]:= TBitmap.Create;
plPic[i].LoadFromFile('img/player'+IntToStr(i)+'.bmp');
plPic[i].Transparent:= True;
end;
//enemies (графика для enemy)
for i:=0 to 2 do
begin
enPic[i]:= TBitmap.Create;
enPic[i].LoadFromFile('img/enemy'+IntToStr(i)+'.bmp');
enPic[i].Transparent:= True;
end;
MAD: напоминаю про теги
Далее идет реализация процедур.
Проблема в том, что в модуле objects выдает ошибку incompetible types (bitmap и bitmap0).........прошу вас посмотреть, что можно исправить.
А также подскажите, пож-та, как вы реализовали создание объектов.