⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 games_fruit.c

📁 几个嵌入式手机平台小游戏c源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -