随着大数据分析应用不断发展
BI已经渗透到各行各业
而提到BI工具能做什么
大家首先想到的肯定是这样的分析报告
这样的炫酷大屏
还有中国式复杂报表
或者移动端报告
BI经常用来做大数据分析,处理TB、PB级数据秒级响应。可是,你能想到吗?BI工具居然可以做游戏。让我们来欣赏一下这一款经典重置版游戏,它就是YonghongBI版贪吃蛇。
有没有迫不及待想玩一把,下面就跟随我们先来体验一下。
这次发挥不佳,重来一次。
好吧,说了这么多,玩了这么多,这款游戏是怎么用BI工具做出来的呢?这一切要归功于YonghongBI支持强大的JS脚本,基于JS脚本可以做到很多复杂功能,达到超出预期的体验效果。让我们看一下YonghongBI版贪吃蛇写了多少代码。
对,只用了这么多代码就完成了一个游戏开发。如果你还是觉得代码太多了,没问题。YonghongBI的函数都可以支持封装,常用的函数封装好之后分析人员只需要去调用就行,所以只需要调用一行代码就可以了。
那YonghongBI的JS脚本是怎么用的呢?在制作报告页面,点击-【脚本】,这样就进入编辑页面了。
进入编辑页面后,脚本分为装载时运行和变化时运行,装载时运行是报表打开时执行,而变化时运行则是报表页面有变化才执行。
这里需要说的是,许多仪表盘环境需要动态定制仪表盘和实现自定义业务逻辑。这些需求包含从创建查询字段到建立脚本查询,从修改文本颜色到控制用户交互行为,从添加计算器到控制表格渲染等。而YonghongZ-Suite有一套完整的脚本环境体系,以支持用户的各种动态需求。脚本体系是YonghongZ-Suite 产品中使用面较广的功能, 可以让用户自己定制化一些高级需求, 这也是决定产品是否强大的一个重要模块。脚本系统是通过javascript的语言标准来支持的,脚本环境可以完全访问组件的绑定、属性以及数据的输入。可以在仪表盘初始化的时候执行任务,处理用户交互行为。
不仅如此,YonghongBI强大的脚本还可以实现多种动态效果,例如提示框的轮播。
附YonghongBI版贪吃蛇游戏代码:
param['pause']='f'
param['start']='f'
param['times']+=1
组1.visible = false
}
score.data = param['score'] //得分文本框显示实时分数值
high_score.data=param['high_score'] //最高分文本框显示最高分数值
var color = new Color(6,169,190) //定义蛇身蓝色
color_str = toString(color)
var color2 = new Color(java.awt.Color.WHITE) //定义其他区域白色
var color3 = new Color(java.awt.Color.RED) //定义食物点为红色
var c3 = ''+param['eat_j']+','+param['eat_i']
var loc3 = new Locator([c3],CELL,DETAIL);
table1.setBackground(loc3,color3);
if(param['restart']=='y'||param['restart']=='n'){
snake = param['snake'].split('|')
for(i=0;i<snake.length;i++){
c = snake
loc = new Locator([c],CELL,DETAIL);
table1.setBackground(loc,color2)
}
var c3 = ''+param['eat_j']+','+param['eat_i']
var loc3 = new Locator([c3],CELL,DETAIL);
table1.setBackground(loc3,color2);
param['eat_i']=7
param['eat_j']=7
param['snake']='0,0'
param['i']=0
param['j']=0
}
if(param['restart']=='y'){
param['score']=0
param['start']='t'
}
if(param['restart']=='n'){
param['score']=0
param['start']='f'
}
param['restart']=null
if(param['start']=='t'){ //主程序
snake = param['snake'].split('|')
if(param['direct']=='r'){
param['i']+=1
}
if(param['direct']=='l'){
param['i']-=1
}
if(param['direct']=='d'){
param['j']+=1
}
if(param['direct']=='u'){
param['j']-=1
}
var c = ""+ param['j']+','+param['i'];
var loc = new Locator([c],CELL,DETAIL)
flag = false
//判断蛇有没有撞到自己,循环版
/* for(i=0;i<snake.length;i++){
if(c===snake){
flag=true
}
} */
//判断蛇有没有撞到自己优化:判断前方位置背景颜色是不是蛇身颜色
color_str2 = toString(table1.getBackground(loc))
if(color_str==color_str2){
flag = true
}
//如果i/j超限制,或撞到自己 则失败
if(param['i']>14||param['j']>14||param['i']<0||param['j']<0||flag==true)
{
组1.visible = true
param['start']='f'
param['pause']='f'
if(param['high_score']<param['score']){ //最高分小于得分,更新最高分数值
param['high_score']=param['score']
}
}
else
{
//var loc = new Locator([c],CELL,DETAIL)
table1.setBackground(loc,color)
lastone = snake.shift
var last_loc = new Locator([lastone],CELL,DETAIL)
table1.setBackground(last_loc,color2)
if(param['i']==param['eat_i']&¶m['j']==param['eat_j']){
param['score']+=1
snake.unshift('-1,-1') //加入一个无效位置,不消掉吃的点位,制造延长蛇身的效果
//取一个新的食物点位,用背景色字符串,循环保证点位不出现在蛇身上
while (true) {
param['eat_i']=randbetween(0,15)
param['eat_j']=randbetween(0,15)
eat_point = ''+param['eat_j']+','+param['eat_i']
loc_eat = new Locator([eat_point],CELL,DETAIL)
eat_backgroud_str = toString(table1.getBackground(loc_eat))
if(eat_backgroud_str != color_str){
break
}
}
}
snake.push(c)
param['snake']=snake.join('|')
}
}