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

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

?? unboundmodedemominercore.cpp

?? DevExpress ExpressQuantumGrid Suite v5.9 Full Source
?? CPP
字號:
#include "UnboundModeDemoMinerCore.h"

bool __fastcall TMinerField::CheckFieldBounds(int AXPos, int AYPos)
{
   bool Result = false;
   if ((AXPos >=0) && (AYPos >=0) && (AXPos < FCellState.Length) &&
   (AYPos < FCellState[0].Length)) Result = true;
   return (Result);
}
//---------------------------------------------------------------------------

int __fastcall TMinerField::Get_Height(void)
{
  return(FHeight);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::Set_Height(const int Value)
{
  if((9 <= Value) && (Value <= 24))
    FHeight = Value; else
  if(Value < 9)
    FHeight = 9; else
  if(24 < Value)
    FHeight = 24;
}
//---------------------------------------------------------------------------

int __fastcall TMinerField::Get_Widht(void)
{
  return(FWidth);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::Set_Width(const int Value)
{
  if((9 <= Value) && (Value <= 30))
    FWidth = Value; else
  if((Value < 9))
    FWidth = 9; else
  if(30 < Value)
    FWidth = 30;
}
//---------------------------------------------------------------------------

int __fastcall TMinerField::Get_MineCount(void)
{
  return (FMineCount);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::Set_MineCount(const int Value)
{
  if((10 <= Value) && (Value <= (FHeight - 1)*(FWidth - 1)))
    FMineCount = Value; else
  if(Value < 10)
    FMineCount = 10; else
  if((FHeight - 1) * (FWidth - 1) < Value)
    FMineCount = (FHeight - 1)*(FWidth - 1);
}
//---------------------------------------------------------------------------

TCellStateRec __fastcall TMinerField::Get_CellState(int XIndex, int YIndex)
{
  return(FCellState[XIndex][YIndex]);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::Set_CellState(int XIndex, int YIndex, const TCellStateRec &Value)
{
  if((FCellState[XIndex][YIndex].SurroundNumber != Value.SurroundNumber) ||
    (FCellState[XIndex][YIndex].CellState != Value.CellState)) {
      if(FCellState[XIndex][YIndex].CellState == csBombMarked)
        FCellsBombMarkedCount--;

      FCellState[XIndex][YIndex] = Value;
      if(Value.CellState == csBombMarked)
        FCellsBombMarkedCount++;
    };
}
//---------------------------------------------------------------------------

TGameDifficulty __fastcall TMinerField::Get_GameDifficulty()
{
  return(FGameDifficulty);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::SetThisDifficulty()
{
  FGameDifficulty.Height = Height;
  FGameDifficulty.Width = Width;
  FGameDifficulty.MineCount = MineCount;
};
//---------------------------------------------------------------------------

void __fastcall TMinerField::Set_GameDifficulty(const TGameDifficulty &Value)
{
  TCells ACells;
  FGameDifficulty.DifficultyType = Value.DifficultyType;
  switch(Value.DifficultyType) {
    case dtBeginner: {
      Height = 9;
      Width = 9;
      MineCount = 10;
    }; break;
    case dtIntermediate: {
      Height = 16;
      Width = 16;
      MineCount = 40;
    }; break;
    case dtExpert: {
      Height = 16;
      Width = 30;
      MineCount = 99;
    }; break;
    case dtCustom: {
      Height = Value.Height;
      Width = Value.Width;
      MineCount = Value.MineCount;
    }; break;
  };
  SetThisDifficulty();
  GameStatus = gsNew;
  FireEvGameStatusChanged(gsNew, ACells);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::SetCellState(int AXPos, int AYPos, TCells& AChangedCells)
{
  if (FCellState[AXPos][AYPos].SurroundNumber != -1)
    FCellState[AXPos][AYPos].CellState = csOpened;
  AChangedCells.Length = AChangedCells.Length + 1;
  AChangedCells[AChangedCells.Length - 1].x = AXPos;
  AChangedCells[AChangedCells.Length - 1].y = AYPos;
}
//---------------------------------------------------------------------------

bool __fastcall TMinerField::CheckIfClosed_Surround(int AXPos, int AYPos, TCells& AChangedCells)
{
  bool Result = false;
  if ((FCellState[AXPos][AYPos].CellState == csClosed)
    || (FCellState[AXPos][AYPos].CellState == csQuestionMarked))
    if (FCellState[AXPos][AYPos].SurroundNumber == 0)
      Result = true;
    else
      SetCellState(AXPos, AYPos, AChangedCells);
  return (Result);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::OpenSurround(int AXPos, int AYPos, TCells &AChangedCells)
{
  SetCellState(AXPos, AYPos, AChangedCells);
  for (int i=-1; i <= 1; i++)
    for (int j=-1; j <= 1; j++)
      if(CheckFieldBounds(AXPos+i, AYPos+j) && CheckIfClosed_Surround(AXPos+i, AYPos+j, AChangedCells))
        OpenSurround(AXPos+i, AYPos+j, AChangedCells);
}
//---------------------------------------------------------------------------

TGameStatus __fastcall TMinerField::Get_GameStatus(void)
{
  return(FGameStatus);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::Set_GameStatus(const TGameStatus Value)
{
  FGameStatus = Value;
  if(FGameStatus == gsNew)
    CreateNewGame();
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::CreateNewGame(void)
{
  FCellsBombMarkedCount = 0;
  FRedCells.Length = 0;
  FCellState.Length = 0;
  FCellState.Length = FWidth;
  for(int i=0; i < FWidth; i++) {
    FCellState[i].Length = FHeight;
    for(int j=0; j < FHeight; j++) {
      FCellState[i][j].CellState = csClosed;
      FCellState[i][j].SurroundNumber = 0;
    }
  };
}
//---------------------------------------------------------------------------

bool __fastcall TMinerField::IsGameFinished(void)
{
  bool Result = false;
  int FreeCells = 0;
  for(int i=0; i < FCellState.Length; i++)
    for(int j=0; j < FCellState[i].Length; j++)
      if((FCellState[i][j].CellState == csClosed) ||
        (FCellState[i][j].CellState == csQuestionMarked)) {
        FreeCells++;
        if(FreeCells > FMineCount) return (Result);
      };
  if(FreeCells == (FMineCount - FCellsBombMarkedCount)) Result = true;
  return (Result);
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::FireEvGameStatusChanged(TGameStatus AGameStatus, TCells &AChangedCells)
{
  TChangedCells ACells;
  TCells ARedCells;
  if(FGameStatusChanged != NULL) {
    ACells.Length = AChangedCells.Length;
    for(int i=0; i < AChangedCells.Length; i++) {
      ACells[i].Pos = AChangedCells[i];
      ACells[i].CellState = FCellState[AChangedCells[i].x][AChangedCells[i].y];
    };
    ARedCells.Length = FRedCells.Length;
    for(int i=0; i < FRedCells.Length; i++)
      ARedCells[i] = FRedCells[i];
    FGameStatusChanged(this, AGameStatus, FGameDifficulty, ACells, ARedCells);
  };
  AChangedCells.Length = 0;
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::FireEvMinerFieldChanged(TCells &AChangedCells)
{
  TChangedCells ACells;
  TCells ARedCells;
  if(FMinerFieldChanged != NULL) {
    ACells.Length = AChangedCells.Length;
    for(int i=0; i < AChangedCells.Length; i++) {
      ACells[i].Pos.x = AChangedCells[i].x;
      ACells[i].Pos.y = AChangedCells[i].y;
      ACells[i].CellState.CellState = FCellState[AChangedCells[i].x][AChangedCells[i].y].CellState;
      ACells[i].CellState.SurroundNumber = FCellState[AChangedCells[i].x][AChangedCells[i].y].SurroundNumber;
    };
    AChangedCells.Length = 0;
    ARedCells.Length = FRedCells.Length;
    for(int i=0; i < FRedCells.Length; i++)
      ARedCells[i] = FRedCells[i];

    FMinerFieldChanged(this, ACells, ARedCells);
  };
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::FillBombCells(TCells &AChangedCells)
{
  for(int i=0; i < FCellState.Length; i++)
    for(int j=0; j < FCellState[i].Length; j++)
      if(FCellState[i][j].SurroundNumber == -1) {
        AChangedCells.Length++;
        AChangedCells[AChangedCells.Length - 1] = Point(i, j);
      };
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::SetSurround(int AXPos, int AYPos)
{
  for(int i=-1; i <=1; i++)
    for(int j=-1; j <=1; j++)
      if(CheckFieldBounds(AXPos+i, AYPos+j) && (FCellState[AXPos+i][AYPos+j].SurroundNumber != -1))
        FCellState[AXPos+i][AYPos+j].SurroundNumber++;
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::DropMines(int AFirstX, int AFirstY)
{
  int XPos, YPos, DroppedNumber;
  int DeadNumber = FWidth * AFirstY + AFirstX;
  int RandomBase = FWidth * FHeight;
  Randomize();
  int DroppedMines = 0;
  while(DroppedMines < FMineCount) {
    DroppedNumber = random(RandomBase);

    XPos = div(DroppedNumber, FWidth).rem;
    YPos = div(DroppedNumber, FWidth).quot;

    if((FCellState[XPos][YPos].SurroundNumber != -1) && (DroppedNumber != DeadNumber)) {
      FCellState[XPos][YPos].SurroundNumber = -1;
      SetSurround(XPos, YPos);
      DroppedMines++;
    };
  };
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::OpenCell(int AXPos, int AYPos)
{
  TCells ChangedCells;
  if(GameStatus == gsNew) {
    DropMines(AXPos, AYPos);
    FGameStatus = gsRun;
    FireEvGameStatusChanged(gsRun, ChangedCells);
  };

  if(FCellState[AXPos][AYPos].CellState == csBombMarked)
    return;
  if(FCellState[AXPos][AYPos].SurroundNumber == -1) {
    // Stop current game
    FGameStatus = gsLost;
    FRedCells.Length = FRedCells.Length + 1;
    FRedCells[0].x = AXPos; FRedCells[0].y = AYPos;
    FillBombCells(ChangedCells);
    FireEvGameStatusChanged(gsLost, ChangedCells);
    return;
  };

  if(FCellState[AXPos][AYPos].SurroundNumber != 0) {
    FCellState[AXPos][AYPos].CellState = csOpened;
    ChangedCells.Length = 1;
    ChangedCells[0].x = AXPos; ChangedCells[0].y = AYPos;
  }
  else
    OpenSurround(AXPos, AYPos, ChangedCells);
  FireEvMinerFieldChanged(ChangedCells);

  if(IsGameFinished()) {
    FGameStatus = gsWon;
    FillBombCells(ChangedCells);
    FireEvGameStatusChanged(gsWon, ChangedCells);
  };
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::BombMarkCell(int AXPos, int AYPos)
{
  TCellStateRec cState;
  cState.SurroundNumber = CellState[AXPos][AYPos].SurroundNumber;
  cState.CellState = csBombMarked;
  CellState[AXPos][AYPos] = cState;
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::QuestionMarkCell(int AXPos, int AYPos)
{
  TCellStateRec cState;
  cState.SurroundNumber = CellState[AXPos][AYPos].SurroundNumber;
  cState.CellState = csQuestionMarked;
  CellState[AXPos][AYPos] = cState;
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::CloseCell(int AXPos, int AYPos)
{
  TCellStateRec cState;
  cState.SurroundNumber = CellState[AXPos][AYPos].SurroundNumber;
  cState.CellState = csClosed;
  CellState[AXPos][AYPos] = cState;
}
//---------------------------------------------------------------------------

bool __fastcall TMinerField::IsCountBombMarkedCorrect(int AXPos, int AYPos, bool &WrongBombMark)
{
  int BombMarked = 0;
  int RealBombCount = 0;
  for(int i=-1; i <= 1; i++)
    for(int j=-1; j<=1; j++)
      if(CheckFieldBounds(AXPos+i, AYPos+j)) {
        if(FCellState[AXPos+i][AYPos+j].CellState == csBombMarked) {
          BombMarked++;
          if(FCellState[AXPos+i][AYPos+j].SurroundNumber != -1)
            WrongBombMark = true;
        };
        if(FCellState[AXPos + i][AYPos + j].SurroundNumber == -1) {
          FRedCells.Length = FRedCells.Length + 1;
          FRedCells[FRedCells.Length - 1].x = AXPos+i;
          FRedCells[FRedCells.Length - 1].y = AYPos+j;
          RealBombCount++;
        };
      };
  return(RealBombCount == BombMarked);
};

void __fastcall TMinerField::CheckSurround(int AXPos, int AYPos)
{
  bool WrongBombMark;
  TCells ChangedCells;
  if((FCellState[AXPos][AYPos].CellState == csBombMarked) ||
    (FCellState[AXPos][AYPos].CellState == csClosed) ||
    (FCellState[AXPos][AYPos].CellState == csQuestionMarked))
    return;

  // check whether csBombMarked Cells set well
  WrongBombMark = false;
  if(!IsCountBombMarkedCorrect(AXPos, AYPos, WrongBombMark)) {
    FRedCells.Length = 0;
    return;
  };

  // open surrounding csClosed Cells
  OpenSurround(AXPos, AYPos, ChangedCells);

  if(WrongBombMark) {
    FGameStatus = gsLost;
    FillBombCells(ChangedCells);
    FireEvGameStatusChanged(gsLost, ChangedCells);
    return;
  };
  FRedCells.Length = 0;

  FireEvMinerFieldChanged(ChangedCells);
  if(IsGameFinished()) {
    FGameStatus = gsWon;
    FillBombCells(ChangedCells);
    FireEvGameStatusChanged(gsWon, ChangedCells);
  };
}
//---------------------------------------------------------------------------

__fastcall TMinerField::~TMinerField(void)
{
  FRedCells.Length = 0;
  FCellState.Length = 0;
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::HandleEvCreateNewGame(System::TObject* Sender)
{
  GameStatus = gsNew;
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::HandleEvChangeGameDifficulty(System::TObject* Sender, const TGameDifficulty &AGameDifficulty)
{
  GameDifficulty = AGameDifficulty;
}
//---------------------------------------------------------------------------

void __fastcall TMinerField::HandleMinerFieldActionEvent(System::TObject* Sender, int ACol, int ARow, TMinerFieldActionEventType AMinerFieldEventType)
{
  TCells AChangedCell;
  AChangedCell.Length = 1;
  AChangedCell[AChangedCell.Length - 1].x = ACol;
  AChangedCell[AChangedCell.Length - 1].y = ARow;
  switch(AMinerFieldEventType) {
    case meOpenCell: OpenCell(ACol, ARow); break;
    case meCloseCell: {
      CloseCell(ACol, ARow);
      FireEvMinerFieldChanged(AChangedCell);
    }; break;
    case meBombMarkCell: {
      BombMarkCell(ACol ,ARow);
      FireEvMinerFieldChanged(AChangedCell);
    }; break;
    case meQuestionMarkCell: {
      QuestionMarkCell(ACol, ARow);
      FireEvMinerFieldChanged(AChangedCell);
    }; break;
    case meCheckSurround: CheckSurround(ACol, ARow); break;
  };
}
//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩久久| 香蕉成人伊视频在线观看| 色婷婷av一区二区三区大白胸| 天堂成人免费av电影一区| 久久久久久久久岛国免费| 欧美三级三级三级| 91蜜桃在线免费视频| 久久精品国产久精国产| 一区二区三区视频在线看| 精品国产一区二区亚洲人成毛片| 欧美中文字幕一二三区视频| 成人午夜视频在线观看| 久久精品国产澳门| 五月天精品一区二区三区| 亚洲欧美一区二区三区孕妇| 欧美精品一区二区三区在线播放| 欧美日本在线看| 欧美性生活久久| 色综合色狠狠天天综合色| 成人午夜电影小说| 国产一区二区三区久久悠悠色av| 青青草原综合久久大伊人精品优势| 亚洲丝袜美腿综合| 亚洲欧洲日韩女同| 亚洲国产高清在线观看视频| 亚洲精品在线免费播放| 欧美一区午夜视频在线观看| 欧美日韩高清影院| 欧美性高清videossexo| 在线亚洲高清视频| 色婷婷国产精品综合在线观看| 91在线云播放| 91美女视频网站| 91尤物视频在线观看| av动漫一区二区| 99国产精品久久久| 91国偷自产一区二区使用方法| 91年精品国产| 91老师片黄在线观看| 97久久人人超碰| 色爱区综合激月婷婷| 色哟哟日韩精品| 欧美在线观看视频一区二区| 欧洲av一区二区嗯嗯嗯啊| 欧美影院一区二区三区| 欧美日韩高清一区二区不卡| 欧美高清你懂得| 精品日韩一区二区三区| 久久色在线视频| 国产精品全国免费观看高清| 国产精品久久福利| 亚洲靠逼com| 亚洲国产成人av网| 日本欧美一区二区三区乱码| 毛片不卡一区二区| 国产一区二区精品在线观看| 成人免费毛片嘿嘿连载视频| 99精品在线观看视频| 欧美日韩精品免费观看视频| 91麻豆精品国产综合久久久久久 | 国产永久精品大片wwwapp| 国产一区二区影院| 不卡的av在线播放| 色成人在线视频| 欧美一区二区三区免费大片| 日韩欧美国产综合一区| 国产日韩欧美在线一区| 亚洲区小说区图片区qvod| 亚洲成av人片在线| 国产一区二区中文字幕| 成人av资源下载| 欧美日韩国产欧美日美国产精品| 欧美一区二区精品久久911| 国产三级精品视频| 一区二区三区欧美久久| 麻豆国产91在线播放| 成人教育av在线| 欧美日韩在线直播| 欧美绝品在线观看成人午夜影视| 日韩一区二区三区免费观看| 国产成人av一区二区三区在线 | 亚洲免费在线电影| 日韩福利电影在线观看| 顶级嫩模精品视频在线看| 在线观看亚洲成人| 久久久久国产一区二区三区四区| 自拍视频在线观看一区二区| 蜜臀久久99精品久久久久久9| 国产成人免费视频网站高清观看视频| 欧美无砖专区一中文字| 国产亚洲欧美中文| 日韩不卡免费视频| 99久久久久久99| 日韩精品一区国产麻豆| 亚洲激情网站免费观看| 国产一区二区看久久| 欧美精品在线一区二区| 自拍偷拍欧美激情| 国产999精品久久| 欧美一区二区三区免费视频| 樱桃国产成人精品视频| 国产福利一区在线观看| 欧美一区二区免费视频| 伊人婷婷欧美激情| 不卡一区二区三区四区| 欧美不卡视频一区| 亚洲va国产va欧美va观看| www.综合网.com| 国产婷婷色一区二区三区| 日韩国产精品久久久久久亚洲| 色域天天综合网| 日韩毛片视频在线看| 国产成人亚洲综合a∨婷婷图片 | 国产精品女同互慰在线看| 日本女优在线视频一区二区| 色综合久久天天| 国产精品美日韩| 韩国成人福利片在线播放| 日韩三级精品电影久久久| 亚洲宅男天堂在线观看无病毒| 成人av电影在线观看| 国产天堂亚洲国产碰碰| 国产精品1区二区.| 精品动漫一区二区三区在线观看| 日本少妇一区二区| 欧美一区二区在线观看| 天天综合色天天综合色h| 欧美天堂一区二区三区| 亚洲精品国产一区二区精华液| caoporn国产一区二区| 国产精品嫩草久久久久| 成人一级视频在线观看| 欧美国产欧美综合| 成人免费毛片高清视频| 中文字幕在线不卡国产视频| 成人久久视频在线观看| 国产精品色在线| av资源网一区| 亚洲女同一区二区| 日本高清免费不卡视频| 亚洲午夜精品在线| 欧美精品1区2区| 日本欧洲一区二区| 精品国产精品网麻豆系列| 久久疯狂做爰流白浆xx| 久久久久久黄色| av一区二区不卡| 亚洲一级不卡视频| 欧美一区二区在线免费播放| 久久国产日韩欧美精品| 国产无人区一区二区三区| 不卡影院免费观看| 亚洲一区中文日韩| 欧美一区二区视频在线观看2022| 另类专区欧美蜜桃臀第一页| 26uuu国产日韩综合| 成人免费av在线| 一区二区三区四区国产精品| 欧美嫩在线观看| 国产精品影视天天线| 日韩理论片中文av| 337p亚洲精品色噜噜噜| 国产麻豆精品久久一二三| 中文字幕视频一区| 欧美人体做爰大胆视频| 精品一区二区久久| 日韩美女精品在线| 欧美一区二区三区免费大片 | 国产精品入口麻豆原神| 在线免费观看视频一区| 免费高清在线一区| 国产精品高清亚洲| 欧美一区二区三区视频免费播放| 粉嫩欧美一区二区三区高清影视| 一区二区三区四区高清精品免费观看 | 国产精品久久久久一区二区三区 | 欧美极品aⅴ影院| 久久精品夜色噜噜亚洲a∨| 久久久亚洲精品一区二区三区| 欧美激情一区二区三区不卡| 精品99一区二区三区| 日韩一级精品视频在线观看| 久久亚洲二区三区| 中文字幕一区二区三区在线不卡| 中文字幕第一区综合| 精品国产免费人成电影在线观看四季| 国产人成亚洲第一网站在线播放| 亚洲二区在线视频| 国产午夜精品久久久久久免费视| 色婷婷精品大视频在线蜜桃视频 | 一区二区三区在线观看欧美| 日韩欧美一级精品久久| 99re在线精品| 国产一区二三区好的| 亚洲图片有声小说| 中文字幕日本不卡| 精品国产123| 日韩午夜小视频| 欧美在线啊v一区| av福利精品导航|