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

📄 unit1.pas

📁 Directx游戏制作开发包DGCBETA6
💻 PAS
📖 第 1 页 / 共 2 页
字号:
                    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 + -