?? s60testdocument.cpp
字號:
#include "S60TestAppUi.h"
#include "S60TestDocument.h"
// Standard Symbian OS construction sequence
CS60TestDocument *CS60TestDocument::NewL(CEikApplication& aApp)
{
CS60TestDocument *self=NewLC(aApp);
CleanupStack::Pop(self);
return self;
}
CS60TestDocument *CS60TestDocument::NewLC(CEikApplication& aApp)
{
CS60TestDocument *self=new(ELeave) CS60TestDocument(aApp);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
void CS60TestDocument::ConstructL()
{
TTime time;
time.HomeTime();
seed=time.Int64();
Reset();
}
CS60TestDocument::CS60TestDocument(CEikApplication& aApp)
:CAknDocument(aApp),
iGrid(),
iCurrBlock(),
iBlockPos(3, -4)
{
}
CS60TestDocument::~CS60TestDocument()
{
}
void CS60TestDocument::Reset()
{
iGrid.Clear();
iBlockPos=TPoint(3, -4);
iScore=0;
iLines=0;
iLevel=1;
iCurrBlock=TBlock::RandomBlock(seed);
}
void CS60TestDocument::NewBlock()
{
iCurrBlock=TBlock::RandomBlock(seed);
iBlockPos=TPoint(3, -4);
}
bool CS60TestDocument::MoveBlock(const TPoint &p)
{
if (iGrid.DoesCollide(iCurrBlock, p)) return false;
iBlockPos=p;
iAppUi->UpdateBoard();
return true;
}
bool CS60TestDocument::FixBlock()
{
int i;
// check if it is outside the board
for (i=0; i<-iBlockPos.iY; i++)
if (iCurrBlock.RowMask(i))
return false;
iGrid.PutBlock(iCurrBlock, iBlockPos);
return true;
}
int CS60TestDocument::CheckRows()
{
int offset=0, i, j;
for (i=KGridY-1; i>=0; i--)
{
if (iGrid.iMask[i]==0xffffU)
{
offset++;
iScore++;
iLines++;
continue;
}
if (offset>0)
{
iGrid.iMask[i+offset]=iGrid.iMask[i];
for (j=0; j<KGridX; j++)
iGrid.iContent[i+offset][j]=iGrid.iContent[i][j];
}
}
for (i=0; i<offset; i++)
{
iGrid.iMask[i]=0x003f;
for (j=0; j<KGridX; j++)
iGrid.iContent[i][j]=0;
}
if (offset>0) iAppUi->UpdateBoard();
return offset;
}
bool CS60TestDocument::RotateBlock(int dir)
{
iCurrBlock.Rotate(dir);
if (iGrid.DoesCollide(iCurrBlock, iBlockPos))
{
iCurrBlock.Rotate(-dir);
return false;
}
iAppUi->UpdateBoard();
return true;
}
bool CS60TestDocument::IsBlock(const TPoint &p) const
{
if (p.iX>=iBlockPos.iX && p.iX<iBlockPos.iX+4 &&
p.iY>=iBlockPos.iY && p.iY<iBlockPos.iY+4)
return (iCurrBlock.RowMask(p.iY-iBlockPos.iY)&(1<<(3-p.iX+iBlockPos.iX)))>0;
return false;
}
void CS60TestDocument::GetRowContent(int nr, TFixedArray<TInt8, KGridX> &row) const
{
int i;
for (i=0; i<KGridX; i++)
{
if (IsBlock(TPoint(i, nr))) row[i]=iCurrBlock.Color();
else row[i]=iGrid.iContent[nr][i];
}
}
CEikAppUi *CS60TestDocument::CreateAppUiL()
{
// Create the application user interface, and return a pointer to it,
// the framework takes ownership of this object
iAppUi=new(ELeave) CS60TestAppUi(this);
return iAppUi;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -