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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unit_main.pas

?? 掃雷
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
  randx,randy:integer;
  i,j:integer;
  i_bombCount:integer;
  tempGridArray:TGridArray ;

  //在生成數(shù)字的過程中使用
  LargeUpGridArray:array[0..g_MaxCol+1 ,0..g_MaxRow+1 ] of integer;

begin
  tempGridArray .LocalTotalCols :=s_DownGridArray .LocalTotalCols ;
  tempGridArray .LocalTotalRows :=s_DownGridArray .LocalTotalRows ;

  //如果是重新開局的游戲,則直接將上次的雷區(qū)的情況賦值給新的雷區(qū)信息。
  if isGameofRestart then
    for I := 1 to s_DownGridArray .LocalTotalCols  do
      for j:= 1 to s_DownGridArray  .LocalTotalRows  do
      begin
        //聲明:重新開局后,不能保證鼠標的第一次按鍵不是雷,原因不言而喻
        s_DownGridArray .Grid [i][j] :=LastDownGridArray.grid[i][j];
        //該退出了.
        exit;
      end;

  //如果不是重新開局,則按原順序執(zhí)行。。。
  for I := 1 to s_DownGridArray .LocalTotalCols  do
    for j:= 1 to s_DownGridArray  .LocalTotalRows  do
    begin
      s_DownGridArray .Grid [i][j] :=0;
      tempGridArray .Grid [i][j]:=0;
    end;
    
  //
  i_bombCount :=BombCount ;
  randomize;    //播隨機種子
  while i_BombCount <> 0 do
  //嚴格意義上講.這里需要有一個變量來控制 While 循環(huán)的次數(shù),以免死循環(huán),有些格子就是
  //得不到,但是在這里,由于雷數(shù)畢竟不是很多,所以,就沒有考慮..
  begin
    randx:=random(s_DownGridArray .LocalTotalCols )+1;
    randy:=random(s_DownGridArray .LocalTotalRows )+1;
    if (s_DownGridArray .Grid [randx][randy]=0)         //沒有被標過雷
        and (random(2)=1)                               //隨機的幾率
        and (not((randx=localx )and (randy =localy )))  //確保當前按下的那個方塊不會是雷
        then
    begin
      s_DownGridArray .Grid [randx][randy]:=10;
      i_BombCount :=i_BombCount -1;
    end;
  end;

  for i := 0 to s_DownGridArray .LocalTotalCols+1  do
    for j:= 0 to s_DownGridArray  .LocalTotalRows+1  do
      LargeUpGridArray [i][j]:=0;

  for I := 1 to s_DownGridArray .LocalTotalCols  do
    for j:= 1 to s_DownGridArray  .LocalTotalRows  do
      LargeUpGridArray [i][j]:=s_DownGridArray .grid [i][j];


  for i:= 1 to s_DownGridArray .LocalTotalCols do
    for j:= 1 to s_DownGridArray .LocalTotalRows do
      if s_DownGridArray .grid[i][j]<> 10 then
        tempGridArray .grid[i][j]:= LargeUpGridArray[i-1][j-1]
                                  + LargeUpGridArray[i][j-1]
                                  + LargeUpGridArray[i+1][j-1]
                                  + LargeUpGridArray[i-1][j]
                                  + LargeUpGridArray[i+1][j]
                                  + LargeUpGridArray[i-1][j+1]
                                  + LargeUpGridArray[i][j+1]
                                  + LargeUpGridArray[i+1][j+1];

  for I := 1 to s_DownGridArray .LocalTotalCols  do
    for j:= 1 to s_DownGridArray  .LocalTotalRows  do
      s_DownGridArray .grid [i][j] :=LargeUpGridArray [i][j];


   //得到DownGridArray中除了雷以外的數(shù)字區(qū)域.(0~8)
  for i:= 1 to s_DownGridArray .LocalTotalCols do
    for j:= 1 to s_DownGridArray .LocalTotalRows do
    begin
        // "-10" 是轉(zhuǎn)換到0~8 的算法.
      s_DownGridArray .grid[i][j]:=s_DownGridArray .grid[i][j]+ (tempGridArray .grid[i][j] div 10);
      LastDownGridArray.grid[i][j]:=s_DownGridArray .grid[i][j];
    end;

