📄 games_fruit.c
字号:
#ifdef __cplusplus
extern "C" {
#endif
/*==================================================================================================
MODULE NAME : module-filename.c
GENERAL DESCRIPTION
General description of this grouping of functions.
TECHFAITH Telecom Confidential Proprietary
(c) Copyright 2002 by TECHFAITH Telecom Corp. All Rights Reserved.
====================================================================================================
Revision History
Modification Tracking
Date Author Number Description of changes
---------- -------------- --------- -----------------------------------------------------------------------------------
MM/DD/YYYY name of author crxxxxx Brief description of changes made
03/16/2004 caoyanqing c003008 create fruit_game app
05/08/2004 caoyanqing p005277 Modify some bugS for dolphin.
02/06/2004 caoyanqing p005859 fix the bug
the initial score isnot zero
06/07/2004 caoyanqing p006038 fix bugs
06/09/2004 lixingbo p006042 Modify some bugs for dolphin.
06/12/2004 caoyanqing p006135 fix bugs
06/18/2004 caoyanqing p006280 fix bugs
09/14/2004 caoyanqing p007346 The interface display has problem when the fruit game is over after the screen is blackened.
Self-documenting Code
Describe/explain low-level design of this module and/or group of funtions and/or specific
funtion that are hard to understand by reading code and thus requires detail description.
Free format !
====================================================================================================
INCLUDE FILES
==================================================================================================*/
#include "APP_include.h"
#include "MENU_main.h"
#include "GAMES_main.h"
#ifdef GAMES_FRUIT
#include <stdlib.h>
#include "uhapi.h"
#include "SP_volume.h"
#include "SP_audio.h"
#include "GAMES_highscore.h"
#include "GAMES_fruit.h"
#include "Rm_resource_manager.h"
/*==================================================================================================
LOCAL FUNCTION PROTOTYPES
==================================================================================================*/
static OP_UINT16 Rand_Create(void);
static void APP_Fruit_Init(void);
static void Whole_Find(OP_UINT16 *cxp,OP_UINT16 *cyp,OP_UINT16 * countp);
static OP_UINT16 CalculateScore(OP_UINT16 thiscount, OP_UINT16 temp_type);
static void Paint(void);
static void DrawSquare(OP_UINT16 col,OP_UINT16 line, OP_UINT16 state);
static void drawDigit(OP_INT16 wInteger,OP_UINT16 x, OP_UINT16 y);
static void DisplayScore(OP_INT16 wInteger,OP_UINT16 x, OP_UINT16 y);
static void ShowScore(void);
static OP_BOOLEAN penDown(OP_UINT16 x, OP_UINT16 y);
static void Fruit_TIMER(void);
static void Find_Firstpress_Fruit(void);
static void End_Hint(void);
static void Fruit_Timer_Pen(void);
static OP_BOOLEAN Init_Eliminate(void);
/*==================================================================================================
LOCAL CONSTANTS
==================================================================================================*/
#define FRUITNEWGAME_LINE_NUM 8
#define FRUITNEWGAME_COLUMN_NUM 8
#define FRUITNEWGAME_GREEN_PUTAO 1
#define FRUITNEWGAME_GREEN_YINGTAO 2
#define FRUITNEWGAME_GREEN_JUZI 3
#define FRUITNEWGAME_GREEN_LIZI 4
#define FRUITNEWGAME_GREEN_XIGUA 5
#define FRUITNEWGAME_GREEN_CHAOMEI 6
#define FRUITNEWGAME_GREEN_APPLE 7
#define FRUITNEWGAME_GREEN_SCORE 8
#define FRUITNEWGAME_BACKGROUND 9
#define FRUITNEWGAME_BLUE_PUTAO 11
#define FRUITNEWGAME_BLUE_YINGTAO 12
#define FRUITNEWGAME_BLUE_JUZI 13
#define FRUITNEWGAME_BLUE_LIZI 14
#define FRUITNEWGAME_BLUE_XIGUA 15
#define FRUITNEWGAME_BLUE_CHAOMEI 16
#define FRUITNEWGAME_BLUE_APPLE 17
#define FRUITNEWGAME_PRESS_PUTAO 21
#define FRUITNEWGAME_PRESS_YINGTAO 22
#define FRUITNEWGAME_PRESS_JUZI 23
#define FRUITNEWGAME_PRESS_LIZI 24
#define FRUITNEWGAME_PRESS_XIGUA 25
#define FRUITNEWGAME_PRESS_CHAOMEI 26
#define FRUITNEWGAME_PRESS_APPLE 27
#define SQUAREWIDTH 22
#define SQUAREHEIGHT 20
#define FRUIT_BG_COLOR COLOR_YELLOW_DEEP
#define MAX_STRING_LENGTH 100
#define MAX_CONCURRENT_FRUITS 4
/*==================================================================================================
LOCAL TYPEDEFS - Structure, Union, Enumerations...etc
==================================================================================================*/
typedef struct fruitnewgame_state
{
OP_UINT16 Difficulty;
OP_UINT16 Remain_operand;
OP_UINT16 Clearance_time;
}FRUITNEWGAME_STATE;
/*==================================================================================================
LOCAL MACROS
==================================================================================================*/
/*
* description of this macro, if needed. - Remember self documenting code
*/
/*==================================================================================================
LOCAL VARIABLES
==================================================================================================*/
static FRUITNEWGAME_STATE Fgame_state;
static OP_UINT16 fruitnewgame_position[FRUITNEWGAME_COLUMN_NUM+1][FRUITNEWGAME_LINE_NUM+1];
static OP_UINT16 exch_resu[4] ;
static OP_UINT16 exchange_xi[2];
static OP_UINT16 exchange_yj[2];
static OP_UINT16 fruit_temp[2];
static OP_UINT16 hint_temp1=0;
static OP_UINT16 hint_temp2=0;
static OP_BOOLEAN line_blinkflag;
static OP_BOOLEAN column_blinkflag;
static OP_BOOLEAN second_press_flag=OP_FALSE;
static OP_BOOLEAN blinkflag;
static OP_BOOLEAN st_hint_flag;
static OP_BOOLEAN inGame;
static OP_BOOLEAN gamePause;
static OP_INT16 fruitnewgame_Score;
static OP_UINT16 timer_num=0;
static OP_UINT16 whole_find_flag=0;
static OP_UINT16 xoffset;
static OP_UINT16 yoffset;
static OP_UINT16 interval;
static OP_UINT16 st_hint_xi;
static OP_UINT16 st_hint_yj;
static OP_UINT16 st_time;
static RM_SOUND_ID_T sound_list[]=
{
RES_SOUND_0009, /* Fruits's opening song */
RES_SOUND_0011, /* sound of eating */
RES_SOUND_0012, /* sound of hinting */
RES_SOUND_0009 /* game over */
};
/*==================================================================================================
GLOBAL VARIABLES
==================================================================================================*/
extern APP_GAMES_STRUCTURE_NAME_T gamesApp_data;
extern APP_SUBSTATE_STRUCTURE_NAME_T games_substate;
/*==================================================================================================
LOCAL FUNCTIONS
==================================================================================================*/
/*==================================================================================================
FUNCTION: APP_Fruit_entry
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
void APP_Fruit_entry(void)
{
ds_set_screen_mode(SCREEN_GENERAL);
gamesApp_data.popupwin=OP_NULL;
srand( op_get_cur_tod()); /* set the seed for rand() */
APP_Fruit_Init();
}
/*==================================================================================================
FUNCTION: App_Fruit_exit
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
void App_Fruit_exit(void)
{
close_old_popup();
ds_set_softkeys_rm(PMPT_SKEY_EMPTY, PMPT_SKEY_EMPTY, PMPT_SKEY_EMPTY);
SP_Audio_stop();
SP_wakeup_lcd_sleep();
OPUS_Stop_Timer(OPUS_TIMER_GAME_TIMING);
OPUS_Stop_Timer(OPUS_TIMER_GAME_PEN);
}
/*==================================================================================================
FUNCTION: app_Fruit_handler
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
void App_Fruit_handler
(
OPUS_EVENT_ENUM_TYPE event,
void *pMess,
OP_BOOLEAN *handle
)
{
TP_PEN_EVENT_STRUCTURE_T *pPen;
KEYEVENT_STRUCT *pKey;
TPO_OPERATION_PARAM_STRUCTURE_T * pOperation_param;
*handle = OP_TRUE;
switch (event)
{
case OPUS_FOCUS_CUST_PAINT :
if ( (pMess != OP_NULL) && (*((OP_BOOLEAN *)pMess) == OP_TRUE))
{
if (ds_get_screen_mode() != SCREEN_GENERAL)
ds_set_screen_mode( SCREEN_GENERAL);
gamePause=OP_FALSE;
ds_set_softkeys_rm( PMPT_SKEY_EMPTY,PMPT_SKEY_EMPTY, PMPT_SKEY_BACK);
Paint();
if(second_press_flag==OP_TRUE)
{
OPUS_Start_Timer(OPUS_TIMER_GAME_PEN, 500, 0, PERIODIC);
}
else
{
OPUS_Start_Timer(OPUS_TIMER_GAME_TIMING, interval, 0, PERIODIC);
}
TPO_SetCurrent_RPU(TPO_RUI_GAMES);
}
ds_refresh();
break;
case OPUS_TIMER_GAME_TIMING:
if (!gamePause && inGame)
{
Fruit_TIMER();
}
break;
case OPUS_TIMER_GAME_PEN:
if (!gamePause && inGame)
{
timer_num++;
Fruit_Timer_Pen();
}
break;
case OPUS_TIMER_POPUP_MSG:
if (gamesApp_data.popupwin != OP_NULL)
{
close_old_popup();
}
Games_change_state((OP_UINT8) APP_GAMES_STATE_MENU);
break;
case OPUS_FOCUS_CUST_APP_PAUSE:
gamePause=OP_TRUE;
OPUS_Stop_Timer(OPUS_TIMER_GAME_TIMING);
OPUS_Stop_Timer(OPUS_TIMER_GAME_PEN);
if (gamesApp_data.popupwin!= OP_NULL)
{
close_old_popup();
Games_change_state((OP_UINT8) APP_GAMES_STATE_MENU);
}
break;
case OPUS_FOCUS_KEYPAD :
pKey = (KEYEVENT_STRUCT *)pMess;
if(pKey->state == UHKEY_RELEASE)
break;
switch(pKey->code)
{
case KEY_SIDE_UP:
SP_Audio_stop();
if (gamesApp_data.volume < VOLUME_LEVEL_SIZE-1)
{
gamesApp_data.volume++;
}
break;
case KEY_SIDE_DOWN:
SP_Audio_stop();
if (gamesApp_data.volume > 0)
{
gamesApp_data.volume--;
}
break;
default:
break;
}
op_debug(DEBUG_MED,"ok!!!key pressed.");
break;
case OPUS_FOCUS_PEN :
pPen = pMess;
if(TP_PEN_STATE_PENDN == pPen->state
&& pPen->y <= SQUAREHEIGHT*9
&& pPen->y>=SQUAREHEIGHT*1)
{
penDown((OP_INT16)((pPen->x-xoffset)/SQUAREWIDTH),(OP_INT16)(((FRUITNEWGAME_LINE_NUM+1)*SQUAREHEIGHT-pPen->y)/SQUAREHEIGHT));
}
op_debug(DEBUG_MED,"App_Fruit_handler:OPUS_FOCUS_PEN has come!");
break;
case OPUS_FOCUS_OPERATION:
pOperation_param = (TPO_OPERATION_PARAM_STRUCTURE_T *)pMess;
switch (pOperation_param->op)
{
case OPERATION_ID_SK_CONFIRM:
{
switch(pOperation_param->id)
{
case COMMAND_SOFTKEY_OK:
break;
case COMMAND_SOFTKEY_RIGHT:
Games_change_state((OP_UINT8) APP_GAMES_STATE_MENU);
break;
default:
break;
}
}
break;
default:
break;
}
break;
default :
*handle = OP_FALSE;
break;
}
}
/*==================================================================================================
FUNCTION: APP_Fruit_Init
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static void APP_Fruit_Init(void)
{
OP_UINT16 i,j;
OP_BOOLEAN rc=OP_TRUE;
second_press_flag=OP_FALSE;
timer_num = 0;
line_blinkflag=OP_FALSE;
column_blinkflag=OP_FALSE;
fruitnewgame_Score=0;
blinkflag=OP_FALSE;
xoffset=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -