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

📄 kota43b.pas

📁 维修店名称 陕西申元电子有限公司 店面地址 西安市友谊东路242号西海大厦一层 维修咨询 8008105858(免费) 或 010-64751880
💻 PAS
📖 第 1 页 / 共 5 页
字号:
          EntrySound(6);
          for iii := 0 to 2 do
          begin
            k3 := (k1 + 660 + iii*60) mod 720;
            ay := SC[k3]; ax := SC[(k3+180) mod 720];
            k2 := ((k3+22) mod 720) div 45 + 1;
            EntryEnemyShot(x*100,y*100,ax*6,ay*6, 0,0,8,8, k2,  1);
          end;
          EntryEffect(x,y,0,0,1);
        end;
    5 : begin
          EntrySound(5);
          k1 := k1 + (AL.Rnd(180)-90);
          k1 := (k1 + 720) mod 720;
          ay := SC[k1];
          ax := SC[(k1+180) mod 720];
          EntryEnemyShot(x*100,y*100,ax*3,ay*3, 0,0,8,8, 0,  0);
          EntryEffect(x,y,0,0,1);
        end;
    6 : begin
          EntrySound(5);
          k1 := k1 + (AL.Rnd(120)-60);
          k1 := (k1 + 720) mod 720;
          ay := SC[k1]; ax := SC[(k1+180) mod 720];
          k2 := ((k1+22) mod 720) div 45 + 1;
          EntryEnemyShot(x*100,y*100,ax*4,ay*4, 0,0,8,8, k2,  1);
          EntryEffect(x,y,0,0,1);
        end;
    7 : begin
          EntrySound(7);
          for iii := 0 to 5 do
          begin
            ay := SC[k1];
            ax := SC[(k1+180) mod 720];
            ax := trunc(ax * (3 + iii*0.5));
            ay := trunc(ay * (3 + iii*0.5));
            EntryEnemyShot(x*100,y*100,ax,ay, 0,0,12,12, iii, 3);
          end;
        end;
    8 : begin
          EntrySound(6);
          for iii := 0 to 11 do
          begin
            k3 := (k1 + iii*60) mod 720;
            ay := SC[k3];
            ax := SC[(k3+180) mod 720];
            k2 := ((k3+22) mod 720) div 45 + 1;
            EntryEnemyShot(x*100,y*100,ax*3,ay*3, 0,0,8,8, k2, 0);
          end;
          EntryEffect(x,y,0,0,1);
        end;
    9 : begin
          EntrySound(6);
          for iii := 0 to 11 do
          begin
            k3 := (k1 + iii*60) mod 720;
            ay := SC[k3];
            ax := SC[(k3+180) mod 720];
            k2 := ((k3+22) mod 720) div 45 + 1;
            EntryEnemyShot(x*100,y*100,ax*6,ay*6, 0,0,8,8, k2, 1);
          end;
          EntryEffect(x,y,0,0,1);
        end;
    10 : begin
          Entrysound(6);
          ay := SC[k1];
          ax := SC[(k1+180) mod 720];
          k2 := ((k1+22) mod 720) div 45 + 1;
          EntryEnemyShot(x*100+SC[(k1+360)mod 720]*10
                        ,y*100+SC[(k1+180)mod 720]*10
                        ,ax*3,ay*3, 0,0,8,8, k2,  1);
          EntryEnemyShot(x*100-SC[(k1+360)mod 720]*10
                        ,y*100-SC[(k1+180)mod 720]*10
                        ,ax*3,ay*3, 0,0,8,8, k2,  1);
          EntryEffect(x,y,0,0,1);
         end;
    11 : begin
          BackESD := (BackESD + 1) mod 2;
          Entrysound(6);
          for iii := 0 to 5 do
          begin
           if (BackESD=1)then aaa := (k1 + (iii-3)*25 + 720) mod 720
                         else aaa := (k1 + (3-iii)*25 + 720) mod 720;
           ay := trunc(SC[aaa]*(iii*0.4+2));
           ax := trunc(SC[(aaa+180) mod 720]*(iii*0.4+3));
           EntryEnemyShot(x*100,y*100,ax,ay, 0,0,8,8, 1,  0);
          end;
          EntryEffect(x,y,0,0,1);
         end;
     12 : begin
          BackESD := (BackESD + 1) mod 2;
          Entrysound(6);
          for iii := 0 to 5 do
          begin
           if (BackESD=1)then aaa := (k1 + (iii-3)*25 + 720) mod 720
                         else aaa := (k1 + (3-iii)*25 + 720) mod 720;
           ay := trunc(SC[aaa]*(iii*0.5+3));
           ax := trunc(SC[(aaa+180) mod 720]*(iii*0.5+3));
           EntryEnemyShot(x*100,y*100,ax,ay, 0,0,8,8, iii,  3);
          end;
          EntryEffect(x,y,0,0,1);
         end;
     13 : begin
          Entrysound(6);
          for iii := 0 to 5 do
          begin
           ay := trunc(SC[k1]*(iii*0.5+2));
           ax := trunc(SC[(k1+180) mod 720]*(iii*0.5+2));
           EntryEnemyShot(x*100,y*100,ax,ay, 0,0,8,8, iii,  0);
          end;
          EntryEffect(x,y,0,0,1);
         end;
     14 : begin
          entrysound(5);
          EntryEnemyShot(x*100,y*100,ax*4,ay*4, 0,0,8,8, 0,  4);
          end;
     15 : begin                       //儗亅僓亅
          EntrySound(14);
          EntryEnemyShot(x*100,y*100,0,0, 0,0,0,0, 0, 5);
          end;
  end;
