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.h,MMI_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 按键2,4,6,8事件处理
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 框架函数
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