⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unboundmodedemominerdatasource.cpp

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 CPP
字号:
#include "UnboundModeDemoMinerDataSource.h"

void __fastcall TMinerFieldDataSource::InitNewGame(void)
{
  FCellState.Length = FColCount;
  for(int i=0; i < FColCount; i++) {
    FCellState[i].Length = FRowCount;
    for(int j=0; j < FRowCount; j++) {
      FCellState[i][j].CellState = csClosed;
      FCellState[i][j].SurroundNumber = 0;
    };
  };
}
//---------------------------------------------------------------------------

void __fastcall TMinerFieldDataSource::UpdateMinerFieldState(const TChangedCells AChangedCells, const TCells ARedCells)
{
  for(int i=0; i < AChangedCells.Length; i++) {
    FCellState[AChangedCells[i].Pos.x][AChangedCells[i].Pos.y] = AChangedCells[i].CellState;
 }
}
//---------------------------------------------------------------------------

void __fastcall TMinerFieldDataSource::FireGameStatusChanged(System::TObject* Sender, TGameStatus AGameStatus, const TGameDifficulty &AGameDifficulty, TChangedCells &AChangedCells, TCells &ARedCells)
{
  TCells ACells;
  if (FGameStatusChanged != NULL) {
    ACells.Length = AChangedCells.Length;
    for(int i=0; i < AChangedCells.Length; i++)
      ACells[i] = AChangedCells[i].Pos;
    AChangedCells.Length = 0;
    FGameStatusChanged(Sender, AGameStatus, AGameDifficulty, ACells, ARedCells);
  }
}
//---------------------------------------------------------------------------

void __fastcall TMinerFieldDataSource::FireEvMinerFieldChanged(System::TObject* Sender, TCells &AChangedCells, TCells &ARedCells)
{
  if (FMinerFieldChanged != NULL)
    FMinerFieldChanged(Sender, AChangedCells, ARedCells);
}
//---------------------------------------------------------------------------

int __fastcall TMinerFieldDataSource::GetRecordCount(void)
{
  return (FRowCount);
}
//---------------------------------------------------------------------------

Variant __fastcall TMinerFieldDataSource::GetValue(void * ARecordHandle, void * AItemHandle)
{
  if (((int)AItemHandle <= (FColCount - 1)) && ((int)ARecordHandle <= (FRowCount - 1)))
    return ((int)&FCellState[(int)AItemHandle][(int)ARecordHandle]);
  else
    return (Null);
}
//---------------------------------------------------------------------------

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

void __fastcall TMinerFieldDataSource::HandleEvMinerFieldChanged(System::TObject* Sender, TChangedCells &AChangedCells, TCells &ARedCells)
{
  UpdateMinerFieldState(AChangedCells, ARedCells);
  DataChanged();
  TCells ACells;
  ACells.Length = AChangedCells.Length;
  for(int i=0; i < AChangedCells.Length; i++)
    ACells[i] = AChangedCells[i].Pos;
  AChangedCells.Length = 0;
  FireEvMinerFieldChanged(Sender, ACells, ARedCells);
}
//---------------------------------------------------------------------------

void __fastcall TMinerFieldDataSource::HandleEvGameStatusChanged(System::TObject* Sender, TGameStatus AGameStatus, const TGameDifficulty &AGameDifficulty, TChangedCells &AChangedCells, TCells &ARedCells)
{
  switch(AGameStatus) {
    case gsNew: {
      FColCount = AGameDifficulty.Width;
      FRowCount = AGameDifficulty.Height;
      InitNewGame();
    }; break;
    case gsLost:
      UpdateMinerFieldState(AChangedCells, ARedCells); break;
    case gsWon:
      UpdateMinerFieldState(AChangedCells, ARedCells); break;
  };
  DataChanged();
  FireGameStatusChanged(Sender, AGameStatus, AGameDifficulty, AChangedCells, ARedCells);
}
//---------------------------------------------------------------------------




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -