首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 游戏开发 >> 正文
Symbian编程:俄罗斯方块六步曲 (第四步)
作者:未知    文章来源:www.symfone.com    更新时间:2006-4-28 14:21:43
当前游戏还不是一个有趣的游戏,用户可以移动方块到他想要的地方,这样就很无聊,这一步我们将加入游戏引擎,它将使方块自由下落。
这个引擎类是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”

(源码在本站下载)

相关文章:
基于Nokia手机的移动游戏开发步步通(五)
基于Nokia手机的移动游戏开发步步通(三)
Series60游戏设计参考(四)
Series60游戏设计参考(一)
C++ Builder 实现控件拖放操作
Symbian编程:俄罗斯方块六步曲 (第三步)
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号