end;

{
  isColorForce 是用來判斷是否是一定要重新畫.在改變"顏色"菜單的內(nèi)容時才會時 True,其余的都是 False
}
procedure TFrm_Main.DrawBackGround(const d_UpGridArray:TGridArray ; const isColorForce:boolean);
var
  i,j:integer;

  procedure Drawimage(const argCol,argRow:integer;argimage:integer);
  var
    num:integer;
    comImage:TImage;
  begin
    //考慮顏色選項的狀態(tài)
    if not  isHaveColor then
    begin
      argimage := argimage +100;
      comImage :=Image_gray_block
    end else
      comImage :=Image_Color_block ;

    case argimage of
      111,11 :num :=1 ;         //沒有被按下方塊
      112,12 :num :=16 ;        //被展開的沒有數(shù)字的方塊
      113,13 :num :=16 ;

      121,21 :num :=15 ;        //數(shù)字-1
      122,22 :num :=14 ;        //數(shù)字-2
      123,23 :num :=13 ;        //數(shù)字-3
      124,24 :num :=12 ;        //數(shù)字-4
      125,25 :num :=11 ;        //數(shù)字-5
      126,26 :num :=10 ;        //數(shù)字-6
      127,27 :num :=9 ;         //數(shù)字-7
      128,28 :num :=8 ;         //數(shù)字-8

      131,31 :num :=2 ;         //標有旗幟的方塊
      132,32 :num :=3;          //沒有被按下的標有問好的方塊
      133,33 :num :=7 ;         //被按下的標有問好的方塊

      141,41 :num :=6 ;         //顯示出來的雷
      142,42 :num :=4 ;         //被炸開了的雷
      143,43 :num :=5 ;         //因標錯了而炸開的雷
      else exit;
    end;

    Image_BackGround .Canvas .CopyRect(rect((argCol -1)*g_BlockWidth ,
        (argRow -1)*g_BlockHeight ,argCol*g_BlockWidth ,argRow *g_BlockHeight ),
        comImage .Canvas ,rect(0,(num -1) * g_BlockHeight  ,g_BlockWidth ,num * g_BlockHeight));
  end;

begin
  for i := 1 to UpGridArray .LocalTotalCols  do
    for j := 1 to UpGridArray .LocalTotalRows  do
      //如果有不同顯示的雷區(qū)或是強行要重畫的情況下需要重畫數(shù)字區(qū)域
      if (LastUpGridArray .Grid [i][j] <> d_UpGridArray .Grid [i][j]) or isColorForce then
      begin
        drawimage(i,j,d_UpGridArray.grid[i][j]);
        // LastUpGridArray 供可能發(fā)生的"重新開始本局"事件時用到.
        LastUpGridArray .Grid [i][j] := d_UpGridArray .Grid[i][j];
      end;
end;

procedure TFrm_Main.DrawHead(const Count:integer;d_Dir:TDisplayDir );
var
  d_i:integer;
  d_Count:integer;
  BombCountArr:array[1..3] of integer;
  comimage:Timage;
  num:integer;
begin
  if Count >= 0 then
    d_Count :=Count
  else
    d_Count :=abs(Count);

  if Count >999 then
    d_Count :=999;

  for d_i:=3 downto 1 do
    begin
      BombCountArr [d_i]:=d_Count mod 10;
      d_Count:=d_Count div 10
    end;

  if Count < 0 then
    BombCountArr [1]:= -1;

  for d_i:=1 to 3 do
    begin
      if  not isHaveColor then
      begin
        BombCountArr [d_i] :=BombCountArr [d_i]+100;
        comimage := image_gray_num;
      end else
        comimage := Image_Color_Num;

      case BombCountArr [d_i] of
        -1,99:num:=1 ;          //數(shù)字- 負號
        0,100:num:=12 ;         //數(shù)字- 0  (以下是 1-9)
        1,101:num:=11 ;
        2,102:num:=10 ;
        3,103:num:=9 ;
        4,104:num:=8 ;
        5,105:num:=7 ;
        6,106:num:=6 ;
        7,107:num:=5 ;
        8,108:num:=4 ;
        9,109:num:=3 ;
        else exit;
      end;

      if  not isHaveColor then
        BombCountArr [d_i] :=BombCountArr [d_i] - 100;

      case d_Dir of
        d_left:
          Image_Dis_BombCount .Canvas .CopyRect(rect((d_i-1)*g_NumWidth ,
              0 ,d_i*g_NumWidth ,g_NumHeight ),comimage.Canvas ,
              rect(0,(num-1)*g_NumHeight  ,g_NumWidth  ,num * g_NumHeight ));
        d_right:
          Image_Dis_Time .Canvas .CopyRect (rect((d_i-1)*g_NumWidth  ,
               0,d_i*g_NumWidth ,g_NumHeight ),comimage.Canvas ,
              rect(0,(num-1)* g_NumHeight ,g_NumWidth ,num * g_NumHeight ));
        else exit;
      end;
    end
end;



{
  重點是四連通算法的實現(xiàn)..
}
procedure SeekBlackBlock(s_DownGridArray:TGridArray;var s_UpGridArray:TGridArray;s_Col,s_Row:integer);
var
  HeadBlock,myBlock,newBlock:BlockPointer ;
  i,j:integer;
  s_tempGridArray:TGridArray ;
  PointerOutX,PointerOutY:integer;

  //初始化指針連表,帶頭結(jié)點
  procedure initPointer();
  var
    i_i,i_j:integer;
  begin
    new(myBlock);
    myBlock ^.BlockX :=0;
    myBlock ^.BlockY :=0;
    myBlock ^.preBlock :=nil;
    myBlock ^.nextBlock :=nil;
    HeadBlock :=myBlock ;

    for i_i := 1 to s_DownGridArray .LocalTotalCols  do
      for i_j:= 1 to s_DownGridArray  .LocalTotalRows  do
        s_tempGridArray .Grid [i_i][i_j]:=0;
  end;

  //入棧操作
  procedure push(h_BlockX,h_BlockY:integer);
  begin
    new(newBlock);
    newBlock ^.BlockX :=h_BlockX ;
    newBlock ^.BlockY :=h_BlockY ;
    newBlock ^.preBlock :=myBlock ;
    newBlock ^.nextBlock :=nil;
    myBlock ^.nextBlock :=newBlock ;
    myBlock :=myBlock ^.nextBlock ;

  end;

  //出棧操作
  procedure pop(var p_BlockX,p_BlockY:integer);
  begin
    p_BlockX :=myblock ^.BlockX ;
    p_BlockY :=myBlock ^.BlockY ;

    myBlock :=myBlock ^.preBlock ;
    Dispose (myBlock ^.nextBlock );
    myBlock ^.nextBlock :=nil;
  end;

  //只要處理部分
  procedure ChangeUpGridArray();
  var
    c_i,c_j:integer;
  begin
    for c_i:= -1 to 1 do
      for c_j:= -1 to 1 do
        //判斷越界
        if ((PointerOutX +c_i )>=1 ) and ((PointerOutX +c_i) <= s_DownGridArray .LocalTotalCols )
            and ((PointerOutY +c_j)>=1) and ((PointerOutY +c_j)<= s_DownGridArray .LocalTotalRows) then
         // 判斷在DownGridArray中不是雷的塊將它顯示出來
          if (s_DownGridArray .grid[PointerOutX +c_i ][PointerOutY + c_j] <> 10)
            and ((s_UpGridArray .grid[PointerOutX +c_i][PointerOutY +c_j] =11)
                  or (s_UpGridArray .grid[PointerOutX +c_i][PointerOutY +c_j] =13)
                  or (s_UpGridArray .grid[PointerOutX +c_i][PointerOutY +c_j] =33)
                  or (s_UpGridArray .grid[PointerOutX +c_i ][PointerOutY +c_j] = 32)) then
          begin
            // 判斷條件是用來處理DownGridArray 中 "0" 與UpGridArray 中 "12"的關(guān)系
            if s_DownGridArray .grid[PointerOutX +c_i ][PointerOutY + c_j] = 0 then
              s_UpGridArray .grid[PointerOutX +c_i ][PointerOutY +c_j]:= 12
            else
            begin
               //20 為DownGridArray 中數(shù)字與 UpGridArray 中數(shù)字的差量
              s_UpGridArray .grid[PointerOutX +c_i ][PointerOutY +c_j]:=
                    s_DownGridArray .grid[PointerOutX +c_i ][PointerOutY + c_j]+ 20;
            end;

            BlockOpenCount :=BlockOpenCount +1;
          end;
  end;

begin
  initPointer ;
  push(s_Col ,s_Row );
  while HeadBlock ^.nextBlock <> nil do
  begin
    pop(PointerOutX ,PointerOutY );
    ChangeUpGridArray ;

    for i:=-1 to 1 do
      for j:= -1 to 1 do
      begin
        if not( (i=0 ) and (j= 0)) then
          if ((PointerOutX +i )>=1 ) and ((PointerOutX +i) <= s_DownGridArray .LocalTotalCols )
              and ((PointerOutY +j)>=1) and ((PointerOutY +j)<= s_DownGridArray .LocalTotalRows) then
            if (s_tempGridArray .Grid [PointerOutX +i][PointerOutY +j] = 0)
              and (s_DownGridArray .grid[PointerOutX +i][PointerOutY +j] = 0) then
            begin
              s_tempGridArray .Grid [PointerOutX +i][PointerOutY +j] := 1;
              push(PointerOutX +i,PointerOutY +j);
            end;
      end;
  end;
end;


procedure TFrm_Main.GameWin(w_DownGridArray:TGridArray ;var w_UpGridArray:TGridArray);
var
  w_i,w_j:integer;
  New_Name:string;
begin
  Timer_Display .Enabled :=False;

  //將沒有展開的方塊標為雷,即插上紅旗.
  for w_i:= 1 to w_DownGridArray  .LocalTotalCols do
    for w_j:= 1 to w_DownGridArray  .LocalTotalRows do
      if (w_UpGridArray .grid[w_i][w_j]=11) or (w_UpGridArray .grid[w_i][w_j]=32) then
        w_UpGridArray .grid[w_i][w_j] := 31;

  if isHaveSound then
    sndPlaySound(pchar(comdir+g_ResourceName +g_Sound_GameWin),SND_ASYNC  );

  DrawBackGround(w_UpGridArray,false);
  DrawHead(0,d_left );
  ChgSpbtnGlyph(f_glass);

  //打破記錄并且級別不是自定義級別,則需要顯示打破記錄,輸入大名的對話框
  if (TotalTime < LocalScore) and (UserLevel <> v_UserDefine) then
  begin
    Application.CreateForm(TFrm_HeroName , Frm_HeroName );
    Frm_HeroName .showmodal;
    New_Name :=Unit_HeroName.New_Name;

    Unit_Hero.InputScore(UserLevel,TotalTime ,New_Name);
    Application.CreateForm(TFrm_Hero, Frm_Hero);
    Frm_Hero.ShowModal ;

  end;
  isGameOver :=true;
  isGameWin :=true;

  //屏蔽 暫停 菜單
  Menu_Pause_Resume.Enabled :=false;

  GameStatus :=s_win;
  ChangeStatusBar(UserLevel ,UserTotalCols,UserTotalRows, UserBombCount,GameStatus,LocalScore,LanguageType);
end;


procedure TFrm_Main.GameLost(l_DownGridArray:TGridArray ;var l_UpGridArray:TGridArray;l_Col,l_Row:TOverColAndRow);
var
  l_i,l_j:integer;
begin
  Timer_Display .Enabled :=False;
  if isHaveSound then
    sndPlaySound(pchar(comdir+g_ResourceName +g_Sound_GameLost),SND_ASYNC  );

  //根據(jù)傳進來的數(shù)組的值將那些是雷而沒有標的塊用42-爆炸的雷表示
  for l_i:=1 to 8 do
    if l_Col [l_i] <> 0 then
    begin
      l_UpGridArray .grid[l_Col [l_i]][l_Row [l_i]] := 42;
    end;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美大片在线观看一区| 专区另类欧美日韩| 午夜一区二区三区在线观看| 精品乱人伦小说| www.日韩av| 一本大道av一区二区在线播放| 国产99久久久国产精品免费看| 97久久超碰国产精品电影| 欧美精品一区二区三区视频| 国产精品影视在线| 亚洲精品欧美专区| 欧美一级在线免费| 国产精品看片你懂得| 日本美女一区二区| 在线免费观看成人短视频| 日韩欧美一区在线| 三级久久三级久久| 色综合久久久网| 中文字幕综合网| 韩日欧美一区二区三区| 欧美日韩在线三级| 亚洲va韩国va欧美va精品| 在线不卡a资源高清| 日韩av电影一区| 久久夜色精品国产噜噜av| 丰满放荡岳乱妇91ww| 亚洲综合色在线| 欧美一区三区二区| 国产成人av电影在线播放| 亚洲精品日日夜夜| 欧美成人官网二区| 99热在这里有精品免费| 日韩av中文字幕一区二区| 亚洲视频免费观看| 国产午夜亚洲精品理论片色戒| 欧美日韩在线播| 99麻豆久久久国产精品免费| 男人操女人的视频在线观看欧美| 亚洲人成伊人成综合网小说| 欧美激情资源网| 久久婷婷成人综合色| 欧美一区二区三区人| 欧美老人xxxx18| 在线播放国产精品二区一二区四区| a级精品国产片在线观看| 国产传媒日韩欧美成人| 国产精品一二三四区| 高清不卡一区二区在线| 丰满少妇久久久久久久| 国产福利精品一区| 91色|porny| 欧美日韩在线观看一区二区| 欧美日本在线视频| 91精品国产综合久久精品app| 欧美精品丝袜久久久中文字幕| 欧美日本一区二区在线观看| 欧美视频一区二| 日韩精品一区二区三区在线播放 | 一区二区三区高清在线| 国产精品久久久久久久久果冻传媒| 欧美人成免费网站| 国产成人亚洲综合色影视| 91久久免费观看| 国产人伦精品一区二区| 九色|91porny| 91精品国产美女浴室洗澡无遮挡| 一区二区三区欧美在线观看| 成人av综合一区| 久久综合九色综合欧美98| 国产精品日产欧美久久久久| 五月天精品一区二区三区| 激情欧美一区二区三区在线观看| 成人av电影在线网| 777奇米四色成人影色区| 久久久久久**毛片大全| 亚洲电影视频在线| 狠狠色丁香婷婷综合| 欧美在线看片a免费观看| 欧美大片在线观看一区| 亚洲精品中文在线观看| 国产高清精品在线| 欧美一区二区三区性视频| 18欧美亚洲精品| 国产a久久麻豆| 国产喷白浆一区二区三区| 毛片av一区二区三区| 欧美视频在线观看一区二区| 国产精品久久久久7777按摩| 国产精品99久久久久久有的能看| 欧美一级免费大片| 日本aⅴ免费视频一区二区三区| 欧美视频完全免费看| 樱桃国产成人精品视频| 色综合久久久久| 亚洲高清不卡在线| 欧美性三三影院| 国产精品福利影院| 欧美三级在线视频| 国产三级一区二区| 成人国产精品免费观看| 中文字幕一区二区三区在线播放| 韩国三级在线一区| 国产欧美日韩另类视频免费观看| 国产一区二区三区日韩| 国产欧美日韩不卡| 欧洲av在线精品| 九色|91porny| √…a在线天堂一区| 在线看日本不卡| 日韩av一区二区三区四区| 亚洲精品一区二区三区影院 | 国产色综合久久| 97精品久久久午夜一区二区三区| 一区二区三区四区av| 日韩一区二区三区高清免费看看| 国产综合久久久久影院| 中文字幕一区二区三| 91精品国产欧美一区二区| 成人动漫视频在线| 人人超碰91尤物精品国产| 亚洲视频一二区| 精品99一区二区| 欧美一区二区视频在线观看2022| 成人综合日日夜夜| 麻豆91精品视频| 亚洲国产精品欧美一二99 | 欧美午夜精品一区二区三区| 午夜精品免费在线观看| 欧美国产日本视频| 日韩欧美卡一卡二| 久久亚洲综合色一区二区三区| 欧美一区二区三区免费大片| 91精品国产色综合久久不卡蜜臀 | 久久久不卡影院| 久久日韩精品一区二区五区| 久久久亚洲精品石原莉奈| 欧美激情一区二区三区在线| 中文字幕av在线一区二区三区| 中文无字幕一区二区三区| 欧美国产一区视频在线观看| 亚洲国产高清aⅴ视频| 国产精品久久久久一区二区三区共| 欧美系列亚洲系列| av高清不卡在线| 成人污视频在线观看| 国产成人免费视频网站| 久久99精品国产91久久来源| 喷白浆一区二区| 国产一区在线视频| 国产成人在线网站| 成人激情动漫在线观看| 91香蕉视频黄| 欧美精品乱人伦久久久久久| 777色狠狠一区二区三区| 日韩欧美视频一区| 日本一区二区视频在线观看| 久久久午夜精品理论片中文字幕| 2023国产一二三区日本精品2022| 日韩欧美一区二区在线视频| 国产亚洲污的网站| 亚洲一区免费视频| 青娱乐精品视频在线| 国产成人在线视频网站| 色狠狠一区二区| 欧美zozo另类异族| 亚洲精品乱码久久久久久黑人| 亚洲一区二区三区四区五区中文| 蜜臀av亚洲一区中文字幕| 国产福利不卡视频| 欧美色老头old∨ideo| 国产亚洲欧洲997久久综合| 一区二区三区欧美| 国产揄拍国内精品对白| 色婷婷av一区二区三区之一色屋| 日韩久久久久久| 香蕉乱码成人久久天堂爱免费| 国产成人午夜高潮毛片| 欧美一区二区精美| 亚洲欧美另类小说视频| 麻豆专区一区二区三区四区五区| 成人综合在线观看| 精品久久久久久综合日本欧美| 一区二区三区四区激情| 99久久久精品| 国产精品成人免费在线| 国产在线国偷精品免费看| 欧美日韩久久一区| 亚洲国产精品一区二区尤物区| 99久久精品国产网站| 亚洲国产电影在线观看| 国产精品一区二区久久精品爱涩| 日韩一二三区视频| 日一区二区三区| 91在线免费视频观看| 亚洲伦理在线免费看| 欧美专区亚洲专区| 亚洲国产成人av好男人在线观看| 欧美在线视频日韩| 日韩影院在线观看| 精品国产乱码久久久久久蜜臀|