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

 这一步我们将加入用户接口来测试第二步中加入的数据结构,我们可以用方向键移动方块到想要的位置然后用OK来固定方块(因为刚开始方块在顶部,先按向下的方向键,才能看到方块),玩家可以旋转方块。

首先用CS60TestAppView::Draw函数画背板,
void CS60TestAppView::Draw(const TRect& /*aRect*/) const
{
CWindowGc &gc=SystemGc();
TRect rect=Rect();
gc.Clear(rect);

int i, j;
TFixedArray<TInt8, KGridX> arr;
gc.SetPenColor(TRgb(0));
gc.SetBrushStyle(CWindowGc::ESolidBrush);

for (i=0; i<=KGridY; i++)
gc.DrawLine(TPoint(KBoardOffset, KBoardOffset+KCellSize*i),
TPoint(KBoardOffset+KGridX*KCellSize, KBoardOffset+KCellSize*i));

for (i=0; i<=KGridX; i++)
gc.DrawLine(TPoint(KBoardOffset+KCellSize*i, KBoardOffset),
TPoint(KBoardOffset+KCellSize*i, KBoardOffset+KGridY*KCellSize));

for (i=0; i<KGridY; i++)
{
iDoc->GetRowContent(i, arr);
for (j=0; j<KGridX; j++)
{
gc.SetBrushColor(KColors[arr[j]]);
if (arr[j])
gc.DrawRect(TRect(KBoardOffset+KCellSize*j, KBoardOffset+KCellSize*i,
KBoardOffset+KCellSize*(j+1)+1, KBoardOffset+KCellSize*(i+1)+1));
}
}
}
我们用TGrid获得方块类型,用DrawLine和DrawRect来画背板,用SetPenColor来控制边框和线条的颜色,用SetBrushStyle/SetBrushColor来控制背板小方块的颜色,所以CWindowGc的方法可以查看SDK帮助文件。

我们需要对每个按键起作用,每次按键产生一个事件,该事件首先送给CS60TestAppView处理,将压到AddStackL栈顶部,缺省执行是返回EKeyWasNoConsumed,接下来此事件将送给CS60TestAppUi处理,在这个类中将用HandlKeyEventL来处理对应的按键.
KeyResponse CS60TestAppUi::HandleKeyEventL(const TKeyEvent &aKeyEvent,
TEventCode aType)
{
if (aType==EEventKey)
{
if (aKeyEvent.iCode==EKeyUpArrow)
if (iDoc->iBlockPos.iY>0)
iDoc->MoveBlock(iDoc->iBlockPos-TPoint(0, 1));

if (aKeyEvent.iCode==EKeyDownArrow)
iDoc->MoveBlock(iDoc->iBlockPos+TPoint(0, 1));

if (aKeyEvent.iCode==EKeyLeftArrow)
iDoc->MoveBlock(iDoc->iBlockPos-TPoint(1, 0));

if (aKeyEvent.iCode==EKeyRightArrow)
iDoc->MoveBlock(iDoc->iBlockPos+TPoint(1, 0));

if (aKeyEvent.iCode==EKeyDevice3)
{
if (iDoc->FixBlock())
iDoc->NewBlock();
}

if (aKeyEvent.iCode=='1')
iDoc->RotateBlock(-1);

if (aKeyEvent.iCode=='0' || aKeyEvent.iCode=='3')
iDoc->RotateBlock(1);
}
return EKeyWasNotConsumed;
}
但方格有变化时,我们将重画屏幕,CS60TestAppUi::UpdateBroad里的DrawDeferred来刷新整个屏幕。

好的设计是对每个按键都用EKeyWasConsumed来响应,我们会用EKeyWasNotConsumed来处理一些无用的按键。

最后在菜单里加入“new game”选项.
MENU_ITEM {command = ES60TestNewGame; txt = "New Game";}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值