GameTemplate.c
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:18k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  * Filename:
  37.  * ---------
  38.  * GameTemplate.c
  39.  *
  40.  * Project:
  41.  * --------
  42.  *   Maui
  43.  *
  44.  * Description:
  45.  * ------------
  46.  *  Game Template function.
  47.  *
  48.  *  EX:  Replace TEMPLATE with SNAKE
  49.  *       Replace templae with snake       
  50.  *       Replace Tamplate with Snake
  51.  *
  52.  * Author:
  53.  * -------
  54.  * -------
  55.  *
  56.  *============================================================================
  57.  *             HISTORY
  58.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  59.  *------------------------------------------------------------------------------
  60.  * removed!
  61.  *
  62.  * removed!
  63.  * removed!
  64.  * removed!
  65.  *
  66.  *------------------------------------------------------------------------------
  67.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  68.  *============================================================================
  69.  ****************************************************************************/
  70. /*******************************************************************************
  71.  *                Game Template Usage Description                    
  72.  *******************************************************************************
  73.  * (1) The Template contains three files.                         
  74.  *    GameTemplate.C", GameTemplateDefs.h, GameTemplateProts.h          
  75.  *
  76.  * (2) Change file names to Xxxxx.c XxxxxDefs.h, XxxxxxProts.h. Xxxxx is game name.
  77.  *                                                          
  78.  * (3) Simply replace the following string with your game name.                     
  79.  *    TEMPLATE with XXXXXX (XXXX is the game name in caption)           
  80.  *    Template with Xxxxxx                                        
  81.  *    template with xxxxxx                                           
  82.  *                                                                
  83.  * (4) Create NVRAM slot in NVRAMEnum.h to store game grade and current game level.
  84.  *    Set those IDs in XXXXX_Enter_GFX( ) where to replace DUMMY_NVRAM_ID.
  85.  *    The grade should be short and index should be byte.
  86.  *
  87.  * (5) Write generate resouce related code in RES_Game.c
  88.  *
  89.  * (6) Add entry point in Game.c
  90.  *
  91.  * (7) Add __MMI_GAME_XXXXXX__ in "MMI_features.h" if you wish to enable this game.
  92.  *
  93.  * (8) Remember to re-generate resource.
  94.  *******************************************************************************/
  95. #ifndef _MMI_GX_TEMPLATE_C
  96. #define _MMI_GX_TEMPLATE_C
  97. #include "MMI_features.h"
  98. #ifdef __MMI_GAME_TEMPLATE__
  99. #include "GameInc.h"
  100. #include "TemplateProts.h"
  101. #include "TemplateDefs.h"
  102. /***************************************************************************** 
  103. * Define
  104. *****************************************************************************/
  105. #define DUMMY_STR_ID    (0)
  106. #define DUMMY_IMG_ID    (0)
  107. #define DUMMY_NVRAM_ID  (0)
  108. /***************************************************************************** 
  109. * Typedef 
  110. *****************************************************************************/
  111. /* game context */
  112. typedef struct
  113. {
  114.     BOOL is_gameover;
  115.     BOOL is_new_game;
  116.     U8 game_level;
  117.     S16 game_grade;
  118.     U16 timer_elapse;
  119. } gx_template_context_struct;
  120. /***************************************************************************** 
  121. * Local Variable
  122. *****************************************************************************/
  123. gx_template_context_struct g_gx_template_context = 
  124. {
  125.     FALSE,  /* is_gameover */
  126.     TRUE,   /* is_new_game */
  127.     0,      /* game_level */
  128.     0,      /* game_grade */
  129.     100     /* timer_elapse */
  130. };
  131. /***************************************************************************** 
  132. * Local Function
  133. *****************************************************************************/
  134. /* Game framework related functions */
  135. S16 mmi_gx_template_calc_best_grade(S16 old_grade, S16 new_grade);      /* descide which is best grade */
  136. void mmi_gx_template_enter_game(void);      /* entry function of the game */
  137. void mmi_gx_template_exit_game(void);       /* exit function - usually will stop timer and release buffer */
  138. void mmi_gx_template_draw_gameover(void);   /* draw gameover screen */
  139. /* Game play functions */
  140. void mmi_gx_template_framemove(void);
  141. void mmi_gx_template_render(void);
  142. void mmi_gx_template_gameover(void);
  143. void mmi_gx_template_cyclic_timer(void);
  144. void mmi_gx_template_init_game(void);   /* draw gameover screen */
  145. /*****************************************************************************
  146.  * FUNCTION
  147.  *  mmi_gx_template_enter_gfx
  148.  * DESCRIPTION
  149.  *  Set Game Framework (GFX) Parameter
  150.  * PARAMETERS
  151.  *  void
  152.  * RETURNS
  153.  *  void
  154.  *****************************************************************************/
  155. void mmi_gx_template_enter_gfx(void)
  156. {
  157.     /*----------------------------------------------------------------*/
  158.     /* Local Variables                                                */
  159.     /*----------------------------------------------------------------*/
  160.     /*----------------------------------------------------------------*/
  161.     /* Code Body                                                      */
  162.     /*----------------------------------------------------------------*/
  163.     /* Game menu */
  164.     GFX.game_data.game_img_id = IMG_ID_GX_TEMPLATE_GAME_ICON;   /* game icon img ID */
  165.     GFX.game_data.game_str_id = STR_ID_GX_TEMPLATE_GAME_NAME;   /* game name string ID */
  166.     GFX.game_data.menu_resume_str_id = STR_ID_GX_TEMPLATE_RESUME;       /* "Resume" string ID */
  167.     GFX.game_data.menu_new_str_id = STR_ID_GX_TEMPLATE_NEW; /* "New Game" string ID */
  168.     GFX.game_data.menu_level_str_id = STR_ID_GX_TEMPLATE_LEVEL; /* "Game Level" string ID */
  169.     GFX.game_data.menu_grade_str_id = STR_ID_GX_TEMPLATE_SCORE; /* "Best Grade" string ID */
  170.     GFX.game_data.menu_help_str_id = STR_ID_GX_TEMPLATE_HELP;   /* "Game Help" string ID */
  171.     /* level / grade */
  172.     GFX.game_data.level_count = 3;  /* how many levels */
  173.     GFX.game_data.level_str_id_list[0] = STR_ID_GX_TEMPLATE_LEVEL_EASY; /* level string ID */
  174.     GFX.game_data.level_str_id_list[1] = STR_ID_GX_TEMPLATE_LEVEL_NORMAL;       /* level string ID */
  175.     GFX.game_data.level_str_id_list[2] = STR_ID_GX_TEMPLATE_LEVEL_HARD; /* level string ID */
  176.     /* add slot in NVRAMEnum.h */
  177.     GFX.game_data.grade_nvram_id_list[0] = DUMMY_NVRAM_ID;  /* grade slot in NVRAM (short) */
  178.     GFX.game_data.grade_nvram_id_list[1] = DUMMY_NVRAM_ID;  /* grade slot in NVRAM */
  179.     GFX.game_data.grade_nvram_id_list[2] = DUMMY_NVRAM_ID;  /* grade slot in NVRAM */
  180.     GFX.game_data.level_nvram_id = DUMMY_NVRAM_ID;          /* current lvl idnex  in NVRAM (byte) */
  181.     /* help */
  182.     GFX.game_data.help_str_id = STR_ID_GX_TEMPLATE_HELP_DESCRIPTION;    /* help desciption string id */
  183.     /* misc */
  184.     GFX.game_data.grade_value_ptr = (S16*) (&g_gx_template_context.game_grade);        /* current level's grade (S16*) */
  185.     GFX.game_data.level_index_ptr = (U8*) (&g_gx_template_context.game_level); /* ptr to current level index (U8*) */
  186.     GFX.game_data.is_new_game = (BOOL*) (&g_gx_template_context.is_new_game);  /* ptr to new game flag (BOOL*) */
  187.     /* function ptr */
  188.     GFX.game_data.best_grade_func_ptr = mmi_gx_template_calc_best_grade;        /* function to calculate best grade */
  189.     GFX.game_data.enter_game_func_ptr = mmi_gx_template_enter_game;     /* function to enter new game */
  190.     GFX.game_data.exit_game_func_ptr = mmi_gx_template_exit_game;       /* function to exit game */
  191.     GFX.game_data.draw_gameover_func_ptr = mmi_gx_template_draw_gameover;       /* function to draw gameover screen */
  192.     /* some flags */
  193.     GFX.game_data.is_keypad_audio_enable = FALSE;   /* play keypad tone or not */
  194.     mmi_gfx_entry_menu_screen();
  195. }
  196. /*****************************************************************************
  197.  * FUNCTION
  198.  *  mmi_gx_template_calc_best_grade
  199.  * DESCRIPTION
  200.  *  Calculate new best grade [Callback required by GFX]
  201.  * PARAMETERS
  202.  *  old_grade       [IN]        
  203.  *  new_grade       [IN]        
  204.  * RETURNS
  205.  *  void
  206.  *****************************************************************************/
  207. S16 mmi_gx_template_calc_best_grade(S16 old_grade, S16 new_grade)
  208. {
  209.     /*----------------------------------------------------------------*/
  210.     /* Local Variables                                                */
  211.     /*----------------------------------------------------------------*/
  212.     /*----------------------------------------------------------------*/
  213.     /* Code Body                                                      */
  214.     /*----------------------------------------------------------------*/
  215.     /* compare the best grade and return it */
  216.     return 0;
  217. }
  218. /*****************************************************************************
  219.  * FUNCTION
  220.  *  mmi_gx_template_draw_gameover
  221.  * DESCRIPTION
  222.  *  Draw Gameover Screen [Callback required by GFX]
  223.  * PARAMETERS
  224.  *  void
  225.  * RETURNS
  226.  *  void
  227.  *****************************************************************************/
  228. void mmi_gx_template_draw_gameover(void)
  229. {
  230.     /*----------------------------------------------------------------*/
  231.     /* Local Variables                                                */
  232.     /*----------------------------------------------------------------*/
  233.     /*----------------------------------------------------------------*/
  234.     /* Code Body                                                      */
  235.     /*----------------------------------------------------------------*/
  236. }
  237. /*****************************************************************************
  238.  * FUNCTION
  239.  *  mmi_gx_template_enter_game
  240.  * DESCRIPTION
  241.  *  Enter Game [Callback required by GFX]
  242.  * PARAMETERS
  243.  *  void
  244.  * RETURNS
  245.  *  void
  246.  *****************************************************************************/
  247. void mmi_gx_template_enter_game(void)
  248. {
  249.     /*----------------------------------------------------------------*/
  250.     /* Local Variables                                                */
  251.     /*----------------------------------------------------------------*/
  252.     /*----------------------------------------------------------------*/
  253.     /* Code Body                                                      */
  254.     /*----------------------------------------------------------------*/
  255.     if (g_gx_template_context.is_new_game == TRUE)
  256.     {
  257.         mmi_gx_template_init_game();    /* is new game, otherwise resume game */
  258.     }
  259.     g_gx_template_context.is_new_game = FALSE;
  260.     g_gx_template_context.is_gameover = FALSE;
  261.     /* start game loop */
  262.     mmi_gx_template_cyclic_timer();
  263. }
  264. /*****************************************************************************
  265.  * FUNCTION
  266.  *  mmi_gx_template_exit_game
  267.  * DESCRIPTION
  268.  *  Exit Game [Callback required by GFX]
  269.  * PARAMETERS
  270.  *  void
  271.  * RETURNS
  272.  *  void
  273.  *****************************************************************************/
  274. void mmi_gx_template_exit_game(void)
  275. {
  276.     /*----------------------------------------------------------------*/
  277.     /* Local Variables                                                */
  278.     /*----------------------------------------------------------------*/
  279.     /*----------------------------------------------------------------*/
  280.     /* Code Body                                                      */
  281.     /*----------------------------------------------------------------*/
  282.     gui_cancel_timer(mmi_gx_template_cyclic_timer); /* cancle the looping timer */
  283. }
  284. /*****************************************************************************
  285.  * FUNCTION
  286.  *  mmi_gx_template_init_game
  287.  * DESCRIPTION
  288.  *  Game initilization
  289.  * PARAMETERS
  290.  *  void
  291.  * RETURNS
  292.  *  void
  293.  *****************************************************************************/
  294. void mmi_gx_template_init_game(void)
  295. {
  296.     /*----------------------------------------------------------------*/
  297.     /* Local Variables                                                */
  298.     /*----------------------------------------------------------------*/
  299.     /*----------------------------------------------------------------*/
  300.     /* Code Body                                                      */
  301.     /*----------------------------------------------------------------*/
  302.     /* init game here */
  303. }
  304. /*****************************************************************************
  305.  * FUNCTION
  306.  *  mmi_gx_template_framemove
  307.  * DESCRIPTION
  308.  *  Framemove - process the game logic
  309.  * PARAMETERS
  310.  *  void
  311.  * RETURNS
  312.  *  void
  313.  *****************************************************************************/
  314. void mmi_gx_template_framemove(void)
  315. {
  316.     /*----------------------------------------------------------------*/
  317.     /* Local Variables                                                */
  318.     /*----------------------------------------------------------------*/
  319.     /*----------------------------------------------------------------*/
  320.     /* Code Body                                                      */
  321.     /*----------------------------------------------------------------*/
  322.     /* add logic code here */
  323. }
  324. /*****************************************************************************
  325.  * FUNCTION
  326.  *  mmi_gx_template_render
  327.  * DESCRIPTION
  328.  *  Render the game images
  329.  * PARAMETERS
  330.  *  void
  331.  * RETURNS
  332.  *  void
  333.  *****************************************************************************/
  334. void mmi_gx_template_render(void)
  335. {
  336.     /*----------------------------------------------------------------*/
  337.     /* Local Variables                                                */
  338.     /*----------------------------------------------------------------*/
  339.     /*----------------------------------------------------------------*/
  340.     /* Code Body                                                      */
  341.     /*----------------------------------------------------------------*/
  342.     /* add drawing code here */
  343.     gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
  344. }
  345. /*****************************************************************************
  346.  * FUNCTION
  347.  *  mmi_gx_template_gameover
  348.  * DESCRIPTION
  349.  *  Gameover function
  350.  * PARAMETERS
  351.  *  void
  352.  * RETURNS
  353.  *  void
  354.  *****************************************************************************/
  355. void mmi_gx_template_gameover(void)
  356. {
  357.     /*----------------------------------------------------------------*/
  358.     /* Local Variables                                                */
  359.     /*----------------------------------------------------------------*/
  360.     /*----------------------------------------------------------------*/
  361.     /* Code Body                                                      */
  362.     /*----------------------------------------------------------------*/
  363.     g_gx_template_context.is_gameover = TRUE;
  364.     g_gx_template_context.is_new_game = TRUE;
  365.     /* call this function to draw gameover screen */
  366.     mmi_gfx_entry_gameover_screen();
  367. }
  368. /*****************************************************************************
  369.  * FUNCTION
  370.  *  mmi_gx_template_cyclic_timer
  371.  * DESCRIPTION
  372.  *  Timer trigger function - looping
  373.  * PARAMETERS
  374.  *  void
  375.  * RETURNS
  376.  *  void
  377.  *****************************************************************************/
  378. void mmi_gx_template_cyclic_timer(void)
  379. {
  380.     /*----------------------------------------------------------------*/
  381.     /* Local Variables                                                */
  382.     /*----------------------------------------------------------------*/
  383.     /*----------------------------------------------------------------*/
  384.     /* Code Body                                                      */
  385.     /*----------------------------------------------------------------*/
  386.     gui_start_timer(g_gx_template_context.timer_elapse, mmi_gx_template_cyclic_timer);
  387.     if (g_gx_template_context.is_gameover == FALSE)
  388.     {
  389.         mmi_gx_template_framemove();
  390.         mmi_gx_template_render();
  391.     }
  392. }
  393. #endif /* __MMI_GAME_TEMPLATE__ */ 
  394. #endif /* _MMI_GX_TEMPLATE_C */