end;

//曽岦傪妏搙偱曉偡-----------------------

function TSTG.keisan1(x,y : Integer) : Integer;
var
  atk : Integer;
begin
  //atx := x; aty := y;          //壖曄悢偵戙擖
  //if (atx = 0)then atx := 1;       //椺奜傪旔偗傞
  //if (aty = 0)then aty := 1;
  //atk := trunc( arctan(aty / atx) * 18000 / 3.1415);  //ArcTan傪巊偭偰妏搙傪媮傔傞
  //if (atx < 0)then atk := atk + 18000;                //0-360埲撪偺妏搙偵捈偡
  //if ((x = 0)and(y = 0))then atk := trunc(arctan(0));
  atk := AL.atant2(x,y);
  keisan1 := (atk * 720) shr 10;     //曄悢傊戙擖
end;

//摉偨傝敾掕傪峴偆-------------------------

function TSTG.PlayerHit : Boolean;
var
  iii,aaa : Integer;
begin
  PlayerHit := False;
  for iii := 0 to 200 do
  begin
    if (ESD[iii].Empty = true)then
    begin
      aaa := 0;
      if ((abs((PD[0].x+PD[0].h1) - (ESD[iii].x div 100 + ESD[iii].h1))
           < ((PD[0].h3 + ESD[iii].h3) div 2)))then aaa := aaa + 1;
      if ((abs((PD[0].y+PD[0].h2) - (ESD[iii].y div 100 + ESD[iii].h2))
           < ((PD[0].h4 + ESD[iii].h4) div 2)))then aaa := aaa + 1;
      if (aaa = 2)then
      begin
         PlayerHit := True;
         if (ESD[iii].kind <> 5)then ESD[iii].Empty := False;
      end;
    end;
  end;
  {
  for iii := 0 to 50 do
  begin
    if (ED[iii].Hit = True)then
    begin
      aaa := 0;
      if ((abs((PD[0].x+PD[0].h1) - (ED[iii].x+ED[iii].h1))
           < ((PD[0].h3 + ED[iii].h3) div 2)))then aaa := aaa + 1;
      if ((abs((PD[0].y+PD[0].h2) - (ED[iii].y+ED[iii].h2))
           < ((PD[0].h4 + ED[iii].h4) div 2)))then aaa := aaa + 1;
      if (aaa = 2)then
      begin
        PlayerHit := True;
      end;
    end;
  end;
  }
end;


function TSTG.EnemyHit : Boolean;
var
  iii,jjj,kkk,aaa,aaa2 : Integer;
begin
  EnemyHit := False;
  for iii := 0 to 50 do
  if (ED[iii].Empty = true)then
    for jjj := 0 to 75 do
    if (PSD[jjj].Empty = true)then
    if ((ED[iii].Empty = true) and (ED[iii].z > 99))then
    with ED[iii] do
    begin
      aaa := 0;
      if ((abs((x+h1) - (PSD[jjj].x + PSD[jjj].h1))
            < ((h3 + PSD[jjj].h3) div 2)))then aaa := aaa + 1;
      if ((abs((y+h2) - (PSD[jjj].y + PSD[jjj].h2))
            < ((h4 + PSD[jjj].h4) div 2)))then aaa := aaa + 1;
      if (aaa = 2)then
      begin
         PSD[jjj].HitNo := PSD[jjj].HitNo + 1;
         PD[0].score := PD[0].score + 1;
         //EnemyHit := True;
         Hit := 1;//if ((PSD[jjj].kind = 4)and(hit=0))then hit := 1;
         if (PSD[jjj].kind < 4)then EntryEffect(PSD[jjj].x,PSD[jjj].y,AL.Rnd(4)-2,AL.Rnd(4)-2,0);
         if (PSD[jjj].kind = 4)then EntryEffect(PSD[jjj].x+AL.Rnd(40)-20,PSD[jjj].y+AL.Rnd(40)-20,0,2,0);
         HP := HP - PSD[jjj].power;
         if (PSD[jjj].kind < 4)then PSD[jjj].Empty := False;
         if (HP < 1)then
           begin
             Empty := False;
             DestroyEnemy := (DestroyEnemy + 1) mod 109;//Item
             if ((DestroyEnemy mod 10) = 1)then
               for kkk := 0 to (3+PSD[jjj].HitNo div 14) do EntryItem(x+AL.Rnd(40)-20,y+AL.Rnd(40)-20,0);
             if (DestroyEnemy = 108)then EntryItem(x,y,1);
             //AddScore
             PD[0].score := PD[0].score + (score * (PSD[jjj].HitNo div 7 + 1));
             EntryBom(x,y,0,2,BOM);
             if (MaxComb < (PSD[jjj].HitNo div 7 + 1))then MaxComb := (PSD[jjj].HitNo div 7 + 1);
             if (PSD[jjj].HitNo > 6)then
               //EntryPText(x,y,'x'+IntToStr((PSD[jjj].HitNo div 7) + 1),0);
               EntryPText(x,y,IntToStr(score)+'x'+IntToStr((PSD[jjj].HitNo div 7) + 1),0);
             //愓宍傪偮偗傞
             if (z = 100)then
             begin
               aaa2 := AL.Rnd(4);
               STBack.BltFast(IB[29].img,x-25,y-25+(50-(SCount mod 500)div 10),rect(aaa2*50,0,aaa2*50+50,50),
                              DDBLTFAST_SRCCOLORKEY);
             end;

           end;
      end;
    end;

end;

procedure TSTG.BossHit;
var
  iii,jjj,aa1 : Integer;
begin
  //boss
  if (BOD[0].Empty = True)then
   for iii := 0 to 9 do
   if ((BOD[iii].Level = 0)and(BOD[iii].Empty = True))then
    for jjj := 0 to 75 do
    if (PSD[jjj].Empty = true)then
    if ((BOD[iii].Level = 0) and (abs(BOD[iii].z-150)<49) and (BOD[iii].Empty = True))then
    with BOD[iii] do
    begin
      aa1 := 0;
      if ((abs((x+h1) - (PSD[jjj].x + PSD[jjj].h1))
            < ((h3 + PSD[jjj].h3) div 2)))then aa1 := aa1 + 1;
      if ((abs((y+h2) - (PSD[jjj].y + PSD[jjj].h2))
            < ((h4 + PSD[jjj].h4) div 2)))then aa1 := aa1 + 1;
      if (aa1 = 2)then
      begin
         PSD[jjj].HitNo := PSD[jjj].HitNo + 1;
         PD[0].score := PD[0].score + 1;
         Hit := 1;//if ((PSD[jjj].kind = 4) and (hit=0))then Hit := 1;
         if (PSD[jjj].kind < 4)then EntryEffect(PSD[jjj].x,PSD[jjj].y,AL.Rnd(4)-2,AL.Rnd(4)-2,0);
         if (PSD[jjj].kind = 4)then EntryEffect(PSD[jjj].x+AL.Rnd(40)-20,PSD[jjj].y+AL.Rnd(40)-20,0,2,0);
         HP := HP - PSD[jjj].power; //僸僢僩億僀儞僩尭傜偡
         if (PSD[jjj].kind < 4)then PSD[jjj].Empty := False;    //僫僷亅儉埲奜側傜抏傪徚偡
         if (HP < 1)then
           begin
             //攋夡偟偨偲偒
             Level := 1; a1 := 2;  //攋夡偟偨偙偲傪帵偡僼儔僌
             //揰悢偺昞帵偲寁嶼
             PD[0].score := PD[0].score + (score * (PSD[jjj].HitNo div 7 + 1));
             EntryBom(x,y,0,0,BOM);
             if (MaxComb < (PSD[jjj].HitNo div 7 + 1))then MaxComb := (PSD[jjj].HitNo div 7 + 1);
             if (PSD[jjj].HitNo > 6)then EntryPText(x,y,IntToStr(score)+'x'+IntToStr((PSD[jjj].HitNo div 7) + 1),0)
                                    else EntryPText(x,y,IntToStr(score),0);
           end;
      end;
    end;
 end;



//僗僥亅僕僼傽僀儖偺撉傒崬傒-------------------------
procedure TSTG.EntryStage(FileName : String; Stage : Integer);
var
  FF : FILE;
  temp : TBitmap;
begin
  StageNo := Stage;
  BackESD := 0;

  if (FileExists(FileName) = False)then begin ErrorCode := 255; exit; end;
  assignfile(ff,FileName);
  ReSet(ff,1);
  blockRead(ff,SD,6916);
  closefile(ff);

  if (FileExists(SD.PartsFile) = False)then begin ErrorCode := 255; exit; end;
  temp := TBitmap.Create;
  temp.LoadFromFile(SD.PartsFile);
  if (PEntry = True)then PBank.free;
  PBank := TDDDDSurFace.Create(DD,temp.width,temp.height,0);
  PBank.LoadBMP(SD.PartsFile);
  PEntry := True;

  PBX := round(temp.Width  / 50);
  PBY := round(temp.Height / 50);
  temp.free;
end;
//僗僥亅僕梡弶婜愝掕---------------------------------
procedure TSTG.SetUpStage(Speed : Integer);
var
  iii,jjj,ax,ay : integer;
begin
  SurFaceClear(STBack,0);
  BSCount := 500*6;
  SCount := 500*6;
  PSpeed := Speed;
  PSpeed := Pspeed + (SD.MD[6,0]-127);
  StageClear := False;
  for iii := 0 to 6 do
   for jjj := 0 to 5 do
   begin
    ax := SD.MD[jjj,iii] mod PBX;
    ay := SD.MD[jjj,iii] div PBX;
    STBack.BltFast(PBank,jjj*50,300-iii*50,
                   rect(ax*50,ay*50,ax*50+50,ay*50+50),DDBLTFAST_NOCOLORKEY or DDBLTFAST_WAIT);
   end;
end;
//僗僥亅僕憖嶌
procedure TSTG.MoveStage;
var
  iii,aaa,ax,ay : Integer;
begin
  BSCount := SCount;
  SCount := SCount + PSpeed;
  aaa := Scount div 500;
  //儔僀儞惂屼
  if (aaa = SD.FromLine)then SCount := SD.ToLine*500 + (SCount mod 500);
  //揋偝傫搊応
  if (aaa <> (BSCount div 500))then
  begin
   STBack.BltFast(STBack,0,50,rect(0,0,300,300),DDBLTFAST_NOCOLORKEY or DDBLTFAST_WAIT);
   for iii := 0 to 5 do
   begin
    ax := SD.MD[iii,aaa] mod PBX;
    ay := SD.MD[iii,aaa] div PBX;
    STBack.BltFast(PBank,iii*50,0,
                   rect(ax*50,ay*50,ax*50+50,ay*50+50),0);
   end;
   if (SD.MD[6,aaa] < 200)then PSpeed := Pspeed + (SD.MD[6,aaa]-127);
   if (SD.MD[6,aaa] > 240)then mesivent := SD.MD[6,aaa];
   for iii := 0 to 5 do
    if (SD.ED[iii,aaa] > 0)then
      AutoEnemy(iii*50+25,-25,SD.ED[iii,aaa]);
  end;

end;

//摼揰傪昞帵
procedure TSTG.EntryPText(x,y : Integer; Text : String; opt : byte);
var
  iii,jjj,aaa : Integer;
  sss : String;
begin
  iii := 0;
  while ((TD[iii].Empty = True) and (iii<50))do iii := iii + 1;
  TD[iii].Empty := True;
  TD[iii].x := x;
  TD[iii].y := y;
  TD[iii].Count := 80;
  if (opt > 0)then TD[iii].count := 120;
  TD[iii].TextWidth := Length(Text);
  TD[iii].opt := opt;
  for jjj := 0 to TD[iii].TextWidth-1 do
    begin
     StrMid1(sss,Text,jjj+1,1);
     if (opt > 0)then aaa := ansiPos(sss,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ (-+')
                 else aaa := AnsiPos(sss,'0123456789xABCDEFGHIJKLMNOPQRSTUVWXYZ %');
     if (aaa = 0)then aaa := 1;
     TD[iii].TextNo[jjj] := aaa;
    end;
  //夋柺奜偺応崌拞墰傊婑偣傞
  if (TD[iii].y < 25)then
    TD[iii].y := 25;

end;

procedure TSTG.MovePText;
var
  iii : Integer;
begin
  for iii := 0 to 50 do
   if (TD[iii].Empty = True)then
   begin
    TD[iii].x := TD[iii].x + TD[iii].x1;
    TD[iii].y := TD[iii].y + TD[iii].y1;
    TD[iii].count := TD[iii].count - 1;
    if (TD[iii].count < 1)then TD[iii].Empty := False;
   end;
end;

procedure TSTG.StrMid1(var DsStr : String;
                       Var SsStr : String;
                       a,b : Integer);
var
  nnn : Integer;
  sss : string;
begin
  sss := SsStr;
  nnn := Length(SsStr);
  if (a > 1)then delete(sss,1,a-1);
  if (a+b-1 < nnn)then delete(sss,b+1,255);
  if (Length(sss) > 1)then sss := '3';
  DsStr := sss;
  end;
//僾儗僀儎亅偺攋夡
procedure TSTG.PlayerDestroy;
begin
  PDCount := PDCount + 1;
  if (PDCount < 5)then Entrybom(PD[0].x,PD[0].y,0,0,5);
  if (PDCount = 40)then
  begin
    NoMiss := 0;
    PD[0].SLevel := PD[0

⌨️ 快捷键说明

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