亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.pas

?? 很好玩的一個DELPHI游戲
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
{*******************************************************}
{                Magic Girl                             }
{         版權所有 (C) 2002, 2003 Rainstorey Studio     }
{         ------------------------------------------    }
{                                                       }
{                                                       }
{            游戲邏輯實現單元,也是最無聊的代碼。       }
{                                                       }
{                                                       }
{         E-Mail:Rainstorey@163.com                     }
{         WebSite:http://www.Rainstorey.com             }
{*******************************************************}

//TODO:更好的方法是分解邏輯和界面代碼。
unit Main;

interface

uses
  Windows,Messages,SysUtils,Classes,Graphics,MMSystem,Controls,Forms,
  DXDraws,DXClass,DXSprite,DXInput,GameClasses,DXSounds,DXFonts,DIB,
  GameConst,DIBEffect,ExtCtrls;

type
  TFMain = class(TDXForm)
    DXDraw:TDXDraw;
    Image:TDXImageList;
    DXTimer1:TDXTimer;
    SpriteEngine:TDXSpriteEngine;
    Input:TDXInput;
    WaveList:TDXWaveList;
    Sound:TDXSound;
    DXFont:TDXFont;
    Timer1:TTimer;
    procedure DXDrawInitialize(Sender:TObject);
    procedure DXDrawFinalize(Sender:TObject);
    procedure FormCreate(Sender:TObject);
    procedure DXTimer1Timer(Sender:TObject;LagCount:Integer);
    procedure FormKeyDown(Sender:TObject;var Key:Word;
      Shift:TShiftState);
    procedure FormCloseQuery(Sender:TObject;var CanClose:Boolean);
    procedure Timer1Timer(Sender:TObject);
  private
    procedure BuildMap(const Back:Integer);
    procedure MCINOTIFY(var Message:TMessage); message MM_MCINOTIFY;
    procedure ShowDiamCount;
    procedure GameInit;
  public
    GameFullScreen:Boolean; //游戲已全屏幕顯示
    FCount:Cardinal; //以100楨/秒計算,該值要等16個月后才會溢出。
    MainPlayer:TMainPlayer;
    BackMap:array[0..2] of TBackMap;
    Bullet:TBullet;
    BackPlayer:array[0..20] of TBackPlayer;
    BlueDiam,GreenDiam,YellowDiam:Integer;
    BulletOffPoint:TPoint;
    TotalScore:Cardinal;
    BossFCount:Cardinal;
    FSureFace:TDirectDrawSurface;
    LogoDIB:TDIBEffect;
    GameStatus:TGameStatus;
    ApplicationExit:Boolean;
    function CreateMainPlayer(const t:Cardinal = 0):Boolean;
    procedure GetOnArticle(ArticleType:TArticleType;Sender:TObject);
    procedure BuildEnemy;
    procedure GamePassAndAddScore;

  end;

var
  FMain:TFMain;

implementation

uses MainProcess;
{$R *.dfm}

procedure TFMain.DXDrawInitialize(Sender:TObject);
begin
  mciSendString('OPEN BGM01.mid TYPE SEQUENCER ALIAS BGM',nil,0,handle);

  DXTimer1.Enabled:=True;
  Self.Caption:= 'Demo Game';
  ShowCursor(False);
  GameInit;
  //兼容性問題
  with DXDraw.Surface.Canvas do
  begin
    Brush.Style:=bsClear;
    Font.Color:=clYellow;
    Font.Name:= 'MonoType Corsiva';
    Font.Size:=14;
  end;
  LogoDIB:=TDIBEffect.Create;
  LogoDIB.Assign(Image.Items.Find('MMLogo').Picture);
  //  FSureFace:=TDirectDrawSurface.Create(DXDraw.DDraw);

  GameStatus:=Gaming;
  DXTimer1.Interval:=0;
  GameStatus:=GameLogo;

  //WaveList.Items.Find('RainLogo').Play(false);
end;

procedure TFMain.DXDrawFinalize(Sender:TObject);
begin
  DXTimer1.Enabled:=False;
  mciSendString('STOP BGM',nil,0,handle);
  mciSendString('CLOSE ANIMATION',nil,0,handle);
  ShowCursor(True);
  GameStatus:=GameExit;
  ApplicationExit:=True;
  // FSureFace.Free;
  // FSureFace:=nil;
  // aa.Free;
end;

procedure TFMain.FormCreate(Sender:TObject);
begin
  Self.Color:=clBlack;
  DXDraw.Color:=clBlack;
  Randomize;
  ApplicationExit:=False;
  GameFullScreen:=True;
  if GameFullScreen then
  begin
    Self.BorderStyle:=bsNone;
    DXDraw.Display.Height:=600;
    DXDraw.Display.Width:=800;
    DXDraw.Display.BitCount:=16;
    DXDraw.Options:=DXDraw.Options + [doFullScreen];
    DXTimer1.Interval:=0;
  end;
  //打開硬件加速
 // DXDraw.Options:=DXDraw.Options+[do3D,doWaitVBlank,doDirectX7Mode,doHardware]-[doSystemMemory];

end;

procedure TFMain.DXTimer1Timer(Sender:TObject;LagCount:Integer);
begin
  if not (DXDraw.CanDraw) then Exit;
  DXDraw.Surface.Fill(0);
  // Image.Items.Find('DirectX').DrawAlpha(DXDraw.Surface,Bounds(0,DXDraw.SurfaceHeight - 100,40,59),0,FCount);
  // Image.Items.Find('Delphi').DrawAlpha(DXDraw.Surface,Bounds(0,DXDraw.SurfaceHeight - 41,114,41),0,FCount * 2);
  if (GameStatus = Gaming) or (GameStatus = GamePassing) then
  begin
    SpriteEngine.Move(1);
    SpriteEngine.Dead;
    SpriteEngine.Draw;
    ShowDiamCount;
    BuildEnemy;
    with DXDraw.Surface.Canvas do
    begin
      TextOut(30,10, 'FPS:' + IntToStr(DXTimer1.FrameRate));
      TextOut(30,30, 'FPSCount:' + IntToStr(FCount));
      TextOut(30,50, 'Press "Z" or "Space" key transmit bullet.Press "ESC" exit.');
      TextOut(30,70, 'SCORE:' + IntToStr(TotalScore));
      TextOut(120,DXDraw.SurfaceHeight - 30, 'RainBlog:http://www.rainstorey.com/blog');
      // TextOut(30,50,IntToStr(Trunc(TDebug)));
      Release;
    end;
    // aa.AddMonoNoise(FCount);
    // aa.Effect_AddColorNoise(fcount);
      // DXDraw.Surface.Draw(0,0,FSureFace.ClientRect,nil,True);
  { if FCount<50 then
   begin
      aa.Effect_Darkness(fcount);

    FSureFace.LoadFromDIB(aa);

    DXDraw.Surface.Draw(0,0,FSureFace.ClientRect,FSureFace,True);
    end;  }
  end;
  case GameStatus of
    GameMenu:
      begin
        LogoDIB.Assign(Image.Items.Find('MMLogo').Picture);
        LogoDIB.Effect_Mosaic(40 - FCount);

        DXDraw.Surface.LoadFromDIB(LogoDIB);
        DXDraw.Surface.Draw(0,0,DXDraw.Surface.ClientRect,DXDraw.Surface,True);
        if FCount = 200 then
        begin
          LogoDIB.Free;
          FCount:=0;
          GameStatus:=Gaming;
          mciSendString('PLAY BGM NOTIFY',nil,0,handle);
          WaveList.Items.Find('Go').Play(False);
        end;

      end;
    GameLogo:
      begin
        DXDraw.Surface.Fill(clwhite);
        Image.Items.Find('RainLogo').DrawAlpha(DXDraw.Surface,Bounds((DXDraw.Width div 2) - 215,(DXDraw.Height div 2) - 45,430,90),0,FCount);
        if FCount = 255 then
        begin
          FCount:=0;
          DXTimer1.Interval:=20;
          GameStatus:=GameMenu;
        end;
      end;
    GamePassing:GamePassAndAddScore;
    GamePass:
      begin
        LogoDIB.Emboss;
        DXDraw.Surface.LoadFromDIB(LogoDIB);
        DXDraw.Surface.Draw(0,0,DXDraw.Surface.ClientRect,DXDraw.Surface,True);
        DXTimer1.Enabled:=False;
        Timer1.Enabled:=True;
      end;
  end;
  DXDraw.Flip;
  Inc(FCount);
end;

procedure TFMain.FormKeyDown(Sender:TObject;var Key:Word;
  Shift:TShiftState);
begin
  if Key = VK_ESCAPE then Close;

end;

procedure TFMain.BuildMap(const Back:Integer);
var
  i,j:Integer;
begin
  case Back of
    0:
      begin
        for i:=0 to BackMap[Back].MapWidth - 1 do
          for j:=0 to BackMap[Back].MapHeight - 1 do
          begin
            BackMap[Back].Chips[i,j]:=Random(10);
          end;
      end;
    1:
      begin
        for i:=0 to BackMap[Back].MapWidth - 1 do
          for j:=0 to BackMap[Back].MapHeight - 1 do
          begin
            BackMap[Back].Chips[i,j]:=Random(300);
          end;
      end;
    2:
      begin
        for i:=0 to BackMap[Back].MapWidth - 1 do
          for j:=0 to BackMap[Back].MapHeight - 1 do
          begin
            BackMap[Back].Chips[i,j]:=Random(300);
          end;
      end;
  end;
end;

procedure TFMain.MCINOTIFY(var Message:TMessage);
begin
  mciSendString('SEEK BGM TO START',nil,0,handle);
  mciSendString('PLAY BGM NOTIFY',nil,0,handle);
end;

procedure TFMain.ShowDiamCount;
begin
  with DXDraw.Surface.Canvas do
  begin
    TextOut(DXDraw.SurfaceWidth - 75,6, 'X' + IntToStr(GreenDiam));
    TextOut(DXDraw.SurfaceWidth - 175,6, 'X' + IntToStr(BlueDiam));
    TextOut(DXDraw.SurfaceWidth - 275,6, 'X' + IntToStr(YellowDiam));
    Release;
  end;
  // DXFont.TextOut(DXDraw.Surface,0,52, 'SCORE:' + IntToStr(TotalScore));
end;

procedure TFMain.GameInit;
var
  i:Integer;
begin
  Image.Items.MakeColorTable;

  DXDraw.ColorTable:=Image.Items.ColorTable;
  DXDraw.DefColorTable:=Image.Items.ColorTable;
  DXDraw.UpdatePalette;

  //定義所有Sprite坐標系原點
  SpriteEngine.Engine.X:=0;
  SpriteEngine.Engine.Y:=0;
  //
  CreateMainPlayer;

  //--------------------------------
  BackMap[0]:=TBackMap.Create(SpriteEngine.Engine);
  BackMap[0].Image:=Image.Items.Find('Back0');
  BackMap[0].SetMapSize(300,DXDraw.SurfaceWidth);
  BackMap[0].Tile:=True;
  BackMap[0].Z:= -10;
  BackMap[0].Speed:=0.5;
  BackMap[0].Y:=Random(10);
  BuildMap(0);

  BackMap[1]:=TBackMap.Create(SpriteEngine.Engine);
  BackMap[1].Image:=Image.Items.Find('Back1');
  BackMap[1].SetMapSize(300,DXDraw.SurfaceWidth);
  BackMap[1].Tile:=True;
  BackMap[1].Z:= -9;
  BackMap[1].Speed:=10;
  BackMap[1].Inclined:=1;
  BackMap[1].Y:=Random(25);
  BuildMap(1);

  BackMap[2]:=TBackMap.Create(SpriteEngine.Engine);
  BackMap[2].Image:=Image.Items.Find('Back2');
  BackMap[2].SetMapSize(300,DXDraw.SurfaceWidth);
  BackMap[2].Tile:=True;
  BackMap[2].Z:= -8;
  BackMap[2].Speed:=5;
  BackMap[2].Inclined:= -2;
  BackMap[2].Y:=Random(25);
  BuildMap(2);

  for i:=0 to 5 do
  begin
    BackPlayer[i]:=TBackPlayer.Create(SpriteEngine.Engine);
    with BackPlayer[i] do
    begin
      Image:=FMain.Image.Items.Find('Back3');
      Width:=Image.Width;
      Height:=Image.Height;
      AnimCount:=Image.PatternCount - 1;
      Speed:=Random(25) + 1;
      X:=Random(DXDraw.SurfaceWidth);
      Z:=1;
    end;
  end;

  for i:=6 to 8 do
  begin
    BackPlayer[i]:=TBackPlayer.Create(SpriteEngine.Engine);
    with BackPlayer[i] do
    begin
      Image:=FMain.Image.Items.Find('Back4');
      Width:=Image.Width;
      Height:=Image.Height;
      AnimCount:=Image.PatternCount - 1;
      Speed:=Random(20) + 1;
      X:=Random(DXDraw.SurfaceWidth);
      Z:=1;
    end;
  end;

  for i:=9 to 11 do
  begin
    BackPlayer[i]:=TBackPlayer.Create(SpriteEngine.Engine);
    with BackPlayer[i] do
    begin
      Image:=FMain.Image.Items.Find('Back5');
      Width:=Image.Width;
      Height:=Image.Height;
      AnimCount:=Image.PatternCount - 1;
      Speed:=Random(20) + 1;
      X:=Random(DXDraw.SurfaceWidth);
      Z:=1;
    end;
  end;

  for i:=12 to 15 do
  begin
    BackPlayer[i]:=TBackPlayer.Create(SpriteEngine.Engine);
    with BackPlayer[i] do
    begin
      Image:=FMain.Image.Items.Find('Back6');
      Width:=Image.Width;
      Height:=Image.Height;
      AnimCount:=Image.PatternCount - 1;
      Speed:=Random(20) + 1;
      X:=Random(DXDraw.SurfaceWidth);
      Z:=1;
    end;
  end;

  for i:=16 to 17 do
  begin
    BackPlayer[i]:=TBackPlayer.Create(SpriteEngine.Engine);
    with BackPlayer[i] do
    begin
      Image:=FMain.Image.Items.Find('Back7');
      Width:=Image.Width;
      Height:=Image.Height;
      AnimCount:=Image.PatternCount - 1;
      Speed:=Random(20) + 1;
      X:=Random(DXDraw.SurfaceWidth);
      Z:=1;
    end;
  end;

  BackPlayer[18]:=TBackPlayer.Create(SpriteEngine.Engine);
  with BackPlayer[18] do
  begin
    Image:=FMain.Image.Items.Find('BlueDiamond');
    Width:=Image.Width;
    Height:=Image.Height;
    AnimCount:=Image.PatternCount - 1;
    Quiescence:=True;
    X:=DXDraw.SurfaceWidth - 200;
    Y:=0;
    Z:=10;
  end;

  BackPlayer[19]:=TBackPlayer.Create(SpriteEngine.Engine);
  with BackPlayer[19] do
  begin
    Image:=FMain.Image.Items.Find('YellowDiamond');
    Width:=Image.Width;
    Height:=Image.Height;
    AnimCount:=Image.PatternCount - 1;
    Quiescence:=True;
    X:=DXDraw.SurfaceWidth - 300;
    Y:=0;
    Z:=10;
  end;

  BackPlayer[20]:=TBackPlayer.Create(SpriteEngine.Engine);
  with BackPlayer[20] do
  begin
    Image:=FMain.Image.Items.Find('GreenDiamond');
    Width:=Image.Width;
    Height:=Image.Height;
    AnimCount:=Image.PatternCount - 1;
    Quiescence:=True;
    X:=DXDraw.SurfaceWidth - 100;
    Y:=0;
    Z:=10;
  end;
  BulletOffPoint.X:=20;
  BulletOffPoint.Y:=0;
end;

//這是一個不好的設計,因該重新考慮其它方案來取代這冗長無聊的代碼!!!

procedure TFMain.BuildEnemy;
var
  i:Integer;
begin

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷国产精品| 欧美一区二区在线不卡| 日韩精品国产欧美| 国产精品久久影院| 欧美成人video| 欧美探花视频资源| 成人美女在线观看| 黄色成人免费在线| 日本91福利区| 亚洲一区二区三区国产| 国产精品久久毛片av大全日韩| 日韩一级大片在线观看| 欧美亚男人的天堂| 91蝌蚪porny成人天涯| 国产精品一级二级三级| 日韩高清电影一区| 亚洲成av人片www| 一区二区三区在线观看网站| 久久久久久麻豆| 欧美videos中文字幕| 在线不卡一区二区| 欧洲激情一区二区| 91丝袜美腿高跟国产极品老师 | 国产精品高潮呻吟久久| 精品国产成人在线影院| 91精品在线免费| 欧美日韩aaaaaa| 欧美调教femdomvk| 欧美视频在线一区| 欧美吻胸吃奶大尺度电影 | 日韩av中文字幕一区二区| 亚洲免费在线播放| 亚洲人成亚洲人成在线观看图片| 国产人久久人人人人爽| 精品粉嫩aⅴ一区二区三区四区| 日韩欧美一区在线| 精品国产网站在线观看| 久久综合色综合88| 久久精品这里都是精品| 精品精品国产高清一毛片一天堂| 日韩精品中文字幕在线一区| 日韩一级片在线观看| 欧美成人aa大片| 久久久噜噜噜久久中文字幕色伊伊| 日韩精品中文字幕一区二区三区| 欧美一区二区三区小说| 欧美一区欧美二区| 欧美不卡在线视频| 久久精品视频免费观看| 国产精品萝li| 一区二区三区在线播| 亚洲国产精品人人做人人爽| 午夜国产精品影院在线观看| 日韩成人精品在线观看| 久久精品国产成人一区二区三区 | 日本中文字幕一区二区有限公司| 免费美女久久99| 国产精品一区二区在线看| 国产精品亚洲一区二区三区妖精| 成人污视频在线观看| 一本大道久久精品懂色aⅴ| 欧美综合一区二区三区| 欧美一区二区三区色| 久久综合久久久久88| 国产精品天美传媒沈樵| 亚洲男人的天堂在线aⅴ视频| 亚洲成a人片综合在线| 久久99精品久久久久久动态图| 久久国产免费看| 丁香激情综合五月| 欧美色涩在线第一页| 精品噜噜噜噜久久久久久久久试看| 久久婷婷国产综合精品青草| 国产精品福利影院| 天堂影院一区二区| 国产成人精品综合在线观看 | 精品国产一区二区三区四区四| 久久九九久久九九| 亚洲一区中文在线| 国产精品一区二区三区99| 色哟哟一区二区在线观看| 日韩一区二区在线看| 国产精品日韩成人| 日韩专区一卡二卡| 成人av资源下载| 欧美一区二区三区性视频| 国产精品国产三级国产有无不卡 | 久久se精品一区精品二区| 成人国产一区二区三区精品| 欧美色视频在线| 欧美国产视频在线| 日韩 欧美一区二区三区| 国产成人精品亚洲午夜麻豆| 欧美亚洲自拍偷拍| 国产亚洲精品aa| 日韩精品视频网| 99re视频精品| 精品国产电影一区二区| 亚洲一区二区三区视频在线| 成人小视频免费观看| 欧美一区二区在线不卡| 亚洲激情av在线| 高清不卡一区二区| 欧美mv日韩mv国产| 亚洲风情在线资源站| 99久久精品国产麻豆演员表| 欧美成人猛片aaaaaaa| 亚洲成人tv网| 色系网站成人免费| 中文字幕欧美一| 国产精品一区二区在线播放| 91精品国产一区二区| 亚洲黄色尤物视频| av一区二区三区四区| 国产亚洲一区二区在线观看| 青娱乐精品视频在线| 欧美午夜精品一区二区蜜桃| **网站欧美大片在线观看| 国产精品一二二区| 久久毛片高清国产| 久久成人免费电影| 精品伦理精品一区| 欧美bbbbb| 日韩美一区二区三区| 日韩成人av影视| 欧美日本国产视频| 天堂va蜜桃一区二区三区漫画版| 在线观看一区不卡| 亚洲国产视频在线| 日本高清视频一区二区| 亚洲精品免费看| 色婷婷亚洲综合| 亚洲一区在线电影| 欧美日韩国产bt| 日本三级韩国三级欧美三级| 欧美日韩在线直播| 亚洲一级二级三级在线免费观看| 色av一区二区| 亚洲大型综合色站| 欧美精品一二三| 免费观看一级欧美片| 日韩一区二区麻豆国产| 久久国产精品露脸对白| 亚洲精品在线观看网站| 国产呦精品一区二区三区网站| 精品国产乱码久久久久久免费| 九一九一国产精品| 久久免费偷拍视频| av日韩在线网站| 一区二区三区影院| 欧美日韩国产片| 日本在线不卡视频一二三区| 日韩精品一区二区在线| 韩国av一区二区三区四区| 久久久99精品免费观看| 99精品一区二区三区| 亚洲综合免费观看高清在线观看| 欧美日韩精品专区| 老汉av免费一区二区三区 | 日本在线不卡一区| 久久青草欧美一区二区三区| av在线这里只有精品| 亚洲电影一区二区三区| 日韩一区二区免费电影| 成人小视频在线观看| 亚洲一区二区在线观看视频 | 91亚洲国产成人精品一区二区三| 一区二区三区在线视频免费观看| 欧美高清视频一二三区| 国产一区在线观看麻豆| 亚洲色图丝袜美腿| 欧美一区二区三区男人的天堂| 国产传媒一区在线| 亚洲在线观看免费视频| 精品美女被调教视频大全网站| 成人国产免费视频| 亚洲va韩国va欧美va| 久久久精品影视| 欧美视频在线一区二区三区| 国产精品一区在线| 亚洲小少妇裸体bbw| 久久久久久久免费视频了| 色天使色偷偷av一区二区| 久久99热这里只有精品| 中文字幕一区二区三区四区 | 亚洲国产精品一区二区www| 久久色.com| 色妹子一区二区| 激情综合色播激情啊| 亚洲图片欧美色图| 欧美国产在线观看| 日韩欧美在线不卡| 色94色欧美sute亚洲线路一久 | 精品久久国产97色综合| av福利精品导航| 精品影视av免费| 午夜电影一区二区三区| 亚洲婷婷综合久久一本伊一区| 日韩一区二区三区高清免费看看| 色女孩综合影院|