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

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

?? ubox.pas

?? 很好的俄羅斯方塊
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{  俄羅斯方塊核心控制單元  }
unit UBox;

interface

uses
  Windows,SysUtils, Graphics;

//---------------------------------------------------------------------
const
  BWid   = 15;            //顯示在屏幕上的象素點數
  MLen   = 4 ;            //方塊數組的寬度
  BNum   = 7 ;            //方塊的個數
  MapWid = 20;            //背景地圖的寬度(按格子數)
  MapHei = 30;            //背景地圖的高度
  BkLeft = -30;           //左邊距離
  BkTop  = 10 ;           //頂點距離
  EmptyBlock    = false;  //空的格子
  NotEmptyBlock = true;   //非空的格子

//---------------------------------------------------------------------
type
   TBlockCell=record
      Empty: Boolean;
      Color: TColor;
   end;

//---------------------------------------------------------------------
type
  TBoxArray  = Array [1..MLen,1..MLen] of TBlockCell;      //單個方塊對應的數組
  TEmptyLine = Array [1..MLen] of Integer;                 //已經完成的行的記錄
  TMapData   = Array [1..MapWid,1..MapHei] of TBlockCell;  //當前記錄



//---------------------------------------------------------------------
procedure Line(Canvas: TCanvas;X1,Y1,X2,Y2:Integer);
procedure SetBoxArray(var B: TBoxArray;I: Integer;S: String);
procedure InitBoxes;
function  GetWidth(B: TBoxArray): Integer;
function  GetHeight(B: TBoxArray): Integer;
procedure DrawMap(Canvas: TCanvas);
procedure DrawRect(Canvas: TCanvas;X1,Y1,X2,Y2: Integer;Color: TColor);
procedure DrawBoxXY(Canvas: TCanvas;X,Y: Integer;B: TBoxArray);
procedure DrawBoxBK(Canvas: TCanvas;X,Y: Integer;B: TBoxArray;Color: TColor);
procedure BoxMoveTo(Canvas: TCanvas;X,Y: Integer;B: TBoxArray);
function  CanGo(X,Y: Integer;B: TBoxArray): Boolean;
procedure CopyBox(var ObjBox: TBoxArray;Source: TBoxArray);
procedure Change(Canvas: TCanvas;var B: TBoxArray;var CurX: Integer;var CurY:Integer);
procedure MoveToMap(X,Y: Integer;B: TBoxArray);
procedure ScanEmptyLine(Canvas: TCanvas;var Line: TEmptyLine);
procedure FreshMap(Canvas: TCanvas;Line: TEmptyLine);
procedure DelAMapLine(I: Integer);
function  Max(X1,X2:Integer):Integer;
procedure ShowNext(Canvas: TCanvas);
procedure ShowMess(Canvas: TCanvas;S: String);
procedure SetBlockColor(var B:TBoxArray;Color: TColor);
procedure CheckBlock(var B:TBoxArray);




//---------------------------------------------------------------------
var
  Box: Array [1..BNum] of TBoxArray;             //一組方塊
  Map: TMapData;                                 //背景數組
  CurX,CurY: Integer;                            //當前方塊的位置
  LasX,LasY: Integer;                            //上一次方塊的位置
  BkColor: TColor;                               //背景的顏色
  BColor: TColor;                                //畫方塊的顏色
  Block: TBoxArray;                              //每一次出現的方塊
  EmptyLine: TEmptyLine;                         //已經完成的行
  BlockId: Integer;                              //方塊的屬類
  NextId: Integer;                               //方塊的屬類
  Score: Integer;                                //玩家的得分
  Level: Integer;                                //游戲玩家的級別

  ChangeKey: Integer;                            //用來換方向的鍵
  LeftKey: Integer;                              //左方向
  RightKey: Integer;                             //右方向
  DownKey: Integer;                              //下降鍵
  DirectDownKey: Integer;                        //直接下降鍵

  CurLevelScore: Integer;                        //本關得分


//---------------------------------------------------------------------
implementation
uses UMain;

//---------------------------------------------------------------------
procedure Line(Canvas: TCanvas;X1,Y1,X2,Y2:Integer);
begin
  Canvas.MoveTo(X1,Y1);
  Canvas.LineTo(X2,Y2);
end;

//---------------------------------------------------------------------
{ 用字符串對方塊數組進行設置 }
{ 如:"1111" 表示一個長條    }
{ I 表示數組的第 I 行        }
procedure SetBoxArray(var B: TBoxArray;I: Integer;S: String);
var
  j: Integer;
begin
  for j := 1 to MLen do
    {B[I,j] := StrToInt(Copy(S,j,1));}
    if StrToInt(Copy(S,j,1)) <> 0 then
      B[I,j].Empty := NotEmptyBlock//true
    else
      B[I,j].Empty := EmptyBlock;//;false;
end;

//---------------------------------------------------------------------
{ 對方塊數組進行初始化,}
{ 使其獲得基本的形狀。  }
procedure InitBoxes;
var
  i,j: Integer;
begin
  SetBoxArray(Box[1],1,'1100');
  SetBoxArray(Box[1],2,'1100');
  SetBoxArray(Box[1],3,'0000');
  SetBoxArray(Box[1],4,'0000');

  SetBoxArray(Box[2],1,'0000');
  SetBoxArray(Box[2],2,'1110');
  SetBoxArray(Box[2],3,'0010');
  SetBoxArray(Box[2],4,'0000');

  SetBoxArray(Box[3],1,'0000');
  SetBoxArray(Box[3],2,'1110');
  SetBoxArray(Box[3],3,'1000');
  SetBoxArray(Box[3],4,'0000');

  SetBoxArray(Box[4],1,'0100');
  SetBoxArray(Box[4],2,'1110');
  SetBoxArray(Box[4],3,'0000');
  SetBoxArray(Box[4],4,'0000');

  SetBoxArray(Box[5],1,'1000');
  SetBoxArray(Box[5],2,'1100');
  SetBoxArray(Box[5],3,'0100');
  SetBoxArray(Box[5],4,'0000');

  SetBoxArray(Box[6],1,'0100');
  SetBoxArray(Box[6],2,'1100');
  SetBoxArray(Box[6],3,'1000');
  SetBoxArray(Box[6],4,'0000');

  SetBoxArray(Box[7],1,'0000');
  SetBoxArray(Box[7],2,'1111');
  SetBoxArray(Box[7],3,'0000');
  SetBoxArray(Box[7],4,'0000');
  //Initialize the background
  for i := 1 to MapWid do
    for j := 1 to MapHei do
      Map[i,j].Empty := EmptyBlock;//false;


  {終于修正了這個核心bug 原來這里應該使用 MapHei - 3}
  for j := 1 to MapHei - 3 do
    for i := 1 to 3 do
    begin
      Map[i,j].Empty := NotEmptyBlock;
      Map[i,j].Color := clGreen;
      Map[MapWid-3+i,j].Empty  := NotEmptyBlock;
      Map[MapWid-3+i,j].Color := clGreen;
    end;


  for j := MapHei-2 to MapHei do
    for i := 4 to MapWid - 3 do
    begin
      Map[i,j].Empty := NotEmptyBlock;
      Map[i,j].Color := clGreen;
    end;

end;

//---------------------------------------------------------------------
{ 獲取一個方塊的寬度 }
function GetWidth(B: TBoxArray): Integer;
var
  i,j,MaxLen,Long: Integer;
begin
  { 對于5 和 6 號 進行特殊掃描 }
  if (BlockId=5) or (BlockId=6) then
  begin
    Long := 0;
    for i := 1 to MLen do
      if B[i,1].Empty <>EmptyBlock then Long := Long + 1;
    if Long = 1 then
    begin
      GetWidth := 2;
      Exit;
    end else
    begin
      GetWidth := 3;
      Exit;
    end;
  end;

  MaxLen := 0;
  for i := 1 to MLen do
  begin
    Long :=0;
    for j := 1 to MLen do
      if B[j,i].Empty <>EmptyBlock  then Long := Long + 1;
    if MaxLen<Long then MaxLen := Long;
  end;
  GetWidth := MaxLen;
end;

//---------------------------------------------------------------------
{ 獲取一個方塊的高度 }
function GetHeight(B: TBoxArray): Integer;
var
  i,j,MaxLen,Long: Integer;
begin
  if (BlockId=5) or (BlockId=6) then
  begin
    Long := 0;
    for i := 1 to MLen do
      if B[1,i].Empty <>EmptyBlock then Long := Long + 1;
    if Long = 1 then
    begin
      GetHeight := 2;
      Exit;
    end else
    begin
      GetHeight := 3;
      Exit;
    end;
  end;

  MaxLen := 0;
  for i := 1 to MLen do
  begin
    Long :=0;
    for j := 1 to MLen do
      if B[i,j].Empty <>EmptyBlock then Long := Long + 1;
    if MaxLen<Long then MaxLen := Long;
  end;
  GetHeight := MaxLen;
