📄 unit1.pas
字号:
With DGCSpriteMgr1.Sprites[0] do
begin
X:=Random(DGCScreen1.Back.Width - width);
Y:=Random(DGCScreen1.Back.Height - Height);
Show;
end;
// Reenable Fire
BulletCount:=0;
end;
end
else
begin
DGCStarField1.Velocity:=1;
if (GetTickCount - ShipappearCount >= 3000)and (Not DGCSpriteMgr1.Sprites[0].Visible) then
begin
DGCSpriteMgr1.Sprites[0].Show;
DGCSpriteMgr1.Sprites[0].Enable;
Bulletcount:=0;
end;
end;
end;
DGCSpriteMgr1.Update;
DGCSpriteMgr1.Draw;
end;
Procedure TForm1.FindFirstAvailableBullet(NewX,NewY,Adirection:Integer);
var
i:integer;
begin
For i:= FirstBullet to FirstBullet + 20 do
begin
if Not DGCSpriteMgr1.Sprites[i].Enabled then
begin
with DGCSpriteMgr1.Sprites[i] do
begin
X:=NewX;
Y:=NewY;
Direction:=Adirection;
Show;
Enable;
Resume;
end;
inc(BulletCount);
Break;
end;
end;
end;
Procedure TForm1.ShowFourMidsizedDonuts(NewX,NewY:integer);
var
showcount,i:Integer;
begin
ShowCount:=0;
For i:= FirstMidDonut to FirstMidDonut +(NumOfDonuts*4) do
begin
if Not DGCSpriteMgr1.Sprites[i].Enabled then
begin
with DGCSpriteMgr1.Sprites[i] do
begin
X:=NewX;
Y:=NewY;
Direction:=Random(32);
Show;
Enable;
end;
inc(ShowCount);
end;
if ShowCount > 3 then Break;
end;
end;
Procedure TForm1.ShowFourSmallsizedDonuts(NewX,NewY:integer);
var
showcount,i:Integer;
begin
ShowCount:=0;
For i:= FirstSmallDonut to FirstSmallDonut +(NumOfDonuts*16) do
begin
if Not DGCSpriteMgr1.Sprites[i].Enabled then
begin
with DGCSpriteMgr1.Sprites[i] do
begin
X:=NewX;
Y:=NewY;
Direction:=Random(32);
Show;
Enable;
end;
inc(ShowCount);
end;
if ShowCount > 3 then Break;
end;
end;
Procedure TForm1.CheckCollisions;
var
i,j:integer;
begin
// any bullet and a donut
for i:=FirstBullet to DGCSpriteMgr1.Sprites.Count-1 do
begin
if DGCSpriteMgr1.Sprites[i].Id = 300 then
begin
for j:= FirstDonut to Firstdonut + NumofDonuts -1 do
begin
if DGCSpriteMgr1.Sprites.Collision(i,j) then
begin
inc(score,100);
With DGCSpriteMgr1.Sprites[j] do
begin
Disable;
Hide;
ShowFourMidSizedDonuts(X+(width div 2),Y+(Height div 2));
end;
With DGCSpriteMgr1.Sprites[i] do
begin
Dec(bulletcount);
Disable;
Stop;
Hide;
end;
If not DGCAudio1.Sound[1].Playing then
begin
DGCAudio1.Sound[1].Position:=0;
DGCAudio1.Sound[1].Play;
end;
end;
if DGCSpriteMgr1.Sprites.Collision(0,j) then
begin
Dec(Lives);
With DGCSpriteMgr1.Sprites[j] do
begin
Hide;
ShowFourMidSizedDonuts(X+(width div 2),Y+(Height div 2));
Disable;
end;
If not DGCAudio1.Sound[1].Playing then
begin
DGCAudio1.Sound[1].Position:=0;
DGCAudio1.Sound[1].Play;
end;
DGCSpriteMgr1.Sprites[0].Hide;
DGCSpriteMgr1.Sprites[0].Disable;
ShipAppearCount:=GetTickCount;
Break;
end;
end;
for j:= FirstMidDonut to (FirstMiddonut + NumofDonuts*4) -1 do
begin
if DGCSpriteMgr1.Sprites.Collision(i,j) then
begin
inc(score,200);
With DGCSpriteMgr1.Sprites[j] do
begin
Disable;
Hide;
ShowFourSmallSizedDonuts(X+(width div 2),Y+(Height div 2));
end;
With DGCSpriteMgr1.Sprites[i] do
begin
Dec(bulletcount);
Disable;
Stop;
Hide;
end;
If not DGCAudio1.Sound[1].Playing then
begin
DGCAudio1.Sound[1].Position:=0;
DGCAudio1.Sound[1].Play;
end;
end;
if DGCSpriteMgr1.Sprites.Collision(0,j) then
begin
Dec(Lives);
With DGCSpriteMgr1.Sprites[j] do
begin
Hide;
ShowFourSmallSizedDonuts(X+(width div 2),Y+(Height div 2));
Disable;
end;
If not DGCAudio1.Sound[1].Playing then
begin
DGCAudio1.Sound[1].Position:=0;
DGCAudio1.Sound[1].Play;
end;
DGCSpriteMgr1.Sprites[0].Hide;
DGCSpriteMgr1.Sprites[0].Disable;
ShipAppearCount:=GetTickCount;
Break;
end;
end;
for j:= FirstsmallDonut to (Firstsmalldonut + NumofDonuts*16) -1 do
begin
if DGCSpriteMgr1.Sprites.Collision(i,j) then
begin
inc(score,300);
Dec(DonutsLeft);
With DGCSpriteMgr1.Sprites[j] do
begin
Disable;
Hide;
end;
With DGCSpriteMgr1.Sprites[i] do
begin
Dec(bulletcount);
Disable;
Stop;
Hide;
end;
If not DGCAudio1.Sound[1].Playing then
begin
DGCAudio1.Sound[1].Position:=0;
DGCAudio1.Sound[1].Play;
end;
end;
if DGCSpriteMgr1.Sprites.Collision(0,j) then
begin
Dec(Lives);
Dec(DonutsLeft);
With DGCSpriteMgr1.Sprites[j] do
begin
Hide;
Disable;
end;
If not DGCAudio1.Sound[1].Playing then
begin
DGCAudio1.Sound[1].Position:=0;
DGCAudio1.Sound[1].Play;
end;
DGCSpriteMgr1.Sprites[0].Hide;
DGCSpriteMgr1.Sprites[0].Disable;
ShipAppearCount:=GetTickCount;
break;
end;
end;
end;
if DGCSpriteMgr1.Sprites.Collision(i,AlienShip) then
begin
DGCAudio1.Sound[0].Stop;
With DGCSpriteMgr1.Sprites[AlienShip] do
begin
Hide;
SaucerTickCount:=GetTickCount;
Inc(Score,1000);
end;
With DGCSpriteMgr1.Sprites[i] do
begin
Dec(bulletcount);
Disable;
Stop;
Hide;
end;
end;
end;
end;
Procedure TForm1.CheckKeys;
var
i:integer;
begin
if DGCScreen1.KeyDown(Vk_Space) then
begin
if (bulletcount < 20) and (Gettickcount - LastFireTickCount >= 50) and (DGCSpriteMgr1.Sprites[0].Visible) then
begin
FindFirstAvailablebullet(DGCSPriteMgr1.Sprites[0].X + (DGCSpriteMgr1.Sprites[0].Width div 2),
DGCSpriteMgr1.Sprites[0].Y+(DGCSpriteMgr1.Sprites[0].height div 2),
(DGCSpriteMgr1.Sprites[0] as TDGCThruster).CurrentDirection);
LastFireTickCount:=GetTickCount;
If not DGCAudio1.Sound[2].Playing then
begin
DGCAudio1.Sound[2].Position:=0;
DGCAudio1.Sound[2].Play;
end;
end;
end;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #27 then
close;
if (Upcase(key) = 'P') then
begin
Apaused := not Apaused;
if Apaused then
begin
DGCScreen1.FlippingEnabled:=false;
with DGCScreen1.Front.Canvas do
begin
Font.Size := 18;
Brush.Style:=Bsclear;
Font.Color := clwhite;
TextOut((DGCScreen1.Front.Width div 2) - (TextWidth('Game Paused') div 2),200 , 'Game Paused');
Release;
end;
end
else
DGCScreen1.FlippingEnabled:=true;
end;
if (UpCase(Key)='H') then
begin
DGCStarField1.Velocity:=20;
DGCSpriteMgr1.Sprites[0].Hide;
HyperSpaceTickCount:=GetTickCount;
HyperSpaceWait:=10+Random(20);
end;
if (key = #13) and (Awaiting) then
begin
DGCAudio1.Sound[3].PlayLoop;
NextLevel;
AWaiting:=False;
end;
If (key = #13) and (Gameend) then
begin
ShipAppearCount:=GetTickCount;
CurrentLevel:=0;
AWaiting:=true;
GameEnd:=False;
HyperSpaceTickCount:=0;
APaused:=False;
Lives:=3;
Score:=0;
end;
end;
procedure TForm1.DGCSpriteMgr1SpriteStopped(Sprite: TDGCSprite;
LimitsSide: TLimitsSide);
begin
if Sprite.Id = 300 then
begin
Sprite.Disable;
Sprite.Hide;
Dec(BulletCount);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -