Symbian编程:俄罗斯方块六步曲 (第四步)

 当前游戏还不是一个有趣的游戏,用户可以移动方块到他想要的地方,这样就很无聊,这一步我们将加入游戏引擎,它将使方块自由下落。
<script src="/adsc/dispad.asp?id=10"></script>
这个引擎类是CTimer类的继承类CS60TestEngine,我将用After(iInterval)将引擎挂起一段时间,至少要隔iInterval微秒后,再运行CS60TestEngine::RunL,如果用一个循环延迟时间来取代CTimer,这样将要中断主线程,不能接收按键事件和显示菜单。

CTimer是一个需激活对象,我们用CActiveScheduler::Add(this)将它加入时间表队列。

void CS60TestEngine::ConstructL()
{
CTimer::ConstructL();
CActiveScheduler::Add(this);
After(iInterval);
iState=ERunning;
}
但用户重新玩游戏,将先用Cancel()来结束,在隔一定时间后重新开始.
void CS60TestEngine::Reset()
{
if (iState==ERunning)
Cancel();
iState=ERunning;
After(iInterval);
}
在RunL里,方块延一条线下坠,但它不能再下坠时我们将固定此方块,再产生新的方块,
void CS60TestEngine::RunL()
{
if (!iDoc->MoveBlock(iDoc->iBlockPos+TPoint(0, 1)))
{
if (!iDoc->FixBlock())
{
// Game over
TBuf<64> message;
CEikonEnv::Static()->ReadResource(message, R_NOTE_GAME_OVER);
CAknInformationNote *informationNote=new(ELeave) CAknInformationNote;
informationNote->ExecuteLD(message);
iState=EGameOver;
return;
}
iDoc->CheckRows();

if (iDoc->iLevel<=(iDoc->iLines/10))
{
iInterval*=3;
iInterval/=4;
iDoc->iLevel++;
}

iDoc->NewBlock();
}

iBeginTime.HomeTime();
After(iInterval);
}
但不能再放方块时,我们将结束游戏,并显示一段文字
CEikonEnv::Static()->ReadResource(message, R_NOTE_GAME_OVER)
结束游戏引擎
iState=EGameOver。
我们将在资源文件中加载”game over”,这样我们只要翻译资源文件就可将游戏翻译成不同的语言,s60test.rss在加入TBUF型字符串
RESOURCE TBUF32 r_note_game_over
{
buf = "Game Over";
}
Build 将其建成s60test..rsg文件,在这个文件中R_NOTE_GAME_OVER定义成ID,通过
CEikonEnv::Static()->ReadResource(message, R_NOTE_GAME_OVER)
来加载“game over”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值