#include <avkon.hrh>
#include <eikenv.h>
#include <gdi.h>
#include <aknutils.h>
#include "CMenu.h"
#include <images.mbg>
#include <Tetris.rsg>
// Construct and destruct
// NewL()
CMenu* CMenu::NewL(CFbsBitGc* aFbsBitGc)
{
CMenu* self = new (ELeave) CMenu(aFbsBitGc);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop();
return self;
}
// ~
CMenu::~CMenu()
{
delete iBitmap;
iSettingStr.DeleteAll();
// iSettingStr.Reset();
// cannot delete twice
iMenuItemTxt.At(EOptions_RotateDir) = NULL;
iMenuItemTxt.At(ESound_Sounds) = NULL;
iMenuItemTxt.At(ESound_Music) = NULL;
iMenuItemTxt.At(ESound_Volume) = NULL;
iMenuItemTxt.At(EDifficulty_StartLines) = NULL;
iMenuItemTxt.At(EDifficulty_AddBrick) = NULL;
iMenuItemTxt.At(EDifficulty_Done) = NULL;
iMenuItemTxt.At(EPause_Sound) = NULL;
iMenuItemTxt.DeleteAll();
//iMenuItemTxt.Reset();
}
// CMenu
CMenu::CMenu(CFbsBitGc* aFbsBitGc) : iGc(aFbsBitGc)
{}
// ConsturctL
void CMenu::ConstructL()
{
//iLabel = new (ELeave) CEikLabel;
//iLabel->SetTextL(_L("ahhadkjdjfkldsajfkijoewijfioewjf"));
_LIT(KPathName, "\\System\\Apps\\Tetris\\images.mbm");
iBitmap = CEikonEnv::Static()->CreateBitmapL(KPathName, EMbmImagesLogo);
LoadResL(); // Load menu resouce and position
ResetPos();
}
///////////////////////////////////////////////////////////////////////////////
// Other Method
// Draw
void CMenu::Draw()
{
// draw background
DrawBg();
if(iMenuState == ECreditPage)
{
//iLabel->DrawNow();
const CFont* font;
font = CEikonEnv::Static()->TitleFont();
iGc->UseFont(font);
iGc->DrawText(_L("Tetris v1.2"), TPoint(60, 30));
iGc->DrawText(_L("It's my #1 Symbian game, so"), TPoint(20, 60));
iGc->DrawText(_L("it's written 100% from scratch!"), TPoint(10, 80));
iGc->DrawText(_L("Suggestions, comments, or bug"), TPoint(10, 100));
iGc->DrawText(_L("reports are welcome!"), TPoint(10, 120));
iGc->DrawText(_L("My email : cofd.eric@163.com"), TPoint(10, 140));
iGc->DrawText(_L("Thank you for playing!"), TPoint(10, 160));
iGc->DrawText(_L("CArt Studio 2005"), TPoint(45, 200));
iGc->DiscardFont();
return;
}
if(iMenuState == EHighScorePage)
return; // don't draw here
// use default
if(iMenuState == ENonePage)
{
iMenuState = EMainPage;
iMenuItem = EStart;
return;
}
// Get an alternative font
_LIT(KMyFontName,"Roman");
CFont* myFont;
TFontSpec myFontSpec(KMyFontName, 1);
myFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
CBitmapDevice* screenDevice=CEikonEnv::Static()->ScreenDevice();
screenDevice->GetNearestFontInTwips(myFont,myFontSpec);
iGc->UseFont(myFont);
// draw menu page
DrawPage(iMenuPagePos[iMenuState].iX, iMenuPagePos[iMenuState].iY);
// Draw the Blink frame and white selected txt
iGc->SetPenColor(TRgb(250, 250, 250));
iBlink++;
if((iBlink >= 2 && iBlink <= 5) || (iBlink >= 18 && iBlink <= 21))
iGc->SetPenColor(TRgb(220, 220, 220));
else if((iBlink >= 6 && iBlink <= 9) || (iBlink >= 14 && iBlink <= 17))
iGc->SetPenColor(TRgb(180, 180, 180));
else if(iBlink >= 10 && iBlink <= 13)
iGc->SetPenColor(TRgb(120, 120, 120));
else if(iBlink == 22)
iBlink = 0;
// dont't modify Frame's positon
SetFrame(iMenuItem);
if(iSelect)
{
iGc->SetBrushColor(TRgb(90, 90, 255));
iGc->DrawPolygon(iPointList, 12, CGraphicsContext::EAlternate);
iSelect = 0;
}
iGc->DrawPolyLineNoEndPoint(iPointList, 12);
// highlight the text
iGc->SetPenColor(KRgbWhite);
iGc->DrawText(*iMenuItemTxt.At(iMenuItem), TRect(iPointList[2]+TPoint(1,1), iPointList[8]-TPoint(1,1)), 15, CGraphicsContext::ECenter, 0);
// delete created Font
iGc->DiscardFont();
screenDevice->ReleaseFont(myFont);
}
// DrawBg()
void CMenu::DrawBg()
{
iGc->SetBrushStyle(CFbsBitGc::ESolidBrush);
iGc->SetFadingParameters(80, 255);
iGc->SetFaded(1);
iGc->SetBrushColor(KRgbBlack);
iGc->Clear();
iGc->BitBlt(iPos + TPoint(0, 69), iBitmap);
iGc->BitBlt(iPos + TPoint(0, 208), iBitmap);
iGc->BitBlt(iPos + TPoint(185, 69), iBitmap);
iGc->BitBlt(iPos + TPoint(185, 208), iBitmap);
iPos -= TPoint(4, 3);
if(iPos.iY <= -139)
iPos = TPoint(0, 0);
iGc->SetFaded(0);
}
// DrawPage()
void CMenu::DrawPage(TInt aItemFrom, TInt aItemTo)
{
if(aItemFrom == ENoneItem)
return;
TInt i;
// draw the frame
iGc->SetBrushColor(TRgb(45, 45, 130));
iGc->SetPenColor(TRgb(20, 20, 120));
for(i = aItemFrom; i <= aItemTo; i++)
{
SetFrameDynamic(i);
iGc->DrawPolygon(iPointList, 12, CGraphicsContext::EAlternate);
}
iSpeed += 5;
// draw the Txt
iGc->SetPenColor(KRgbGray);
for(i = aItemFrom; i <= aItemTo; i++)
{
SetFrame(i);
iGc->DrawText(*iMenuItemTxt.At(i), TRect(iPointList[2]+TPoint(1,1), iPointList[8]-TPoint(1,1)), 15, CGraphicsContext::ECenter, 0);
}
}
// Command
// @return 1 denote quit the game
// @return 2 dentoe start the game
TInt32 CMenu::Command(TInt aCommand)
{
switch(aCommand)
{
case 'q' :
{
if(iMenuState == EMainPage || iMenuState == EPausePage)
break;
iMenuState = iPrevPage;
ResetPos();
iMenuItem = iPrevItem;
}return 5;
case EStdKeyDevice5:
case '5':
case 63557:
{
switch(iMenuItem)
{
case EQuit:
return 1; // Quit
case EStart :
{
iPrevPage = EPausePage;
iMenuState = ENonePage;
iPrevItem = EPause_Continue;
}return 2; // Start the game
case EPause_Continue:
{
iMenuState = ENonePage;
}return 3; // Continue the game
case EOptions_Back:
{
iMenuState = EMainPage;
ResetPos();
iMenuItem = EStart;
}return 11; // set rotation
case ESound_Done :
{
iMenuState = iPrevPage;
ResetPos();
iMenuItem = iPrevItem;
}return 12; // set Sound
case EDifficulty_Done :
{
iMenuState = iPrevPage;
ResetPos();
iMenuItem = iPrevItem;
}return 13; // set Difficulty
case EOptions:
{
iPrevPage = EMainPage;
iMenuState = EOptionsPage;
ResetPos();
iPrevItem = iMenuItem;
iMenuItem = EOptions_Sound;
}break;
case ECredit:
{
iPrevPage = EMainPage;
iMenuState = ECreditPage;
iPrevItem = iMenuItem;
iMenuItem = -1;
}break;;
case EHighScore:
{
iPrevPage = EMainPage;
iMenuState = EHighScorePage;
iPrevItem = iMenuItem;
iMenuItem = -1;
}return 4;
// Options
case EOptions_Sound:
{
iPrevPage = EOptionsPage;
iMenuState = ESoundPage;
ResetPos();
iPrevItem = iMenuItem;
iMenuItem = ESound_Sounds;
}break;
case EOptions_Difficulty:
{
iPrevPage = EOptionsPage;
iMenuState = EDifficultyPage;
ResetPos();
iPrevItem = iMenuItem;
iMenuItem = EDifficulty_StartLines;
}break;
// Pause page
case EPause_Sound:
{
iPrevPage = EPausePage;
iMenuState = ESoundPage;
ResetPos();
iPrevItem = iMenuItem;
iMenuItem = ESound_Sounds;
}break;
case EPause_EndGame:
{
iMenuState = EMainPage; // return to main page
ResetPos();
iMenuItem = EStart;
}break;
case EOptions_RotateDir:
case ESound_Sounds :
case ESound_Music :
case ESound_Volume :
case EDifficulty_StartLines :
case EDifficulty_AddBrick :
{}break;
default:
{
iMenuState = iPrevPage;
ResetPos();
iMenuItem = iPrevItem;
}break;
}
}return 5;
case EKeyUpArrow : // UP
case '2' :
{
iMenuItem = iMenuItem <= iMenuPagePos[iMenuState].iX ? iMenuPagePos[iMenuState].iY : --iMenuItem;
// select the menu item
iSelect = 1;
}return 0;
case EKeyDownArrow :
没有合适的资源?快使用搜索试试~ 我知道了~
俄罗斯方块Symbian`~~~~~~~~~~~~
共96个文件
h:19个
wav:18个
bmp:17个
需积分: 10 48 下载量 65 浏览量
2008-05-17
21:47:55
上传
评论
收藏 330KB RAR 举报
温馨提示
俄罗斯方块Symbian`~~~~~~~~~~~~
资源推荐
资源详情
资源评论
收起资源包目录
Tetris.rar (96个子文件)
Tetris
group
ABLD.BAT 526B
Tetris.mmp 2KB
bld.inf 60B
build.bat 54B
Tetris.rss 4KB
Tetris_caption.rss 142B
piano_baby.wav 4KB
inc
TGrid.h 762B
TetrisContainer.h 837B
TetrisAppUi.h 700B
CEngine.h 3KB
Language.l01 1KB
MGameTimerObserver.h 270B
Tetris.hrh 175B
Tetris.LOC 184B
TBlock.h 675B
Language.l31 1KB
TetrisDocument.h 970B
SoundMixer
CSoundMixer.h 934B
TSample.h 640B
CWaveLoader.h 507B
TAudioShared.h 710B
CMixerThread.h 2KB
CGameTetris.h 2KB
TetrisAppView.h 883B
TetrisApplication.h 285B
CMenu.h 3KB
CSplash.h 657B
CGameTimer.h 1003B
TScore.h 617B
src
TetrisAppView.cpp 3KB
CGameTetris.cpp 8KB
CEngine.cpp 13KB
TBlock.cpp 2KB
TetrisContainer.cpp 2KB
CSplash.cpp 1KB
TScore.cpp 1KB
TetrisDocument.cpp 1KB
TGrid.cpp 1KB
Tetris.cpp 306B
SoundMixer
CSoundMixer.cpp 2KB
SoundMixer.mmp 343B
CMixerThread.cpp 6KB
CWaveLoader.cpp 1KB
TetrisAppUi.cpp 1KB
CGameTimer.cpp 1KB
TetrisApplication.cpp 561B
CMenu.cpp 15KB
aif
list_icon.bmp 4KB
context_pane_icon.bmp 6KB
Thumbs.db 23KB
list_icon_mask.bmp 294B
context_pane_icon_mask.bmp 414B
TetrisAif.rss 177B
data
splash.psd 319KB
bg.wav 59KB
_lexbig_speak_ah.gif 2KB
8.bmp 306B
background24.bmp 107KB
3.bmp 306B
2.bmp 306B
9.bmp 306B
gameover.wav 9KB
logo.bmp 29KB
6.bmp 306B
cleanrow.wav 15KB
4.bmp 306B
7.bmp 306B
lexbig_speak_ee.gif 9KB
rotate.wav 2KB
levelup.wav 7KB
Thumbs.db 74KB
menu.wav 2KB
excellent.wav 10KB
5.bmp 306B
splash24.bmp 35KB
1.bmp 306B
drop.wav 606B
splash.bmp 72KB
anewhighscore.wav 15KB
click.wav 2KB
install
tetris
bg.wav 59KB
TETRIS.APP 31KB
TETRIS.AIF 3KB
gameover.wav 9KB
TETRIS.R31 711B
IMAGES.MBM 41KB
TETRIS_CAPTION.R31 24B
TETRIS_CAPTION.R01 36B
cleanrow.wav 15KB
welldone.wav 10KB
levelup.wav 7KB
menu.wav 2KB
TETRIS.R01 879B
click.wav 2KB
Tetris.pkg 1KB
共 96 条
- 1
资源评论
nivana999
- 粉丝: 44
- 资源: 48
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功