end;

//---------------------------------------------------------------------
{ 用來畫一個立體的方塊 }
{允許使用圖片方塊 }
procedure DrawRect(Canvas: TCanvas;X1,Y1,X2,Y2: Integer;Color: TColor);
var
   Rect: TRect;
begin
   if(UseImgBlock)then
   begin
      Rect.Left := X1;
      Rect.Top := Y1;
      Rect.Right := X1+14;//X2;
      Rect.Bottom := Y1+14;//Y2;
      Canvas.StretchDraw(Rect,frmGame.ImgBlock.Picture.Graphic);
   end
   else
   begin
      Canvas.Brush.Color := Color;
      Canvas.Pen.Color := Color;
      Canvas.Rectangle(X1,Y1,X2,Y2);

      Canvas.Pen.Color := clWhite;
      Line(Canvas,X1,Y1,X1,Y2);
      Line(Canvas,X1,Y1,X2,Y1);

      Canvas.Pen.Color := clBlack;
      Line(Canvas,X2,Y1,X2,Y2);
      Line(Canvas,X1,Y2,X2,Y2);

      Canvas.MoveTo(X1+1,Y2-1);
      Canvas.Pen.Color := clGray;
      Canvas.LineTo(X2-1,Y2-1);
      Canvas.LineTo(X2-1,Y1+1);
   end;
end;

//---------------------------------------------------------------------
{ 在 (X,Y) 位置畫出方塊背景 }
{ 方塊用數組 B 表示         }
procedure DrawBoxBK(Canvas: TCanvas;
                    X,Y: Integer;
                    B: TBoxArray;
                    Color: TColor);
var

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产自产在线观看一区| 亚洲成人av一区二区| 国产亚洲一区字幕| 精品影视av免费| 精品福利视频一区二区三区| 日本一区中文字幕| 久久天天做天天爱综合色| 日韩精品高清不卡| 精品美女在线观看| 97久久精品人人做人人爽 | 激情小说欧美图片| 欧美va日韩va| 不卡电影免费在线播放一区| 最新日韩av在线| 欧美日韩免费高清一区色橹橹| 亚洲美女在线国产| 69久久夜色精品国产69蝌蚪网| 久久久精品2019中文字幕之3| 在线成人免费观看| 成+人+亚洲+综合天堂| 国产成人午夜99999| 99久久伊人网影院| www.色综合.com| 日本不卡1234视频| 久久久久亚洲综合| 久久精品国产精品亚洲精品| 亚洲国产精品成人综合| 亚洲欧美在线另类| 日韩av网站在线观看| 日本精品一区二区三区高清| 久久精品国产**网站演员| 欧美日产国产精品| 五月天婷婷综合| 欧美日韩国产天堂| 亚洲国产欧美日韩另类综合 | 欧美老肥妇做.爰bbww视频| 亚洲精品免费一二三区| av一区二区三区四区| 欧美国产一区二区| 不卡av在线网| 亚洲色图制服丝袜| 欧美写真视频网站| 亚洲大片精品永久免费| 欧美男男青年gay1069videost| 亚洲午夜激情网站| 91麻豆精品91久久久久久清纯 | 自拍偷拍欧美精品| 色婷婷综合久久久久中文一区二区| 中文字幕一区二区三| 色94色欧美sute亚洲线路一ni | 国产精品美女一区二区| 成人av资源下载| 亚洲精品视频在线观看网站| 91国产福利在线| 亚洲自拍偷拍av| 884aa四虎影成人精品一区| 蜜臀99久久精品久久久久久软件| 精品久久久久久亚洲综合网 | 狠狠色丁香九九婷婷综合五月 | 91精品久久久久久蜜臀| 美洲天堂一区二卡三卡四卡视频| 精品成人一区二区三区| www..com久久爱| 无吗不卡中文字幕| 日本一区二区成人| 欧美午夜寂寞影院| 国产一区二区伦理| 亚洲主播在线播放| 欧美精品一区二区三区蜜桃视频 | 国产成人免费视频网站 | 国产精品午夜久久| 欧美无乱码久久久免费午夜一区| 久久精工是国产品牌吗| 亚洲国产高清aⅴ视频| 欧美日本免费一区二区三区| 国产精品99精品久久免费| 亚洲人成网站影音先锋播放| 日韩女优制服丝袜电影| av中文字幕一区| 久久99久久精品| 亚洲一区二三区| 国产色综合一区| 51精品视频一区二区三区| 成人久久视频在线观看| 蜜臀国产一区二区三区在线播放| 国产精品国产自产拍高清av王其 | 一区二区三区在线播放| 天天色 色综合| 日韩免费高清视频| 青青草一区二区三区| 欧美区视频在线观看| 日韩国产一区二| 日韩欧美在线综合网| 久久99这里只有精品| 欧美一级理论性理论a| 午夜精品久久一牛影视| 日韩欧美在线综合网| 国产成人精品亚洲777人妖| 国产午夜精品久久久久久免费视| 国产综合一区二区| 亚洲人成在线观看一区二区| 一本到高清视频免费精品| 伊人开心综合网| 91精品国产综合久久久久久漫画 | 国产91精品欧美| 国产精品久久午夜| 欧美亚洲另类激情小说| 婷婷亚洲久悠悠色悠在线播放| 欧美日韩国产成人在线免费| 国产精品一品二品| 激情综合色丁香一区二区| 日韩精品一区二区三区四区| 婷婷国产在线综合| 91久久香蕉国产日韩欧美9色| 国产午夜精品久久久久久免费视 | 美腿丝袜在线亚洲一区| 一区二区三区.www| 亚洲曰韩产成在线| 一区二区在线免费观看| 一区二区在线观看不卡| 亚洲精品视频免费看| 成人免费在线视频| 一区二区三区丝袜| 亚洲国产精品综合小说图片区| 一区二区三区中文字幕| 亚洲无线码一区二区三区| 偷拍亚洲欧洲综合| 日韩电影在线一区二区三区| 日产精品久久久久久久性色| 麻豆视频一区二区| 国产麻豆9l精品三级站| 国产成人啪午夜精品网站男同| 9色porny自拍视频一区二区| 一本色道久久综合狠狠躁的推荐 | 亚洲自拍偷拍综合| 午夜影院在线观看欧美| 美女一区二区视频| 精品亚洲成a人| 成人激情文学综合网| 色噜噜狠狠色综合欧洲selulu| 欧美美女黄视频| 久久视频一区二区| 亚洲色图色小说| 日韩电影在线观看一区| 国产精品综合在线视频| 91丨porny丨国产| 884aa四虎影成人精品一区| xfplay精品久久| 亚洲精品中文字幕乱码三区| 日韩和欧美一区二区三区| 国产一区二区主播在线| 色成人在线视频| 欧美精品一区二区三区在线| 亚洲情趣在线观看| 蜜乳av一区二区| 91黄色激情网站| 久久女同精品一区二区| 亚洲一区在线视频观看| 精品一区二区三区免费播放| 91在线观看污| 欧美不卡一区二区| 悠悠色在线精品| 韩国女主播一区| 欧美熟乱第一页| 中文字幕欧美三区| 九九在线精品视频| 欧美日韩视频一区二区| 国产精品日韩精品欧美在线| 秋霞国产午夜精品免费视频| 99久久er热在这里只有精品15 | 最新成人av在线| 久久99精品久久只有精品| 在线观看亚洲成人| 国产亚洲精品精华液| 日精品一区二区| 91久久香蕉国产日韩欧美9色| 欧美极品少妇xxxxⅹ高跟鞋| 精品在线一区二区| 欧美日韩一区二区三区在线 | 欧美色中文字幕| 国产精品毛片高清在线完整版| 精品无人码麻豆乱码1区2区| 欧美日韩国产影片| 亚洲黄色免费网站| www.av精品| 国产精品久久毛片av大全日韩| 精品一区二区国语对白| 91精品国产手机| 亚洲va国产天堂va久久en| 一本色道久久综合亚洲精品按摩| 中文字幕免费不卡在线| 国产精品99久久久久久久女警| 欧美成人一区二区三区在线观看| 视频一区在线播放| 欧美精三区欧美精三区| 亚洲午夜激情av| 欧美日本国产视频| 亚洲bt欧美bt精品777| 欧美日韩aaaaaa| 蜜臀精品久久久久久蜜臀|