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

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

?? urunning.pas

?? 一個dos游戲的源代碼
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
//極限1000米
//Author: CrazyWill
//Email: CrazyWill@163.com

unit uRunning;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, ExtCtrls, StdCtrls, IniFiles,
  uInclude, uSprite, uMap, uArrow, uCut, uFire, MPlayer;

type

  TForm_Run = class(TForm)
    Label1: TLabel;
    pnlView: TPanel;
    pbxView: TPaintBox;
    Timer1: TTimer;
    MediaPlayer1: TMediaPlayer;
    MediaPlayer2: TMediaPlayer;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    Map: TMap;
    Sprite: TSprite;
    Cut: TCut;
    Arrows: array[1..MaxArrowNumber] of TArrow;
    Fires: array[1..MaxFireNumber] of TFire;

    FBackBitmap: TBitmap; // dobule-buffering

    FGameStatus: TGameStatus; // 游戲狀態

    procedure Init;
    procedure InitGame;
    procedure UpdateView;
    procedure DrawBackBitmap;
    procedure DrawStatusBox(S: string; TopOrCenter: Boolean);
    procedure UpdateControlStatus;

    procedure SetGameStatus(Value: TGameStatus);

    procedure GameLoop; // 游戲主循環

    //碰撞檢查
    function CheckCollisions: Boolean;

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_Run: TForm_Run;
  sound: Boolean;

implementation

uses uRun;

{$R *.dfm}

procedure TForm_Run.UpdateView;
begin
  DrawBackBitmap; // 先畫在內存的bitmap上
  pbxView.Canvas.Draw(0, 0, FBackBitmap); // 再復制到屏幕
end;

// 先將畫面繪制在緩沖用 bitmap, 再復制到屏幕

procedure TForm_Run.DrawBackBitmap;
var
  Str: string;
  R: TRect;
  i: integer;
begin
  Map.Draw(FBackBitmap.Canvas);
  for i := 1 to MaxArrowNumber do
    Arrows[i].Draw(FBackBitmap.Canvas);
  Sprite.Draw(FBackBitmap.Canvas);

  for i := 1 to MaxFireNumber do
    Fires[i].Draw(FBackBitmap.Canvas);
  Cut.Draw(FBackBitmap.Canvas);

  //    FBackBitmap.Canvas.Brush.Color := clBlack;
  //    FBackBitmap.Canvas.FillRect(FBackBitmap.Canvas.ClipRect);

  with FBackBitmap.Canvas do
  begin
    Font.Color := clWhite;
    Font.name := 'FixedSys';
    Font.Style := [fsBold];
    Font.Size := 12;
    Brush.Style := bsClear;

    case FGameStatus of
      gsTitle: //畫出上面的標題大字及下方的作者名稱
        begin
          R := Rect(0, 0, WORLD_WIDTH,
            WORLD_HEIGHT - TextHeight('и'));
          DrawText(Handle, '“潮之陽”軟件工作室', -1, R,
            DT_BOTTOM or DT_CENTER or DT_SINGLELINE);
          DrawStatusBox('極限1000米', True);
        end;

      gsOver:
        DrawStatusBox('Game Over', False);

    else
      begin
        //右上角顯示生命力及行程
        Str := Format('生命力:%d  行程:%d',
          [Sprite.HP, Map.CurrentMetre]);
        TextOut(WORLD_WIDTH - TextWidth(Str) - 5, 5, Str);
      end;
    end;

    //過關畫面
    if FGameStatus = gsSuccess then
      DrawStatusBox('Success!', False);
  end;
end;

procedure TForm_Run.Init;
var
  ini: TINIFILE;
  Filename: string;

begin
  Filename := ExtractFilePath(Paramstr(0)) + GameIniFilename;

  try
    ini := TINIFILE.Create(Filename);
  except
    showmessage('打開INI文件出錯');
    close;
  end;

  IniDirectory := ini.ReadString('Game', 'IniDirectory', IniDirectory);
  IniDirectory := ExtractFilePath(Paramstr(0)) + IniDirectory + '\';

  ////  IniFilename := ini.ReadString('Game', 'IniFilename', IniFilename);

  ini.Destroy;

  ini := TINIFILE.Create(IniDirectory + IniFilename);

  CurrentSkinName := ini.ReadString('Base', 'SkinName', CurrentSkinName);
  Transparent_Color := ini.ReadInteger('Base', 'Transparent_Color', clBlack);
  WORLD_WIDTH := ini.ReadInteger('Map', 'Width', WORLD_WIDTH);
  WORLD_HEIGHT := ini.ReadInteger('Map', 'Height', WORLD_HEIGHT);

  MapRollSpeed := ini.ReadInteger('Map', 'Speed', MapRollSpeed);

  ini.Destroy;
end;

procedure TForm_Run.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
begin
  if (FGameStatus = gsPlaying) or (FGameStatus = gsPause) then
  begin
    Action := caNone; /// 禁用窗口右上角的X按鈕退出程序
    Exit; /// 退出必須按ESC鍵正常退出
  end;

  SetGameStatus(gsPause);

  Timer1.Enabled := false;

  FBackBitmap.Destroy;

  for i := 1 to MaxFireNumber do
    Fires[i].Destroy;
  for i := 1 to MaxArrowNumber do
    Arrows[i].Destroy;
  Cut.Destroy;
  Sprite.Destroy;
  Map.Destroy;

  MediaPlayer1.Close;

  Form_Main.Close;
end;

procedure TForm_Run.FormCreate(Sender: TObject);
var
  i: integer;
  fn: string;
begin
  init;

  Map := TMap.Create;
  Sprite := TSprite.Create;
  Cut := TCut.Create;

  for i := 1 to MaxArrowNumber do
    Arrows[i] := TArrow.Create;

  for i := 1 to MaxFireNumber do
    Fires[i] := TFire.Create;

  pnlView.ClientWidth := Map.Width;
  pnlView.ClientHeight := Map.Height;

  pbxView.Width := Map.Width;
  pbxView.Height := Map.Height;

  self.ClientWidth := Map.Width;
  self.ClientHeight := Map.Height;

  self.Top := (SCREEN.Height - self.Height) div 2;
  self.Left := (SCREEN.Width - self.Width) div 2;

  FBackBitmap := TBitmap.Create;
  FBackBitmap.Width := Map.Width;
  FBackBitmap.Height := Map.Height;

  InitGame;

  UpdateView;

  Timer1.Enabled := true;

  SetGameStatus(gsTitle);

  Sprite.Active := false;
  Map.Active := true;
  Cut.Active := true;
  Arrows[1].Active := true;

  fn := ExtractFilePath(Paramstr(0)) + 'RUN.MID';
  if FileExists(fn) then
  begin
    MediaPlayer1.FileName := fn;
    MediaPlayer1.Open;
    sound := True;
  end
  else
    sound := False;

end;

procedure TForm_Run.Timer1Timer(Sender: TObject);
var
  i: integer;
begin
  if Sprite.Active then
  begin
    Map.Roll;
    Cut.Cut;
    if Map.Active then
    begin
      for i := 1 to MaxArrowNumber do
        Arrows[i].X := Arrows[1].X - MapRollSpeed;
      for i := 1 to MaxFireNumber do
        Fires[i].X := Fires[i].X - MapRollSpeed;
    end;

    for i := 1 to MaxArrowNumber do
      Arrows[i].Roll;
    for i := 1 to MaxFireNumber do
      Fires[i].Drop;

    Sprite.Move;
  end
  else
  begin
    if Map.Active then
    begin
      Map.Roll;
      Cut.Cut;
      for i := 1 to MaxArrowNumber do
      begin
        Arrows[i].X := Arrows[1].X - MapRollSpeed;
        Arrows[i].Roll;
      end;
      for i := 1 to MaxFireNumber do
      begin
        Fires[i].X := Fires[i].X - MapRollSpeed;
        Fires[i].Drop;
      end;

      Sprite.RollBack;
    end
  end;

  CheckCollisions;

  UpdateView;
end;

procedure TForm_Run.DrawStatusBox(S: string; TopOrCenter: Boolean);
var
  R: TRect;
  TextSize: TSize;
begin
  with FBackBitmap, FBackBitmap.Canvas do
  begin
    Font.Color := clWhite; //設置字體屬性
    Font.name := 'FixedSys';
    Font.Style := [fsBold];
    Font.Size := 36;

    TextSize := TextExtent(S);
    // first calculate the necessary rectangle
    R := Rect(0, 0, TextSize.cx, TextSize.cy);
    OffsetRect(R, (Width - TextSize.cx) div 2, (Height - TextSize.cy) div 2);
    // 將框框置于畫面中央

    if TopOrCenter then
    begin
      R.Top := 24; // 將框框擺在上方中間
      R.Bottom := R.Top + TextSize.cy;
    end;

    InflateRect(R, 10, 10); //描繪外框,寬度為10
    Pen.Width := 4;
    Pen.Color := clWhite;
    Pen.Style := psSolid;
    Brush.Color := clBlue;
    Brush.Style := bsSolid;
    Rectangle(R.Left, R.Top, R.Right, R.Bottom);
    //  將字畫出來,置中對齊
    DrawText(Canvas.Handle, PChar(S), Length(S), R, DT_CENTER or DT_SINGLELINE
      or
      DT_VCENTER);
  end;
end;

procedure TForm_Run.SetGameStatus(Value: TGameStatus);
var
  fn: string;
begin
  FGameStatus := Value;

  //根據新的游戲狀態開關定時器
  Timer1.Enabled := (FGameStatus = gsPlaying);

  case FGameStatus of
    gsTitle:
      begin
        Sprite.Active := false;
        Map.Active := false;

      end;

    gsPlaying:
      begin
        Sprite.Active := False;
        Map.Active := True;

        UpdateControlStatus; //更新標題欄及菜單
        UpdateView; //更新游戲畫面

        GameLoop; //  進入游戲主循環(游戲進行中程序一直在此循環內)
        /////////////////////////////
      end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一级电影视频| 91免费看`日韩一区二区| 亚洲黄网站在线观看| 中文字幕不卡在线播放| 国产精品久久久久久久蜜臀| 欧美高清在线精品一区| 国产视频一区二区在线观看| 国产欧美一区二区精品仙草咪| xfplay精品久久| 中文字幕不卡在线观看| 综合久久久久久| 亚洲一区二区三区四区的| 亚洲bt欧美bt精品777| 日韩成人一级大片| 久久99最新地址| 成人黄色777网| 欧美亚洲禁片免费| 日韩欧美二区三区| 中文字幕一区日韩精品欧美| 亚洲精品综合在线| 美日韩一区二区| 成人在线视频首页| 日本电影欧美片| 欧美一卡二卡三卡四卡| 国产精品久久看| 日韩电影在线观看电影| 成人综合激情网| 7777精品伊人久久久大香线蕉的| 久久综合狠狠综合久久激情| 成人欧美一区二区三区黑人麻豆 | 欧美精品一区二区三区四区| 久久综合九色综合欧美98| 中文字幕永久在线不卡| 同产精品九九九| 成人av中文字幕| 精品久久久久一区| 亚洲永久免费av| 成人做爰69片免费看网站| 7777精品伊人久久久大香线蕉经典版下载 | 午夜久久久久久电影| 国产成人综合网站| 欧美日韩成人激情| 国产精品欧美极品| 久久精品99国产国产精| 在线看一区二区| 国产日韩欧美精品电影三级在线| 亚洲国产成人av| 99精品热视频| 国产人妖乱国产精品人妖| 亚洲国产一区在线观看| av动漫一区二区| 2020国产精品久久精品美国| 亚洲国产精品久久人人爱蜜臀| 成熟亚洲日本毛茸茸凸凹| 欧美tk—视频vk| 爽爽淫人综合网网站| 在线看国产一区| 国产精品久久久久天堂| 国产精品99久久久| 精品美女在线播放| 另类综合日韩欧美亚洲| 欧美狂野另类xxxxoooo| 亚洲一级在线观看| 欧美视频完全免费看| 亚洲精品视频在线| 91污在线观看| 亚洲视频电影在线| 91麻豆精品在线观看| 亚洲免费在线播放| 色综合天天综合网国产成人综合天 | 亚洲精品视频一区二区| 99久久国产综合精品色伊| 国产精品剧情在线亚洲| 成人精品一区二区三区四区| 亚洲国产精品99久久久久久久久| 精品亚洲porn| 久久综合色8888| 国产不卡高清在线观看视频| 国产日韩欧美麻豆| 91一区二区在线| 一区二区三区国产精品| 欧美视频一区二| 蜜臀av一区二区| 2021国产精品久久精品| 国产不卡高清在线观看视频| 亚洲欧洲日韩在线| 日本大香伊一区二区三区| 亚洲影视在线观看| 日韩视频在线你懂得| 久国产精品韩国三级视频| 国产网红主播福利一区二区| 成人福利在线看| 午夜精品福利久久久| 久久综合视频网| 91色|porny| 蜜臀av一区二区在线免费观看 | 欧美日韩一区二区欧美激情| 美女任你摸久久| 欧美激情中文不卡| 欧美日韩三级在线| 卡一卡二国产精品| 中文字幕一区二区三区精华液| 日本韩国视频一区二区| 久久99蜜桃精品| 一区精品在线播放| 欧美一二区视频| 97se亚洲国产综合自在线观| 视频一区二区国产| 国产免费成人在线视频| 6080yy午夜一二三区久久| 国产精品一区二区你懂的| 亚洲精品免费在线观看| 精品成人私密视频| 欧美三区在线视频| www.欧美亚洲| 久久爱www久久做| 一区二区理论电影在线观看| 久久久亚洲综合| 制服丝袜亚洲色图| 99久久99久久综合| 国产成人免费av在线| 亚洲电影中文字幕在线观看| 国产欧美精品一区| 欧美成人一区二区三区| 欧洲精品在线观看| 9i在线看片成人免费| 国产在线精品免费| 美女视频一区二区| 三级亚洲高清视频| 亚洲免费看黄网站| 国产精品国产三级国产普通话99 | 欧美日韩国产美| 91美女片黄在线观看| 高清在线观看日韩| 国产乱码精品一品二品| 久草中文综合在线| 美腿丝袜亚洲色图| 美女在线观看视频一区二区| 亚洲r级在线视频| 亚洲视频香蕉人妖| 中文字幕一区二区三区精华液| 久久在线免费观看| 久久一区二区三区国产精品| 日韩欧美中文字幕制服| 欧美一区二区三区小说| 欧美日韩高清一区| 69成人精品免费视频| 日韩三级在线免费观看| 欧美大肚乱孕交hd孕妇| 日韩亚洲国产中文字幕欧美| 日韩欧美一区二区久久婷婷| 日韩写真欧美这视频| 精品sm在线观看| 国产目拍亚洲精品99久久精品| 久久久久久久久免费| 国产精品网站一区| 亚洲少妇中出一区| 亚洲午夜一区二区| 日本va欧美va欧美va精品| 精品在线播放免费| 粉嫩av一区二区三区在线播放 | 全部av―极品视觉盛宴亚洲| 婷婷丁香激情综合| 精品一区二区三区在线播放| 黄页视频在线91| av亚洲精华国产精华精| 欧洲精品一区二区| 日韩欧美第一区| 欧美激情在线免费观看| 一区二区在线观看av| 亚洲成av人片www| 国产呦精品一区二区三区网站| 国产成人自拍高清视频在线免费播放| 国产.精品.日韩.另类.中文.在线.播放| 精品成a人在线观看| 国产精品美女视频| 调教+趴+乳夹+国产+精品| 久久精品理论片| 97久久精品人人做人人爽| 欧美日韩高清一区二区三区| 久久理论电影网| 一区二区三区中文字幕电影| 久久精品免费看| 色综合天天综合网国产成人综合天| 777午夜精品免费视频| 中文字幕av一区二区三区高| 亚洲成a人片在线观看中文| 国模娜娜一区二区三区| 91久久精品国产91性色tv| 精品精品国产高清a毛片牛牛 | 国产日韩欧美一区二区三区乱码| 亚洲制服丝袜av| 国产精品69久久久久水密桃| 色激情天天射综合网| 欧美精品一区二区三区蜜臀| 亚洲综合在线观看视频| 国产高清亚洲一区| 日韩丝袜情趣美女图片| 又紧又大又爽精品一区二区| 国产东北露脸精品视频|