⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usprite.pas

📁 泡泡游戏---实验阶段
💻 PAS
📖 第 1 页 / 共 3 页
字号:
   AnimCount:=1;
   AnimStart:=0;
  end;
end;

procedure TPlayerSprite.ApplyGoods;
begin
end;

function TPlayerSprite.Clone: TGameSprite;
begin
  Result:=nil;
end;

procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  inherited DoCollision(Sprite, Done);
end;

procedure TPlayerSprite.DoMove(MoveCount:integer);
begin
  inherited DoMove(MoveCount);
end;

procedure TPlayerSprite.MoveDown;
var
  iTmp: Integer;
begin
  if not (sNormal in FStates) then
  begin
   SwitchToState([sNormal]);
  end;
  AnimCount:=4;
  AnimStart:=0;
  iTmp:=Trunc(Y)+FCurSpeed;
  if iTmp>FGameMap.Height-Height then
    iTmp:=FGameMap.Height-Height;
   Y :=iTmp;
  ResetIdledTime;
end;

procedure TPlayerSprite.MoveLeft;
var
  iTmp: Integer;
begin
  if not (sNormal in FStates) then
  begin
   SwitchToState([sNormal]);
  end;
  AnimCount:=4;
  AnimStart:=8;
  iTmp:=Trunc(X)-FCurSpeed;
  if iTmp<FGameMap.Left then
    iTmp:=FGameMap.Left;
  
  X :=iTmp;
  ResetIdledTime;
end;

procedure TPlayerSprite.MoveRight;
var
  iTmp: Integer;
begin
  if not (sNormal in FStates) then
  begin
   SwitchToState([sNormal]);
  end;
  AnimCount:=4;
  AnimStart:=4;
  iTmp:=Trunc(X )+ FCurSpeed;
  if iTmp>FGameMap.Width-Width then
   iTmp:=FGameMap.Width-Width;
  X :=iTmp;
  ResetIdledTime;
end;

procedure TPlayerSprite.MoveUp;
var
  iTmp: Integer;
begin
  if not (sNormal in FStates) then
  begin
   SwitchToState([sNormal]);
  end;
  AnimCount:=4;
  AnimStart:=12;
  iTmp:=Trunc(Y)-FCurSpeed;
  if iTmp<FGameMap.Top then
   iTmp:=FGameMap.Top;
  Y :=iTmp;
  ResetIdledTime;
end;

procedure TPlayerSprite.ResetIdledTime;
begin
  FIdledTime:=0;
end;

procedure TPlayerSprite.ResetTrapedTime;
begin
  FTrapedTime:=0;
end;

procedure TPlayerSprite.SetDXISL(Value: TDXImageList);
begin
  inherited SetDXISL(Value);
  Image:=Value.Items.Find('BaoBao');
  Width:=Image.Width ;
  Height:=Image.Height;
  PlayerNumber:=0;
  AnimCount:=4;
  AnimStart:=0;
  AnimLooped:=True;
  AnimSpeed:=0.1;
  ADX:=0;
  ADY:=(Height div 2)-10;
end;

procedure TPlayerSprite.SettleBomb;
var
  oTmpSprite: TBombSprite;
begin
  if ((FCurBombsSettled<FCurMaxBombs)and
      (not Assigned(FGameMap.GetBombAt(SX,SY)))
     )
     then
  begin
  oTmpSprite:=TBombSprite((TPoolSingleton.GetSpritePool()).GetSprite('TBombSprite'));
  if Assigned(oTmpSprite)  then
  begin
  
  oTmpSprite.Init(FCurPower,SX,SY);
  oTmpSprite.Player:=self;
  oTmpSprite.Activate;
  
  inc(FCurBombsSettled);
  ResetIdledTime;
  end;
  end;
end;

procedure TPlayerSprite.SubCurBombsSettled;
begin
  Dec(FCurBombsSettled);
end;

procedure TPlayerSprite.SwitchToState(const sState:TPlayerStates);
begin
  if sDead in sState then
  begin
    FStates:=[sDead];
  end else
  if sTrap in sState then
  begin
    FStates:=[sTrap];
  end else
  if sNormal in sState then
  begin
   FStates:=FStates+[sNormal];
   FStates:=FStates-[sSparkling];
   Image:=DXISL.Items.Find('BaoBao');
   Width:=Image.Width ;
   Height:=Image.Height;
   AnimSpeed:=0.1;
   FStates:=FStates-[sSparkling];
  end else
  if sSparkling in sState then
  begin
    FStates:=FStates+[sSparkling];
    FStates:=FStates-[sNormal];
    Image:=DXISL.Items.Find('BaoBaoEye');
    Width:=Image.Width ;
    Height:=Image.Height;
    AnimCount:=2;
    AnimStart:=0;
    AnimLooped:=True;
    AnimSpeed:=0.05;
  end;
end;

procedure TPlayerSprite.Trap;
begin
end;

procedure TPlayerSprite.UnTrap;
begin
end;

{
********************************* TBombSprite **********************************
}
constructor TBombSprite.Create(ASprite:TSprite);
begin
  inherited Create(ASprite);
  FSpriteName:='泡泡';
  FTimeSpanToExplode:=3200;
end;

procedure TBombSprite.Act;
begin
  if GetTickCount()>=Cardinal(FTimeSpanToExplode+FActivateTime) then
  //若定时时间到
  begin
   Explode;
   Dead;
  end;
end;

procedure TBombSprite.Activate;
begin
  FGameMap.SetSpriteAt(SX,SY,self);
  inherited Activate;
end;

function TBombSprite.Clone: TGameSprite;
begin
  Result:=TBombSprite.Create(Parent);
  Result.DXISL:=DXISL;
  Result.GameMap:=GameMap;
end;

procedure TBombSprite.Dead;
begin
  FGameMap.ClearSpriteAt(SX,SY);
  inherited Dead;
end;

procedure TBombSprite.DoMove(MoveCount:integer);
begin
  inherited DoMove(MoveCount);
end;

procedure TBombSprite.Explode;
var
  oTmpFireSprite: TCenterFireSprite;
begin
    Player.SubCurBombsSettled();
    //泡泡爆炸后,减少玩家已放的但还处于定时中的泡泡个数。
    oTmpFireSprite:=TCenterFireSprite((TPoolSingleton.GetSpritePool()).GetSprite('TCenterFireSprite'));
    //得到中心水柱对象
    oTmpFireSprite.Init(FPower,SX,SY);//初始化参数
    oTmpFireSprite.Activate;//激活此中心水柱
end;

procedure TBombSprite.Init(const iExtendPower,iSX,iSY:integer);
begin
  FPower:=iExtendPower;
  SX:=iSX;
  SY:=iSY;
end;

function TBombSprite.IsLinkWith(const oSprite:TGameSprite): Boolean;
var
  iTmpPower,iTmpSX1,iTmpSY1,iTmpSX2,iTmpSY2: Integer;
begin
  Result:=False;
  if not (oSprite is TBombSprite) then Exit;
  if FPower>=TBombSprite(oSprite).Power then
    iTmpPower:=FPower
  else  iTmpPower:=TBombSprite(oSprite).Power;
  iTmpSX1:=SX;
  iTmpSY1:=SY;
  iTmpSX2:=oSprite.SX;
  iTmpSY2:=oSprite.SY;
  if ((iTmpSX1=iTmpSX2) and (ABS(iTmpSY1-iTmpSY2)<=iTmpPower))or
     ((iTmpSY1=iTmpSY2) and (ABS(iTmpSX1-iTmpSX2)<=iTmpPower))
  then
  begin
    Result:=true;
    Exit;
  end;
end;

function TBombSprite.MakeSelfDes: string;
begin
  Result:='施放时间点:'+IntToStr(FActivateTime);
  Result:=Result+'-'+'威力:'+IntToStr(FPower);
  Result:=Result+'-'+'池中位序:'+IntToStr(FQInPool);
  Result:=Result+'-'+'位置:('+FloatToStr(WorldX)+
  ','+FloatToStr(WorldY)+')';
end;

procedure TBombSprite.SetDXISL(Value: TDXImageList);
begin
  inherited SetDXISL(Value);
  Image:=Value.Items.Find('Bomb');
  Width:=Image.Width;
  Height:=Image.Height;
  AnimCount:=3;
  AnimStart:=0;
  AnimLooped:=True;
  AnimSpeed:=0.06;
end;

{
********************************* TFireSprite **********************************
}
procedure TFireSprite.Act;
begin
  case FExtended of
  True:begin
        if GetTickCount()>=Cardinal(FExtendTimeSpan+FActivateTime) then
        begin//若水柱存在的时间到
          Dead;
        end;
       end;
  False:begin
          Extend;
        end;
  end;//endcase
end;

function TFireSprite.Clone: TGameSprite;
begin
  Result:=nil;
end;

procedure TFireSprite.Dead;
begin
  inherited Dead;
  FExtended:=False;
end;

procedure TFireSprite.Extend;
begin
  FExtended:=True;
end;

function TFireSprite.MakeSelfDes: string;
begin
  Result := inherited MakeSelfDes;
end;

{
****************************** TCenterFireSprite *******************************
}
constructor TCenterFireSprite.Create(ASprite:TSprite);
begin
  inherited Create(ASprite);
  FSpriteName:='中心火';
end;

function TCenterFireSprite.Clone: TGameSprite;
begin
  Result:=TCenterFireSprite.Create(Parent);
  Result.DXISL:=DXISL;
  Result.GameMap:=GameMap;
end;

procedure TCenterFireSprite.Extend;
var
  oTmpPool: TGameSpritePool;
  oTmpFireSprite: TExtendFireSprite;
begin
  inherited Extend;
  oTmpPool:=TPoolSingleton.GetSpritePool();
  
  oTmpFireSprite:=TExtendFireSprite(oTmpPool.GetSprite('TExtendFireSprite'));
  if Assigned(oTmpFireSprite) then
  begin
  oTmpFireSprite.Init(FExtendPower-1,1,SX,SY);//右方向
  oTmpFireSprite.Activate;
  end;
  
  oTmpFireSprite:=TExtendFireSprite(oTmpPool.GetSprite('TExtendFireSprite'));
  if Assigned(oTmpFireSprite) then
  begin
  oTmpFireSprite.Init(FExtendPower-1,2,SX,SY);//上方向
  oTmpFireSprite.Activate;
  end;
  
  oTmpFireSprite:=TExtendFireSprite(oTmpPool.GetSprite('TExtendFireSprite'));
  if Assigned(oTmpFireSprite) then
  begin
  
  oTmpFireSprite.Init(FExtendPower-1,3,SX,SY);//左方向
  oTmpFireSprite.Activate;
  end;
  
  oTmpFireSprite:=TExtendFireSprite(oTmpPool.GetSprite('TExtendFireSprite'));
  if Assigned(oTmpFireSprite) then
  begin
  oTmpFireSprite.Init(FExtendPower-1,4,SX,SY);//下方向
  oTmpFireSprite.Activate;
  end;
end;

procedure TCenterFireSprite.Init(const iExtendPower:integer;iSX,iSY:integer);
begin
  FExtendPower:=iExtendPower;
  FExtendTimeSpan:=(iExtendPower-1)*15+300;
  SX:=iSX;
  SY:=iSY;
  
  
  //此后面要加入设置动画参数程序;
end;

function TCenterFireSprite.MakeSelfDes: string;
begin
  Result := inherited MakeSelfDes;
end;

procedure TCenterFireSprite.SetDXISL(Value: TDXImageList);
begin
  inherited SetDXISL(Value);
  Image:=Value.Items.Find('Fire');
  Width:=Image.Width;
  Height:=Image.Height;
  AnimCount:=1;
  AnimStart:=0;
  AnimLooped:=True;
  AnimSpeed:=0.1;
end;

{
****************************** TExtendFireSprite *******************************
}
constructor TExtendFireSprite.Create(ASprite:TSprite);
begin
  inherited Create(ASprite);
  FSpriteName:='方向火';
end;

function TExtendFireSprite.Clone: TGameSprite;
begin
  Result:=TExtendFireSprite.Create(Parent);
  Result.DXISL:=DXISL;
  Result.GameMap:=GameMap;
end;

procedure TExtendFireSprite.Extend;
var
  oTmpFireSprite: TExtendFireSprite;
begin
  inherited Extend;
  if (FExtendPower>0) then
  begin
   oTmpFireSprite:=TExtendFireSprite((TPoolSingleton.GetSpritePool()).GetSprite('TExtendFireSprite'));
   oTmpFireSprite.Init(FExtendPower-1,FDirection,SX,SY);
   oTmpFireSprite.Activate;
  end;
end;

procedure TExtendFireSprite.Init(const iExtendPower,iDrection:integer;iSX,
        iSY:integer);
begin
  FExtendPower:=iExtendPower;
  FExtendTimeSpan:=(iExtendPower-1)*15+300;
  FDirection:=iDrection;
  
  case FDirection of
   1:begin
       SX:=iSX+1;
       SY:=iSY;
  
       //此后面要加入设置动画参数程序;
       if FExtendPower=0 then
       begin
         AnimStart:=6;
         Exit;
       end;
  
  
       AnimStart:=2;
  
  
     end;
   2:begin
       SX:=iSX;
       SY:=iSY-1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -