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

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 puzzlepuzzle_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                        指定范围内填充为某一颜色

   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 指定行数,列数,颜色画一个方块

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            
填充颜色
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                    框架函数

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值