MTK平台-俄罗斯方块游戏移植流程(傻瓜式)

2019-07-14 11:22发布

MTK平台-俄罗斯方块游戏移植流程     (一) 1.1 添加字符串,在ref_list.txt中添加一个字段
  
 STR_ID_GX_BLOCK_GAME_NAME 1.2 增加BlockHead.h,包含必要的头文件和申明 STR_ID_GX_BLOCK_GAME_NAME = GAME_BLOCK_BASE + 1 IMG_ID_GX_BLOCK_GAME_ICON = GAME_BLOCK_BASE + 1 extern void mmi_gx_block_enter_gfx(void)
1.3
增加Block.c 包含必要的头文件和申明 extern void mmi_gx_block_enter_gfx(void){ } 1.4 使增加的Block.c文件能被编译器找到,在plutommi.lis添加 plutommi/mmi/FunAndGames/FunAndGamesSrc/Block.c 1.5 使增加的BlockHead.h文件能被编译器找到,在Readexcel.c添加 #ifdef IS_BLOCK_BASE_GAME #include "BlockHead.h" #endif /* IS_BLOCK_BASE_GAME */
1.6
定义一个宏,在GameDefs.h中添加 #if defined(__MMI_GAME_BLOCK_240x320__) #define IS_BLOCK_BASE_GAME #endif #ifdef IS_BLOCK_BASE_GAME     game_block, #endif #define GAME_BLOCK_BASE               GAME_BASE + 1600    
1.7 定义另一个宏 MMI_featuresPLUTO.hMMI_features.h中添加        #define __MMI_GAME_BLOCK_240x320__     
1.8
使字符串和图标能被应用 Res_Game.c中添加 #include "BlockHead.h" void PopulateBlockRes(void){ } ADD_APPLICATION_STRING2(STR_ID_GX_BLOCK_GAME_NAME,                        "Block",        "Block Game Name");        #defineBLOCK_IMG_PATH CUST_IMG_BASE_PATH"////GameImages//// puzzle////puzzle_240x320_puzzle////"  
ADD_APPLICATION_IMAGE2(IMG_ID_GX_BLOCK_3_1,                                  BLOCK_IMG_PATH"gx_block_3_1.gif",      " Block");      
#ifdef IS_BLOCK_BASE_GAME
PopulateBlockRes(); #endif /* IS_BLOCK_BASE_GAME */ 1.9 在游戏菜单下增加一个子菜单 Game.c中添加 #ifdef IS_BLOCK_BASE_GAME #include "BlockHead.h" #endif /* IS_BLOCK_BASE_GAME */ #ifdef IS_BLOCK_BASE_GAME     menu_str[index] = STR_ID_GX_BLOCK_GAME_NAME;     menu_img[index++] = IMG_ID_GX_BLOCK_GAME_ICON; #endif /* IS_BLOCK_BASE_GAME */        #ifdef IS_BLOCK_BASE_GAME             GAME_SWITCH(game_block, mmi_gx_block_enter_gfx); #endif   ()点击进入游戏能出现一个什么都没有的背景图
 
    (以下均在block.c文件中作修改)
2.1 增加入口函数
    
void mmi_gx_block_enter_gfx()        函数内对全局结构体GFX进行初始化     GFX.game_data.best_grade_func_ptr = mmi_gx_block_calc_best_grade;     GFX.game_data.enter_game_func_ptr = mmi_gx_block_enter_game;     GFX.game_data.exit_game_func_ptr = mmi_gx_block_exit_game;     GFX.game_data.draw_gameover_func_ptr = mmi_gx_block_draw_gameover;
2.2 增加4个框架回调函数(系统会自动通过GFX的指针隐式调用) S16 mmi_gx_block_calc_best_grade()     计算最高分数 返回值会被系统自动保存 void mmi_gx_block_enter_game(void)     进入游戏主函数 void mmi_gx_block_exit_game(void)      退出游戏函数 void mmi_gx_block_draw_gameover(void)  游戏结束函数 2.3 在主函数mmi_gx_block_enter_game中增加画背景图的函数    mmi_gx_block_draw_static_background ();  画静态背景图   mmi_gx_block_cyclic_timer();            时间循环(该函数也必须有,原因待定)
()将背景图进行窗口划分,分出一个160x320游戏窗口   3.1 mmi_gx_block_draw_static_background中增加画背景图的函数      gui_fill_rectangle                        指定范围内填充为某一颜 {MOD}    gui_draw_vertical_line                   指定长度画垂直线
gui_show_image                        指定左上角坐标画图片
()对游戏结束进行处理,加一个支持触屏的返回绿键   4.1 增加mmi_gx_block_gameover,重新初始化游戏参数,结束时手动调用     游戏结束后不会没有反应 4.2 增加mmi_gx_block_draw_gameover,游戏结束时系统自动调用     游戏结束后不会进入白屏 4.3 增加mmi_block_pen_down_hdlr,在主函数中调用 绿键按下时被调用(触屏有效) 4.4 增加mmi_block_pen_up_hdlr  在主函数中调用
绿键弹起时被调用(触屏有效)   ()使背景图能显示方框   5.1 增加mmi_gx_block_show_block画方块的函数,并在主函数中调用
 ()最后一步,方块能动能消 6.1 判断是否需要一个新方块     mmi_gx_block_need_new_block 6.2 产生一个新方块           在最上面一行的居中位置产生     mmi_gx_block_new_block 6.3 消除一行方块 mmi_gx_block_kill_full_line 6.4 指定行数,列数,颜 {MOD}画一个方块 void mmi_gx_block_draw_one_block(int row,int column,int BlockStyle); 6.5 隐去一个方块   mmi_gx_block_erase_block方块从A移动到B时,应该把原位置A处方块隐去 6.6 刷新窗口刷新所有方块 mmi_gx_block_refresh_block 6.7 左移,右移,下移,变形 mmi_gx_block_move_block            指定起始和结束位置移动方块
mmi_gx_block_key_2_release(void);    
向上或2 mmi_gx_block_key_4_release(void);     向左或4  mmi_gx_block_key_6_release(void);     向右或6  mmi_gx_block_key_8_release(void);     向下或8,按键触发调用的函数可加速 mmi_gx_block_move_block_down       向下移    定时自动下移调用的函数 6.8 判断游戏是否可以移动 mmi_gx_block_can_move_down mmi_gx_block_can_move_right mmi_gx_block_can_move_left 6.9 判断游戏是否结束 mmi_gx_block_is_game_over       6.10可移动标记置为FALSE mmi_gx_block_is_not_moveable  当方块移动到最下面一行时,将Flag_Is_Moveable标记置为FALSE

().使用的部分函数

(一)            主入口函数 mmi_gx_block_enter_gfx 总共调用4个内部函数和1个外部函数,此外还有对结构体GFX赋初值 1.      mmi_gx_block_enter_game(6)   进入游戏    à6表示含有6个子函数

调用了5个内部函数和1个外部函数 1.1    mmi_gx_block_init_game           初始化游戏参数
1.1.1 gui_show_image             
画图片
1.1.2 gui_BLT_double_buffer      
刷新屏幕
1.2    mmi_gx_block_key_x_release         按键2468事件处理
1.2.1 RotateStyleZero              
方块0变形
1.2.2 RotateStyleOne               
方块1变形
1.2.3 RotateStyleTwo               
方块2变形
1.2.4 RotateStyleThree             
方块3变形
1.2.5 RotateStyleFour              
方块4变形
1.2.6 RotateStyleFive              
方块5变形
1.2.7 RotateStyleSix               
方块6变形
1.2.8 mmi_gx_block_move_block       
移动方块
1.2.9 mmi_gx_block_draw_one_block   
指定位置画一个方块
1.2.10mmi_gx_block_erase_block      
隐去一个方块
1.2.11mmi_gx_block_can_move_down    
方块能否下移
1.2.10mmi_gx_block_can_move_left   
方块能否下移
1.2.11mmi_gx_block_can_move_right  
方块能否下移
1.2.12mmi_gx_block_is_not_moveable 
不能再下移了
1.3    mmi_gx_block_draw_static_background  画静态背景
1.3.1 mmi_gx_block_show_grade       
显示得分
1.3.2 gui_fill_rectangle            
填充颜 {MOD}
1.3.3 gui_draw_vertical_line        
画水平线
1.3.4 gui_draw_horizontal_line      
画垂直线
1.3.5 gdi_image_draw_id             
根据id画图
1.3.6 gui_show_image                
画图
1.4    mmi_gx_block_refresh_block           刷新方块   1.5    mmi_gx_block_cyclic_timer            时间循环
1.5.1
gui_start_timer                回调函数循环计时
1.5.2 mmi_gx_block_framemove         

1.5.3 mmi_gx_block_render           
控制循环显示方块
  1.5.1 mmi_gx_block_need_new_block 
需要新方块
  1.5.2 mmi_gx_block_kill_full_line 
删除一行
  1.5.3 mmi_gx_block_is_game_over   
游戏是否结束
  1.5.4 mmi_gx_block_gameover       
游戏结束
  1.5.5 mmi_gx_block_new_block      
产生新方块
  1.5.6 mmi_gx_block_can_move_down  
能下移
  1.5.7 mmi_gx_block_move_block_down
向下移动
  1.5.8 mmi_gx_block_is_not_moveable 
可移动标签置0
2.      mmi_gx_block_exit_game                       退出游戏函数 3.      mmi_gx_block_calc_best_grade                 最佳排行 4.      mmi_gx_block_draw_gameover                   游戏结束 5.      mmi_gfx_entry_menu_screen                    框架函数