📄 kota43b.pas
字号:
procedure TSTG.MoveBom;
var
iii : Integer;
begin
for iii := 0 to 75 do
begin
if (BD[iii].Empty = True)then
begin
with BD[iii] do
begin
a3 := a3 + 1;
case kind of
0: begin
if (a3 = 1)then EntryEffect(x,y,AL.Rnd(140)-70,AL.Rnd(140)-70,5);
if (a1 > 16)then Empty := False;
end;
1: begin
if (a3 = 1)then a2 := (random(3) mod 3);
if (a1 > 16)then Empty := False;
end;
9:
begin
if (a3 = 1)then
begin
EntrySound(0);
EntryBom(x,y,0,-2,0);
EntryBom(x,y,-1,1,0);
EntryBom(x,y,1,1,0);
end;
if ((a3 mod 5) = 1)then
begin
if (a3 < 11)then EntrySound(0);
EntryBom(x,y,AL.Rnd(9)-4,AL.Rnd(7),0);
end;
if (a3 > 25)then empty := False;
end;
2:
begin
if (a3 = 1)then
begin
EntrySound(1);
EntrySound(0);
EntryBom(x-10,y-10,-2,-2,0);
EntryBom(x+10,y-10,2,-2,0);
EntryBom(x+10,y+10,2,2,0);
EntryBom(x-10,y+10,-2,2,0);
EntryBom(x,y,0,0,1);
end;
if (a3 > 3)then EntryBom(x,y,AL.Rnd(11)-5,AL.Rnd(11)-5,0);
if (a3 > 8)then empty := False;
end;
3:
begin
if (a3 = 1)then EntrySound(0);
EntryBom(x,y,AL.Rnd(7)-3,AL.Rnd(5)-2,0);
if (a3 > 2)then empty := False;
end;
4:
begin
if (a3 = 1)then
begin
EntrySound(2);
EntryBom(x,y,AL.Rnd(7)-3,AL.Rnd(7)-3,1);
end;
EntryBom(x,y,AL.Rnd(16)-8,AL.Rnd(16)-3,0);
EntrySound(0);
if (a3 > 8)then empty := False;
end;
5:
begin
if (a3 = 1)then
begin
EntrySound(1);
EntryBom(x,y,AL.Rnd(7)-3,AL.Rnd(7)-3,1);
end;
EntryBom(x,y,AL.Rnd(11)-5,AL.Rnd(11)-1,0);
EntrySound(0);
if (a3 > 6)then empty := False;
end;
6: //抏傕偽傜嶵偔
begin
if (a3 = 1)then
begin
EntrySound(1);
AutoEnemyShot(x,y,8,AL.Rnd(720)-1);
EntryBom(x,y,0,0,1);
if (Dif = 1)then AutoEnemyShot(x,y,8,AL.Rnd(720)-1);
end;
EntryBom(x,y,AL.Rnd(20)-10,AL.Rnd(20)-10,0);
if (a3 > 4)then empty := False;
end;
7: //戝墛忋
begin
if ((a3 mod 3)=0)then
begin
EntryBom(x+AL.Rnd(100)-50,y+AL.Rnd(100)-50,0,0,5);
EntryBom(x+AL.Rnd(50)-25,y+AL.Rnd(50)-25,0,0,2);
EntrySound(1);
end;
if (a3 > 12)then empty := False;
end;
8: //愴幵敋敪
begin
if (a3 = 1)then
begin
EntrySound(1);
EntryBom(x+12,y+6,0,0,0);
EntryBom(x-12,y+6,0,0,0);
EntryBom(x ,y-6,0,0,0);
end;
if (a3 > 5)then EntryBom(x,y,AL.Rnd(7)-3,AL.Rnd(7)-3,0);
if (a3 > 7)then empty := False;
end;
end;
x := x + x1; y := y + y1;
if ((x<-30) or (x>330))then Empty := False;
if ((y<-30) or (y>330))then Empty := False;
a1 := a1 + 1;
end;
end;
end;
end;
//僄僼僃僋僩岠壥偺張棟------------------------
procedure TSTG.EntryEffect(x,y,x1,y1 : SmallInt; kind : Byte);
var
iii : Integer;
begin
iii := 0;
while ((EFD[iii].Empty = True) and (iii<75))do iii := iii + 1;
if (iii = 75)then iii := AL.Rnd(75);
EFD[iii].Empty := True;
EFD[iii].x := x;
EFD[iii].y := y;
EFD[iii].x1 := x1;
EFD[iii].y1 := y1;
EFD[iii].a1 := 0;
EFD[iii].a2 := 0;
EFD[iii].a3 := 0;
EFD[iii].kind := kind;
end;
procedure TSTG.MoveEffect;
var
iii : Integer;
begin
for iii := 0 to 75 do
if (EFD[iii].Empty = True)then
with EFD[iii] do
begin
a2 := a2 + 1;
case kind of
0 : begin
a1 := a2+1;
if (a2 > 5)then Empty := False;
x := x + x1;
y := y + y1;
end;
1 : begin
a1 := a2+7;
if (a2 > 5)then Empty := False;
x := x + x1;
y := y + y1;
end;
2 : begin
if (a2 = 1)then begin x1 := x; y1 := y; a3 := AL.Rnd(720); end;
a3 := (a3 + 24) mod 720;
x := x1 + SC[a3] * (43-a2) div 100;
y := y1 + SC[(a3 + 180) mod 720] * (43-a2) div 100;
if (a2 > 40)then Empty := False;
a1 := 13 + a2 div 7;
end;
3 : begin
if (a2 = 1)then begin x1 := x; y1 := y; a3 := AL.Rnd(720); end;
a3 := (a3 + 24) mod 720;
x := x1 + SC[a3] * a2 div 100;
y := y1 + SC[(a3 + 180) mod 720] * a2 div 100;
if (a2 > 40)then Empty := False;
a1 := 13 + a2 div 7;
end;
4 : begin
a1 := a2+13;
if (a2 > 6)then Empty := False;
x := x + x1;
y := y + y1;
end;
5 : begin
a1 := (a2 mod 6)+19;
if (a2 > 47)then Empty := False;
x := x + x1 div 10;
y := y + y1 div 10;
y1 := y1 + 1;
if (y > 300)then Empty := False;
if (abs(x-150)>150)then Empty := False;
end;
6 : begin
a1 := a2+25;
if (a2 > 1)then Empty := False;
x := x + x1;
y := y + y1;
end;
7 : begin
a1 := a2+25;
if (a2 > 6)then Empty := False;
x := x + x1;
y := y + y1;
end;
end;
end;
end;
//傾僀僥儉偺張棟------------------------------
procedure TSTG.EntryItem(x,y : SmallInt; kind : Byte);
var
iii : Integer;
begin
iii := 0;
while ((ID[iii].Empty = True) and (iii<25))do iii := iii + 1;
ID[iii].Empty := True;
ID[iii].x := x;
if (ID[iii].x > 300)then ID[iii].x := 300;
if (ID[iii].x < 0) then ID[iii].x := 0;
ID[iii].y := y;
ID[iii].x1 := 0;
ID[iii].y1 := 5;
ID[iii].kind := kind;
end;
procedure TSTG.MoveItem;
var
iii : Integer;
begin
for iii := 0 to 25 do
if (ID[iii].Empty = True)then
with ID[iii] do
begin
if (PD[0].x > x)then x := x + 1
else x := x - 1;
if (PlayerLong(x,y)<35)then
case kind of
0 : begin //ShotPowerUp
PD[0].SLevel := PD[0].SLevel + 1;
if ((PD[0].Slevel div 20) <> ((PD[0].SLevel-1) div 20))then EntryPText(PD[0].x,PD[0].y,'POWER UP',0);
PD[0].score := PD[0].score + PointScore;
EntryPText(x,y,IntToStr(PointScore),0);
PointScore := PointScore + 10;
if (PointScore > 1000)then PointScore := 1000;
if (PD[0].SLevel > 65)then PD[0].SLevel := 65;
Empty := False;
EntrySound(11);
end; //BomAdd
1 : begin
PD[0].BOM := PD[0].BOM + 1;
if (PD[0].BOM > 6)then
begin
PD[0].BOM := 6;
PD[0].score := PD[0].score + 10000;
EntryPText(x,y,'10000 POINTS',0);
end
else EntryPText(x,y,'SPECIAL BOM',0);
EntrySound(12);
Empty := False;
end;
end;
y := y + y1 div 10;
y1 := y1 + 1;
if (y > 300)then
begin
Empty := False;
if (kind = 0)then PointScore := 100;
end;
end;
end;
//僓僐揋偺張棟--------------------------------
procedure TSTG.EntryEnemy(x,y,z,h1,h2,h3,h4,a2,a3,HP : SmallInt;
Move,attk,bom, kind : Byte; Score:Integer);
var
iii : Integer;
begin
iii := 0;
while ((ED[iii].Empty = True) and (iii<50))do iii := iii + 1;
ED[iii].Empty := True;
ED[iii].x := x;
ED[iii].y := y;
ED[iii].z := z;
ED[iii].a2 := a2;
ED[iii].a3 := a3;
ED[iii].a4 := 0;
ED[iii].h1 := h1; ED[iii].h2 := h2;
ED[iii].h3 := h3; ED[iii].h4 := h4;
ED[iii].kind := kind;
ED[iii].Move := Move;
ED[iii].attk := attk;
ED[iii].Hit := 0;
ED[iii].HP := HP;
ED[iii].x1 := 0;
ED[iii].y1 := 0;
ED[iii].bom := bom;
ED[iii].score := score;
end;
procedure TSTG.MoveEnemy;
var
iii,jjj,aaa : Integer;
aa1,aa2,aa3,aa4 : Integer;
begin
//揋偺崅掅偝傪僗儚僢僾偡傞
EnemyNo := 0;
for iii := 0 to 50 do
if (ED[iii].Empty = True)then
begin
ESwap[EnemyNo] := iii;
EnemyNo := EnemyNo + 1;
end;
for iii := 0 to EnemyNo-1 do
for jjj := 0 to (EnemyNo-iii-1) do
begin
if (ED[Eswap[iii]].z > ED[ESwap[iii+jjj]].z)then
begin
aaa := Eswap[iii];
Eswap[iii] := ESwap[iii+jjj];
ESwap[iii+jjj] := aaa;
end;
end;
for iii := 0 to EnemyNo-1 do
begin
aaa := ESwap[iii];
if (ED[aaa].Empty = True)then
begin
ED[aaa].a4 := ED[aaa].a4 + 1;
with ED[aaa] do
begin
//摦偒
Shot := False;
case Move of
0 : //慜恑丒慁夞
begin
y1 := 300; a1 := 2;
if (a4 = 1)then a4 := AL.Rnd(40);
if (a4 > 80)then if (x > 150)then begin x1 := x1 + 20; a1 := 3; end
else begin x1 := x1 - 20; a1 := 1; end;
x := x + x1 div 100;
y := y + y1 div 100;
if (100<PlayerLong(x,y))then
if ((a4 mod (40-dif*15)) = 1)then AutoEnemyShot(x,y,attk,-1);
if ((x < -25) or (x > 325)) then Empty := False;
end;
1 : //慜恑丒掆巭丒慜恑
begin
if (a4 = 1)then y1 := 800;
if (y1 > 70)then y1 := y1 - 25;
if (a4 > 65)then y1 := y1 + 40;
x := x + x1 div 100;
y := y + y1 div 100;
if ((a4 = 30)and(dif>-1))then AutoEnemyShot(x,y,3,180);
if (a4 = 35)then AutoEnemyShot(x,y,attk,-1);
if ((dif = 1)and(a4 = 10))then AutoEnemyShot(x,y,3,-1);
a1 := 2;
if (y > 350) then Empty := False;
end;
2 : //慜恑丒屻戅
begin
if (a4 = 1)then y1 := 600;
y1 := y1 - 10;
x := x + x1 div 100;
y := y + y1 div 100;
if ((a4>(33-dif*3))and(a4<39))then AutoEnemyShot(x,y,attk,-1);
if ((y1 < 0) and (y < -20))then Empty := False;
a1 := keisan1(PD[0].x - x ,PD[0].y - y);
a1 := abs(360-a1);
a1 := (a1 div 55)+1;
if (y < -50) then Empty := False;
end;
3 : //慜恑丒屻戅丒僶僸儏亅儞
begin
if (a4 = 1)then y1 := 600;
y1 := y1 - 10;
x := x + x1 div 100;
y := y + y1 div 100;
if (a4 = 30)then
begin
AutoEnemyShot(x-20,y,attk,200);
AutoEnemyShot(x+20,y,attk,160);
y := y - 15;
end;
if ((a4 > (37-dif*2)) and (a4 < 42))then
begin
AutoEnemyShot(x-40,y+10,5,-1);
AutoEnemyShot(x+40,y+10,5,-1);
end;
if ((y1 < 0) and (y < -20))then Empty := False;
a1 := 1;
end;
4 : //慜恑丒帺敋乮抏偽傜嶵偒乯
begin
y := y + 4;
if (y > 250)then
begin
Empty := False;
EntryBom(x,y,0,0,6);
end;
a2 := (a2 + 1) mod 9;
a1 := a2 + 1;
end;
5: //傎傠悓偄僒僀儞嬋慄
begin
if (a4 = 1)then x1 := x;
if (a4 = 1)then a4 := AL.Rnd(25);
y := y + 3;
a2 := (a2 + 12) mod 720;
a3 := (a3 + 1) mod 18;
a1 := a3 + 1;
x := x1 + trunc(SC[a2]*30 / 100);
if (100<PlayerLong(x,y))then
if ((a4 mod (35-dif*15)) = 1)then AutoEnemyShot(x,y,attk,-1);
if (y > 325) then Empty := False;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -