飞机座位数游戏(/demos/plane/index.html)

计算飞机座位数游戏总共有3关

  1. 飞机只有头等舱座位
  2. 飞机座位有驾驶员座位和头等舱座位
  3. 飞机座位除驾驶员座位和头等舱座位外,还有经济舱座位

飞机由svg生成,头等行和经济等行可根据滑动变换数字,座位积木填入公式,公式计算出的结果显示在飞机上“座位:?”处。

飞机的实现

飞机的实现比较简单,飞机由svg自动生成,飞机座位数由游戏等级和滑动条实现,滑动条通过slider来实现,当飞机等级变化时,控制飞机座位类型的实现或隐藏,当滑动条变化时,slider会调用sliderChange事件,从而进一步控制svg座位行数的变化。

积木块变化

积木块的变化分为两部分,是否显示积木以及积木行数的变化。是否显示积木通过等级的变化来控制Toolbox是否包含积木对应的xml,从而控制Toolbox中积木是否显示。积木行数会随着滑动条的变化而变化,是因为在每次svg重绘时会调用积木的customUpdate函数,从而达到积木行数的变化。

//更新积木行数function updateBlocks(blocks) {    for (var i = 0, block; block = blocks[i]; i++) {      block.customUpdate && block.customUpdate();    }}//积木定义,其中customUpdate函数会改变行数Blockly.Blocks['plane_get_rows'] = {  // Block for row variable getter.  init: function() {this.setHelpUrl(Blockly.Msg['VARIABLES_GET_HELPURL']);    this.setColour(330);    this.appendDummyInput()        .appendField(Plane.getMsg('Plane_getRows'), 'title');    this.setOutput(true, 'Number');  },  customUpdate: function() {    this.setFieldValue(        Plane.getMsg('Plane_getRows').replace('%1', Plane.rows1st), 'title');  }};

公式计算

公式计算就是获得工作空间中plane_set_seats积木,通过Blockly.JavaScript.blockToCode函数获得公式代码,执行JS的eval函数获得公式结果。

Plane.recalculate = function() {  var rootBlock = null;  //查找积木堆,并判断哪些是plane_set_seats积木  var blocks = Plane.workspace.getTopBlocks(false);  for (var i = 0, block; block = blocks[i]; i++) {    if (block.type == 'plane_set_seats') {      rootBlock = block;    }  }  //根据积木堆的公式,获得代码,并执行得到座位数seats  var seats = NaN;  Blockly.JavaScript.init(Plane.workspace);  var code = Blockly.JavaScript.blockToCode(rootBlock);  try {    seats = eval(code);  } catch (e) {    // Allow seats to remain NaN.  }  //设置座位数到svg上,并判断计算是否正确  Plane.setText('seatText',      Plane.getMsg('Plane_seats').replace(          '%1', isNaN(seats) ? '?' : seats));  Plane.setCorrect(isNaN(seats) ? null : (Plane.answer() == seats));......};

公式绘图游戏(/demos/graph/index.html)

简单绘图游戏由积木生成公式,绘图区域根据公式生成图形。公式积木由标准Toolbox即可生成,游戏主要在于由积木如何绘制图形。

X积木

X积木是一个值积木

Blockly.defineBlocksWithJsonArray([{  "type": "graph_get_x",  "message0": "x",  "output": "Number",  "colour": Blockly.Msg['VARIABLES_HUE'],  "tooltip": Blockly.Msg['VARIABLES_GET_TOOLTIP'],  "helpUrl": Blockly.Msg['VARIABLES_GET_HELPURL']}]);

X积木JS代码

Blockly.JavaScript['graph_get_x'] = function(block) {  // x variable getter.  return ['x', Blockly.JavaScript.ORDER_ATOMIC];};

Y积木定义

Y积木只是定义了一个输入类型为Number值为VALUE的积木

Blockly.defineBlocksWithJsonArray([{  "type": "graph_set_y",  "message0": "y = %1",  "args0": [    {      "type": "input_value",      "name": "VALUE",      "check": "Number"    }  ],  "colour": Blockly.Msg['VARIABLES_HUE'],  "tooltip": Blockly.Msg['VARIABLES_SET_TOOLTIP'],  "helpUrl": Blockly.Msg['VARIABLES_SET_HELPURL']}]);

Y积木js代码

Blockly.JavaScript['graph_set_y'] = function(block) {  // y variable setter.  var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE',      Blockly.JavaScript.ORDER_ASSIGNMENT) || '';  return 'y = ' + argument0 + ';';};

采集图形点

根据积木堆生成的代码,采取图形点X轴每次以0.1增加,生成XY轴图形点。

Graph.plot = function(code) {  var table = [];  var y;  //X轴从-10到10开始每次增加0.1,执行eval获得Y轴值  for (var x = -10; x <= 10; x = Math.round((x + 0.1) * 10) / 10) {    try {      eval(code);    } catch (e) {      y = NaN;    }    if (!isNaN(y)) {      y = Math.round(y * Math.pow(10, 14)) / Math.pow(10, 14);      table.push([x, y]);    }  }  ......  return table;};

图形绘制

根据第三方绘图函数,绘制图形。

Graph.drawVisualization = function() {//获取积木代码  var formula = Blockly.JavaScript.workspaceToCode(Graph.workspace);  if (formula === Graph.oldFormula_) {    return;  }  Graph.oldFormula_ = formula;//采集公式的图形点  var data = google.visualization.arrayToDataTable(Graph.plot(formula));  //调用google的图形化库画线google.visualization.LineChart(document.getElementById('visualization')).      draw(data, Graph.options_);  // 显示公式  formula = formula.substring(formula.indexOf('y = '));  formula = formula.substring(0, formula.indexOf(';'));  var funcText = document.getElementById('funcText');funcText.replaceChild(document.createTextNode(formula), funcText.lastChild);};

code blocks代码性能分析_Blockly 例子分析相关推荐

  1. code blocks代码性能分析_记一次Python Web接口优化,性能提升25倍!

    背景 我们负责的一个业务平台,有次在发现设置页面的加载特别特别地慢,简直就是令人发指 让用户等待 36s 肯定是不可能的,于是我们就要开启优化之旅了. 投石问路 既然是网站的响应问题,可以通过 Chr ...

  2. code blocks代码性能分析_Julia系列教程13--如果写出高性能的Julia代码

    避免全局变量https://www.zhihu.com/video/1113506985873588224 code generationhttps://www.zhihu.com/video/111 ...

  3. code blocks 代码颜色_vuepress中实现代码折叠、高亮

    最近在vuepress中撰写UI框架文档时发现在组件中插入演示代码没高亮,虽然在文档markdown中写代码有高亮但就无法实现折叠了,而且vuepress没有提供折叠代码的配置,因此实现一个折叠组件外 ...

  4. ortp分析之一 例子分析

    一. rtpsend.c主要内容 这个例子主要是表示了PCMU格式的音频文件或者直接从声卡得到的音频流如何发送 int main(int argc, char *argv[]) {     RtpSe ...

  5. 灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样!(一番分析后找到原因!)

    我今天在code的时候发现了一个灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样! 如图,同一个代码文件在两个编译器上的输出不同: 同样的代码在code::blocks上输出 ...

  6. Android app native代码性能分析

    分析我们app中native层的C/C++代码性能,能够方便我们找出其中的性能瓶颈,并在稍后做有针对性的优化. 下载android-ndk-profiler 工欲善其事,必先利其器,我们先要有良好的工 ...

  7. .NET 11 个 Visual Studio 代码性能分析工具

    原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...

  8. 11个Visual Studio代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  9. 11 个 Visual Studio 代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第6期)
  2. @所有技术社区,年度”社区之星“开选,快来盘点各家技术大佬
  3. 以下关于python的赋值_单选(1分) 以下关于Python的赋值说法中错误的是哪一个选项?...
  4. iPhone清理喇叭灰尘_手机喇叭孔灰尘清理
  5. MongoDB基础教程系列--目录结构
  6. 4.25 数据库 仓库例题
  7. CSS 小结笔记之文字溢出处理
  8. NGUI系列教程五(角色信息跟随)
  9. c语言+Easy X图形库实现飞机大战,源码加素材
  10. leetcode 合并两个有序数组
  11. windows磁盘空间释放(二)
  12. 【软件下载】Excel下载 word下载 官方 官网下载 原始镜像 开发工具 开发软件下载
  13. 施主,贫僧乃东土大唐而来,恳请在此借宿一晚……...
  14. 全文检索(一) -- Lucene
  15. 检测恶意软件分类模型中的概念漂移
  16. 2018工作--武汉篇
  17. java中类可以包含哪些元素,Java类中包含的元素及作用
  18. 3dmax软件下载linux,3D效果制作软件(Arnold MAXtoA)
  19. Linux Mint的常见设置修改
  20. 如何打开磁盘管理工具

热门文章

  1. 双模sa_三大运营商发声:5G首班车,NSA+SA双模手机是最低门槛
  2. python改变图片大小不失针
  3. nuxt全栈仿美团官网13——首页下面的格调
  4. 虚拟机内存满之后怎么删除相应的垃圾数据
  5. Python入门:条件语句
  6. VUE将网址转换为二维码
  7. FAF世链区块链大会|启元社社长徐道彬: 创新价值成为区块链真正的牵引力
  8. 分数乘法计算机题,分数乘法练习题
  9. mysql经典50道练习题
  10. css中雪碧图(sprite)的使用及制作方法