基于FPGA的M2M异构虚拟化系统(三)
4.3.2.应用程序设计与实现
4.3.2.1.基于MIPS汇编语言的俄罗斯方块游戏设计
开发环境:自己编写的MIPS汇编器AssemblerForRS-232.jar,MIPS汇编语言源文件in.asm,安装jre或jdk并配置好环境变量的windows XP及以上的操作系统。
程序流程:

图 47 俄罗斯方块程序流程图
主要模块:
start函数
参数:无
功能:游戏的主体框架,作用类似main函数
说明:内部调用Tetris、tetris_clr、wait_key、start_enter等函数,构成整个游戏的主体框架。
Tetris函数
参数:无
功能:游戏的逻辑控制主体
说明:调用各种初始化函数、俄罗斯方块的生成函数和运动函数、玩家键盘控制函数、各种信息显示函数,实现游戏的所有逻辑。
ini_boarder函数
参数:无
功能:画俄罗斯方块运行的左右边界
说明:初始化游戏时使用
set_bottom函数
参数:无
功能:画俄罗斯方块运行的下边界
说明:初始化游戏时使用
info函数类
函数类:info_help、info_next、info_fail
参数:无
功能:显示各种信息
说明:在初始化游戏界面时调用info_help显示帮助信息;调用info_next在屏幕左上角显示下一个即将下落的方块的形状和颜色,当游戏失败时调用info_fail提醒玩家。
check_key函数
参数:输出参数$v0和$v1
功能:检查是否有键按下
说明:键盘无键按下时$v0=0;否则$v0=1,$v1=键值
chk_dlt函数
参数:输出参数$v0
功能:检查并删除满行
说明:检测每一行是否已摆满方块,如果摆满则将其删除。返回值$v0为删除的满行数。
detect_collision函数
参数:输出参数$v0
功能:检查是否有方块冲突
说明:如果有冲突则返回$v0=2
null_loop函数
参数:输入参数$a0
功能:空循环,用于延时
说明:$a0=0,表示长延时;$a0=1表示短延时
get_next_seq函数
参数:输入参数$a3、输出参数$v0
功能:根据当前方块的形状,得到下一个方块的形状
说明:输入$a3当前形状的序列号,返回$v0下一个方块的形状的序列号
draw_pic函数类
函数类:pre_draw_pic类、un_pre_draw_pic类、draw_pic类
参数:输入参数$a0和$a2
功能:根据方块现在的位置和接下来的位置来画方块
说明:输入参数$a0是当前位置,$a2是方块将要移动的位置
4.3.2.2.基于C语言的吃豆子游戏设计
开发环境:自己编写的硬件系统模拟器SimulatorForV5.jar,自己编写的内存填充工具MemoryFilling.jar,自己编写的硬件内存分配文件memory.bin,Gcc编译环境,严格的简单的C语言程序源文件user.c,安装jre或jdk并配置好环境变量的windows XP及以上的操作系统。
程序流程:

图 48吃豆子程序流程图
主要模块:
start_game函数
原型:void start_game();
功能:游戏程序的逻辑主函数
说明:控制packman的运动,两个怪物的简单智能移动,检查游戏的终止条件,判断键盘输入并做相应的响应
init_game函数
原型:void init_game();
功能:初始化游戏的全局变量
说明:每次游戏重新开始时,需要调用该函数进行全局变量的初始化
check_catch函数
原型:int check_catch()
功能:检测packman是否被怪物抓到
说明:如果被抓到返回1,否则返回0
check_collision函数
原型:int check_collision()
功能:检测两个怪物是否有冲突
说明:如果有则返回1,否则返回0
评论