專利名稱:一種具有搖骰子功能的手機(jī)與手機(jī)搖骰子的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種手機(jī),尤其是涉及一種具有搖骰子功能的手機(jī)與手機(jī)搖骰子的方法。
背景技術(shù):
CDMA(Code-Division Multiple Access),碼分多址,是近年來在數(shù)字移動通信進(jìn)程中出現(xiàn) 的一種先進(jìn)的無線擴(kuò)頻通信技術(shù)。CDMA的基本技術(shù)之一是擴(kuò)頻,因此這一多址技術(shù)具有很 強(qiáng)的保密性,并早在第二次世界大戰(zhàn)期間就在軍事通信和電子對抗中予以采用,60年代以后 又在軍用衛(wèi)星通訊中采用。20世紀(jì)90年代第二代(2G) CDMA蜂窩移動通信系統(tǒng)問世,其 較TDMA之優(yōu)點己見端倪,在系統(tǒng)容量、通信質(zhì)量和保密性方面均有優(yōu)于TDMA之處,ITU 推出的IMT-2000 (3G)標(biāo)準(zhǔn)及之后批準(zhǔn)的幾個3G標(biāo)準(zhǔn)均系采用CDMA多址方式。正是基 于CDMA上述技術(shù)性能上的優(yōu)勢,CDMA通信技術(shù)被引入我國,然而CDMA終端手機(jī)在前 期引入我國的時候,手機(jī)在功能和娛樂性上對比目前的GSM手機(jī)差距較大,中國電信作為 重組后的CDMA運營商,需要手機(jī)設(shè)備制造商推出更具娛樂性的CDMA終端手機(jī)。
參考文獻(xiàn)如下
1. 丘仲潘編譯.游戲核心算法編程內(nèi)幕[M].北京希望電子出版社,2004年12月。
2. 楊大成著.CDMA2000 IX移動通信系統(tǒng)[M].機(jī)械工業(yè)出版社,2005年1月。
3. (美)??藸栔?,劉宗田等譯.0++編程思想[厘].機(jī)械工業(yè)出版社,2003年4月。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種增強(qiáng)CDMA手機(jī)娛樂性的具有搖骰子功能的手機(jī)與手機(jī)搖 骰子的方法。
本發(fā)明所述的具有搖骰子功能的手機(jī)是采用高通CDMA系列芯片方案的CDMA手機(jī), 其軟件架構(gòu)采用BREW架構(gòu)。
本發(fā)明所述的手機(jī)搖骰子的方法包括以下步驟
1) 進(jìn)入游戲菜單界面,選擇搖骰子,按確定鍵啟動搖骰子游戲;
2) 在搖骰子游戲界面,按OK鍵啟動骰子的搖動音效和搖動界面;
3) 搖骰子游戲應(yīng)用在收到OK鍵事件后,產(chǎn)生骰子的隨機(jī)點數(shù);
4) 根據(jù)隨機(jī)點數(shù),產(chǎn)生幸運點數(shù)提示語。在步驟2)中,所述的在搖骰子游戲界面,按OK鍵啟動骰子的搖動音效和搖動界面, 其具體步驟如下-
1) 釆用按鍵來模擬手動搖動骰子;
2) 采用;MIDI音來模擬搖骰子碰撞骰盅的聲音;
3) 采用6張JPEG圖片來模擬顯示骰子的點數(shù),之所以是6張是因為骰子的最大點數(shù)是 6點。
在步驟3)中,所述的產(chǎn)生骰子的隨機(jī)點數(shù)的具體步驟如下 采用如下的隨機(jī)算法來產(chǎn)生每顆骰子的點數(shù) GETRAND((byte*)&Dest, sizeof(uint8)); pThis->nDice
= (pThis->nDice
+ Dest % 5 + 1) % 6。
在步驟4)中,所述的根據(jù)隨機(jī)點數(shù),產(chǎn)生幸運點數(shù)提示語的具體步驟如下
根據(jù)隨機(jī)點數(shù),生成幸運指數(shù)提示語的游戲形式。比如當(dāng)您搖到18點的時候提示您
"新一年,你扎實的專業(yè)根基和辛苦播種,將得到豐碩的回報"等。
本發(fā)明基于CDMA技術(shù)性能上的優(yōu)勢,克服CDMA終端手機(jī)在前期引入我國的時候, 手機(jī)在功能和娛樂性上對比目前的GSM手機(jī)差距較大等問題,為需要手機(jī)設(shè)備制造商推出 更具娛樂性的CDMA終端手機(jī),不僅增強(qiáng)了CDMA手機(jī)的娛樂性,而且使CDMA手機(jī)具有 搖骰子游戲功能。
圖1為BREW的軟件架構(gòu)圖。 圖2為BREW的消息處理流程圖。
具體實施例方式
以下實施例將結(jié)合附圖對本發(fā)明作進(jìn)一步的說明。
一、如圖1所示,搖骰子應(yīng)用就是運行在該BREW的軟件架構(gòu)下,BREW的軟件架構(gòu) 是高通提出并實現(xiàn)的一套軟件開發(fā)架構(gòu),搖骰子應(yīng)用在該架構(gòu)下進(jìn)行的應(yīng)用游戲的開發(fā),對 于采用高通芯片開發(fā)CDMA手機(jī)來說,該軟件架構(gòu)已經(jīng)實現(xiàn)。在此不對BREW軟件架構(gòu)的 實現(xiàn)進(jìn)行深入分析,只對其核心思想進(jìn)行簡單闡述,以利于說明搖骰子游戲應(yīng)用的開發(fā)。
(1) 應(yīng)用(APP):指的應(yīng)用程序本身,搖骰子應(yīng)用就是該BREW軟件架構(gòu)下的一個應(yīng)用。
(2) 窗口管理(FORM):以窗口的形式來管理需要顯示的界面,它為上層應(yīng)用提供界 面的顯示服務(wù)。(3)界面元素(Widget):指的是用于構(gòu)成一個窗口的元素,比如說,在一個窗口里 可能有文本,有圖象。這些都可以作為界面元素(Widget)來放置到窗口 (FORM)里。 搖骰子游戲應(yīng)用正是基于以上的軟件架構(gòu)來實現(xiàn)的。
二、 如圖2所示,該圖詳細(xì)描述了事件在BREW軟件架構(gòu)下是如何經(jīng)過各個模塊的。事 件先會到達(dá)應(yīng)用(APP),然后由應(yīng)用傳給根窗口 (ROOTFORM),再由根窗口傳給Widget, 每個Widget決定有哪些事件需要傳給當(dāng)前顯示的窗口來進(jìn)行處理。搖骰子游戲應(yīng)用正是基于 該消息流程來實現(xiàn)的。
三、 搖骰子游戲的軟件代碼實現(xiàn)步驟如下
(1)應(yīng)用實體的創(chuàng)建 如下所示,定義了搖骰子游戲的數(shù)據(jù)結(jié)構(gòu), typedef struct _CGamblingApp
并對該結(jié)構(gòu)元素進(jìn)行必要說明
AEEApplet IUTKRootForm IUTKListForm ICBUTKListForm IMessageBox* ICBMessageBox IUTKForm
a; 〃應(yīng)用; *pIUTKRootForm; *pIUTKListForm; myICBListForm;
〃根窗口,用來管理Form的; 〃ListForm,實現(xiàn)游戲菜單的顯示; 〃按鍵,TP觸摸的處理接口函數(shù); pIMessageBox; 〃彈出窗口,用來實現(xiàn)幫助等的提示信息; myICBMessageBox; 〃彈出窗口的事件處理接口 ;
*pIUTKForm; //普通窗口,用來實現(xiàn)游戲界面的顯示; ICBUTKForm myICBUTKForm;〃普通窗口的事件處理接口 , 用來實現(xiàn)游戲操作,比如說按了 OK鍵后就啟動搖搖骰子游戲過程; IRingPlayer *pIRingPlayer; 〃鈴聲組件,用來實現(xiàn)搖骰子的音效;
uint8 nDice[3];〃實現(xiàn)了 3顆骰子,用于存放骰子的隨機(jī)點數(shù);
CGambling—Status GamblingStatus; uint 16 RunningTimes;
CFG—CGambling *pGamblingCFG; 〃配置信息,用來保存該游戲的一些配置信息, 比如該游戲是否啟動音效。
uint 16 nSelectltem; } CGambling App;
(2)搖骰子游戲應(yīng)用的事件處理函數(shù)示例代碼,這是整個應(yīng)用處理的入口。static boolean CGamblingApp—HandleEvent(CGamblingApp* pThis, AEEEvent eCode, uintl6 wParam, uirit32 dwParam)
int result = SUCCESS; switch (eCode)
〃和用戶交互操作的處理主要通過下面的處理函數(shù)來實現(xiàn)。
case EVT—KEY:
case EVT—KEY—PRESS:
case EVT—KEY—RELEASE:
if(IUTKRootForm—HandleEvent(pThis-〉pIUTKRootForm, eCode, wParam, dwParam》
return TRUE;
return(TRUE); default: breakj
return FALSE;
(3)游戲主菜單界面的顯示,其基本的實現(xiàn)原理是基于(1)所描述的軟件架構(gòu)代碼的
體現(xiàn)如下,并做適當(dāng)?shù)淖⑨屨f明。
static int CGamblingApp—CreateMainForm(CGamblingApp *pThis)
{ 一
TUTKListFormltem Item = {0};
uintl 6 i =0;
if(pThis->pIUTKListForm !=NULL)
IUTKListForm—Show(pThis->pIUTKListForm, FALSE);RELEASEIF(pThis->pIUTKListForm);
〃創(chuàng)建搖骰子游戲主菜單界面;
IUTKRootForm—CreateUTKListForm(pThis->pIUTKRootForm,
&pThis->pIUTKListForm, CGAMBLING—MAINFORM—ID, NUIX,
LFS—NORMAL, &pThis->myICBListForm,
o);
〃在游戲主菜單界面里,插入界面元素;
for(i = T—CGAMBLING—NEWGAME; i <= T—CGAMBLING—HELP; i++)
Item.bCheck = FALSE; Item.CmdID =i; Item.nTxtID = i; ' Item.pszText = NULL;
Item.nImgID = CGamblingSetIcon[i-T—CGAMBLING一NEWGAME]; Item.pII咖ge = NULL;
IUTKListForm—InsertItem(pThis->pIUTKListForm,&Item, (uintl 6)(i-T—CGAMBLING—NEWGAME));
lUTKListForm—SetSelectedByIndex(pThis->pIUTKListForm, pThis->nSelectItem); lUTKListForm—SetTitle(pThis-〉pIUTKListForm,T一CGAMBLING一MA證ORM,
NUIX);
IUTKListForm_SetSoftKeys(pThis->pIUTKListForm, (uintl6)NULL, T一Ok, T一Back);
〃顯示游戲主泰單界面;
IUTKListForm—Show(pThis-〉pIUTKListForm,TRUE); return SUCCESS;
(4)游戲主界面的生成 static int CGamblingApp—CreateGameForm(CGamblingApp *pThis)
〃界面元素; WidgetlnfoWidgetlnfo[]=
CGAMBLING—WIDGET—BACKGROUND—ID, IMAGE_WIDGET, 0, 0, 176, 202, TRUE, DEFAULT—STYLE
},CGAMBLING_WIDGET—DICE1JD, IMAGE—WIDGET,59, 129 , 29, 26, TRUE, DEFAULT—STYLE
},
CGAMBLING—WIDGET—DICE2一ID, IMAGE—WIDGET,90, 129 , 29, 26, TRUE, DEFAULT—STYLE
},
{
CGAMBLING—WIDGET—DICE3—ID, IMAGE_WIDGET,121,129, 29, 26, TRUE, DEFAULT—STYLE
},
CGAMBLING—WIDGET—TEXT—ID, STATIC—WIDGET,32, 54 , 128, 64, TRUE, DEFAULT—STYLE
},
};
int32 Result = SUCCESS;
int32 WidgetCount = 5;
TWidgetParam wParam = {0};RELEASEIF(pThis國〉pIUTKForm);
〃創(chuàng)建游戲主界面窗口
lUTKRootForm—CreateUTKForm(pThis->pIUTKRootForm,
&pThis->pIUTKForm,CGAMBLING_GAMEFORM—ID,UFS—FUIXFORM,&pThis->myICBUTKForm,
o);
〃插入界面元素;
IUTKForm—InsertWidgets(pThis->pIUTKForm, Widgetlnfo, WidgetCount);
8〃設(shè)置元素的屬性;
wParam.WidgetID = CGAMBLING—WIDGET—BACKGROUND—ID;wParam.u.ImgParam.ImgResID = IDIPNG—GAMBLING—BG—IDLE;wParam.u.ImgParam.pIImage = NULL;
lUTKForm—SetWidgetParam(pThis->pIUTKForm,wParam.WidgetID,&wParam);IUTKForm—SetWidgetVisible(pThis->pIUTKForm,
CGAMBLING—WIDGET一DICE1—ID,F(xiàn)ALSE》IUTKForm一SetWidgetVisible(pThis-〉pIUTKForm,
CGAMBLING—WIDGET—DICE2 ID,FALSE);lUTKForm—SetWidgetVisible(pThis國〉pIUTKForm,
CGAMBLING_WIDGET—DICE3ID,F(xiàn)ALSE);IUTKForm_EnableAllKeyEvent(pThis->pIUTKForm,TRUE);〃顯示游戲主界面。
IUTKForm_Show(pThis->pIUTKForm,TRUE);pThis-〉GamblingStatus = CGAMBLING—STATUS_IDLE;pThis->nDice
= 0;pThis->nDice[l] = 0;pThis->nDice[2] = 0;return SUCCESS;
(5)用戶游戲時,處理用戶交互的處理函數(shù)static int32 CGambling—ICBUTKForm_OnMessage(void *pUser, uint32 ObjID,AEEEventevt,uint16 wParam,uint32 dwParam,uint32 ClientData)
CGamblingApp *pThis = (CGamblingApp *)pUser;
.....................省略部分代碼...................
switch(ObjID)
{
case CGAMBLING—GAMEFORM—ID:switch(wParam)
case AVK—SELECT: 〃按中間OK鍵開始游戲; switch(pThis->GamblingStatus) case CGAMBLING—STATUS—IDLE: if(NULL == pThis->pIRingPlayer)
〃創(chuàng)建鈴聲接口函數(shù);
ISHELL_CreateInstance(pThis->a.m_pIShell,
AMOI—CLSID—I腿GPLAYER, (void* *)&pThis->pIRingPlayer);
if(pThis-〉pGamblingCFG隱〉SoundSetting)
//播放鈴聲,這樣就能模擬骰子的撞擊聲;
IRingPlayer—Play(pThis-〉pIRingPlayer, NULL, PLAY—IMAGEVIEW,
CGAMBLING—GAME—VOICE—PATH, 0);
〃設(shè)置個界面元素的屬性; .......................〃cancel the part code.....................
IUTKForm_SetWidgetParam(pThis->pIUTKForm,WidgetParam.WidgetID,&WidgetParam); IUTKForm—SetWidgetVisible(pThis->pIUTKForm,
CGAMBLING—WIDGET—DICE1—ID,TRUE);
//創(chuàng)建3顆骰子,各初始點數(shù);
GETRAND((byte*)&Dest,sizeof(uint8》; pThis->nDice
= (pThis->nDice
+ Dest % 5 + 1) % 6; GETRAND((byte*)&Dest, sizeof(uint8)); pThis->nDice[l] = (pThis->nDice[l] +Dest % 5 + 1) % 6;GETRAND((byte*)&Dest, sizeof(uint8)); pThis->nDice[2] = (pThis->nDice[2] + Dest % 5 + 1) % 6; 〃利用3個IMAGE—WIDGET來實現(xiàn)3顆骰子的顯示; WidgetParam.WidgetID = CGAMBLING—WIDGET—DICEl—ID;
WidgetParam.u.ImgParam.ImgResID = IDI—PNG—G AMBLING—DICEl + pThis陽〉nDice
; WidgetParam.u.ImgParam.pIImage = NULL;
IUTKForm_SetWidgetParam(pThis->pIUTKForm,WidgetParam.WidgetID,&WidgetParam);
WidgetParam.WidgetID = CGAMBLING—WIDGET—DICE2」D; WidgetParam.u.ImgPar咖.ImgResID = IDI—PNG—GAMBLING—DICEl + pThis->nDice[l]; WidgetParam.u.ImgParam.pIImage = NULL;
IUTKForm—SetWidgetParam(pThis->pIUTKForm,WidgetParam.WidgetID,&WidgetParam);
WidgetPar咖.WidgetID = CGAMBLING—WIDGET—DICE3」D; WidgetParam.u.ImgParam.ImgResID = IDI—PNG—GAMBLING—DICEl + pThis->nDice[2]; WidgetParam.u.ImgParam.pIImage = NULL;
IUTKForm_SetWidgetParam(pThis->pIUTKForm,WidgetParam.WidgetID,&WidgetParam);
pThis->GamblingStatus = CGAMBLING—STATUS—RUNNING; pThis->RunningTimes = 0; 〃通過啟動TIMER來模擬骰子的搖動過程; ISHELL—SetTimer(pThis->a.m_pIShell, 100,
(PFNNOTIFY)CGamblingApp—ICBShell—onTimeOut,pThis);
break;
case CGAMBLING—STATUS—RUNNING: break;
case CGAMBLING—STATUS—RESULT:
〃對搖骰子的最后結(jié)果進(jìn)行顯示,并提示相關(guān)的幸運語句;
IUTKForm一SetWidgetVisible(pThis-〉pIUTKForm,
CGAMBLING—WIDGET—DICE 1一ID,FALSE); IUTKForm一SetWidgetVisible(pThis-〉pIUTKForm,CGAMBLING—WIDGET_DICE2_ID,F(xiàn)ALSE); IUTKForm—SetWidgetVisible(pThis-〉pIUTKForm,
CGAMBLING—WIDGET一DICE3—ID,F(xiàn)ALSE); IUTKForm—SetWidgetVisible(pThis-〉pIUTKForm,
CGAMBLING—WIDGET TEXT—ID,FALSE); WidgetParam.WidgetID = CGAMBLING—WIDGET—BACKGROUND—ID; WidgetParam.u.ImgPar咖.ImgResID = IDI—PNG—GAMBLING—BG—IDLE; WidgetParam.u.ImgParam.pnmage = NULL;
IUTKForm—SetWidgetParam(pThis->pIUTKForm,WidgetParam.WidgetID,&WidgetParam); pThis->GamblingStatus = CGAMBLING—STATUS—IDLE;
break;
return SUCCESS;
(6 )散子的隨機(jī)產(chǎn)生的算法和散子的隨機(jī)顯示機(jī)制 搖骰子游戲里核心的實現(xiàn)在于骰子點數(shù)的隨機(jī)產(chǎn)生,和根據(jù)沒顆骰子的點數(shù)進(jìn)行顯示。 在搖骰子游戲里實現(xiàn)了 3顆骰子,每顆骰子的隨機(jī)點數(shù)按以下算法生成。 GETRAND((byte*)&Dest, sizeof(uint8));
pThis->nDice
= (pThis->nDice
+ Dest % 5 + 1) % 6;〃第一顆骰子點數(shù); GETRAND((byte*)&Dest, sizeof(uint8));
pThis->nDice[l] = (pThis->nDice[l] +Dest % 5 + 1) % 6; 〃第二顆骰子點數(shù); GETRAND((byte*)&Dest, sizeof(uint8));
pThis->nDice[2] = (pThis->nDice[2] + Dest % 5 + 1) % 6; 〃第三顆骰子點數(shù); 由于每顆骰子的最大點數(shù)為6,所以需要6幅圖片來對應(yīng)相應(yīng)的點數(shù)。這樣在通過 BREW架構(gòu)下的WIDGET機(jī)制,就可以實現(xiàn)搖骰子結(jié)果的隨機(jī)顯示。 (7)幸運語句的提示
通過staticwidget來實現(xiàn)提示幸運語句的提示,當(dāng)搖骰子結(jié)果出來后,通過點數(shù)獲得相應(yīng) 的提示文本索引,并由staticwidget來顯示。算法代碼如下 〃獲得點數(shù);
nResult = pThis->nDice
+ pThis->nDice[l] + pThis-〉nDice[2];〃根據(jù)點數(shù)獲得文本ID; WidgetParam.WidgetlD = CGAMBLING—WIDGET—TEXT—ID; WidgetParam.u.TxtParam.TxtResID = T一CGAMBLING—RESULT3 + nResult; WidgetParam.u.TxtParam.pszText = NULL; 〃設(shè)置staticwidget屬性,顯示出相應(yīng)的幸運語句。
lUTKForm—SetWidgetParam(pThis->pIUTKForm,WidgetParam.WidgetID,&WidgetParam);
權(quán)利要求
1. 一種具有搖骰子功能的手機(jī),其特征在于是采用高通CDMA系列芯片方案的CDMA手機(jī),其軟件架構(gòu)采用BREW架構(gòu)。
2. 手機(jī)搖骰子的方法,其特征在于包含以下步驟1) 進(jìn)入游戲菜單界面,選擇搖骰子,按確定鍵啟動搖骰子游戲;2) 在搖骰子游戲界面,按OK鍵啟動骰子的搖動音效和搖動界面;3) 搖骰子游戲應(yīng)用在收到OK鍵事件后,產(chǎn)生骰子的隨機(jī)點數(shù);4) 根據(jù)隨機(jī)點數(shù),產(chǎn)生幸運點數(shù)提示語。
3. 如權(quán)利要求書2所述的手機(jī)搖骰子的方法,其特征在于在步驟2)中,所述的在搖骰 子游戲界面,按OK鍵啟動骰子的搖動音效和搖動界面,其具體步驟如下1) 采用按鍵來模擬手動搖動骰子;2) 采用;MIDI音來模擬搖骰子碰撞骰盅的聲音;3) 采用6張JPEG圖片來模擬顯示骰子的點數(shù)。
4. 如權(quán)利要求書2所述的手機(jī)搖骰子的方法,其特征在于在步驟3)中,所述的產(chǎn)生骰子的隨機(jī)點數(shù)的具體步驟如下采用如下的隨機(jī)算法來產(chǎn)生每顆骰子的點數(shù)GETRAND((byte*)&Dest, sizeof(uint8)); pThis-〉nDice
= (pThis-〉nDice
+ Dest % 5 + 1) % 6。
5. 如權(quán)利要求書2所述的手機(jī)搖骰子的方法,其特征在于在步驟4)中,所述的根據(jù)隨 機(jī)點數(shù),產(chǎn)生幸運點數(shù)提示語的具體步驟為根據(jù)隨機(jī)點數(shù),生成幸運指數(shù)提示語的游戲形
全文摘要
一種具有搖骰子功能的手機(jī)與手機(jī)搖骰子的方法,涉及一種手機(jī)。提供一種增強(qiáng)CDMA手機(jī)娛樂性的具有搖骰子功能的手機(jī)與手機(jī)搖骰子的方法。具有搖骰子功能的手機(jī)是采用高通CDMA系列芯片方案的CDMA手機(jī),其軟件架構(gòu)采用BREW架構(gòu)。進(jìn)入游戲菜單界面,選擇搖骰子,按確定鍵啟動搖骰子游戲;在搖骰子游戲界面,按OK鍵啟動骰子的搖動音效和搖動界面;搖骰子游戲應(yīng)用在收到OK鍵事件后,產(chǎn)生骰子的隨機(jī)點數(shù);根據(jù)隨機(jī)點數(shù),產(chǎn)生幸運點數(shù)提示語。
文檔編號H04M1/725GK101478606SQ20091011095
公開日2009年7月8日 申請日期2009年1月22日 優(yōu)先權(quán)日2009年1月22日
發(fā)明者嚴(yán)易強(qiáng), 余鵬輝, 吳俊清, 唐志評 申請人:廈門市卓易科技有限公司