系列前文:

功能上, 添加了蚂蚁图标显示当前前进方向, 并可通过修改源码实现行进速度. 并未对语言本身进行改进. 另有一点界面改进. 源码仍在: program-in-chinese/quan3

在线演示仍在: 圈3

演示

默认2倍行进速度(相比之前)画田字格:

8倍行进速度画"轮胎" (LOGO源码链接):

部分相关源码

下面是为添加蚂蚁和定制速度作的主要修改:

+  if (!指示方向图) {
+ 指示方向图 = createImg("图标/蚂蚁头向上.png")
+ 指示方向图.size(36, 34);
+ }
+
// TODO: 提取到二阶函数
绘制 = function() {
var 当前序号 = 序号;
+ const 速度 = 2;
background(255, 255, 255); for (var i = 0; i < 路径表.length; i++ ) {
@@ -33,16 +41,20 @@ const 生成指令序列 = require("./语法树处理").生成指令序列
var 起点 = 段.起点;
var 终点 = 段.终点;
var 距离 = 段.长度;
- if (当前序号 < 距离) {
- line(起点.x, 起点.y, 起点.x + (终点.x - 起点.x) * 当前序号 / 距离, 起点.y + (终点.y - 起点.y) * 当前序号 / 距离);
+ if (当前序号 < 距离 / 速度) {
+ var 当前x = 起点.x + (终点.x - 起点.x) * 当前序号 * 速度 / 距离;
+ var 当前y = 起点.y + (终点.y - 起点.y) * 当前序号 * 速度 / 距离;
+ 指示方向图.position(当前x + 238, 当前y - 8); // TODO: 需要对准线头
+ 指示方向图.style("transform", "rotate(" + (90 - 段.前进角度) + "deg)")
+ line(起点.x, 起点.y, 当前x, 当前y);
break;
} else {
line(起点.x, 起点.y, 终点.x, 终点.y);
- 当前序号 = 当前序号 - 段.长度;
+ 当前序号 = 当前序号 - 段.长度 / 速度;
}
} - 序号 ++;
+ 序号 += 速度;
}

可能改进

  1. 蚂蚁图标在火狐下没有对准走线, 应该是上面TODO的问题
  2. 改进蚂蚁图标, 需在开始时就显示
  3. 可在界面直接修改行进速度, 隐藏蚂蚁
  4. 部分p5js API继续汉化, 如line, background

2018-12-14 JavaScript实现ZLOGO: 前进方向和速度的更多相关文章

  1. 2019-01-20 JavaScript实现ZLOGO: 界面改进与速度可调

    续前文JavaScript实现ZLOGO: 前进方向和速度 在线演示地址: http://codeinchinese.com/%E5%9C%883/%E5%9C%883.html 源码仍在: prog ...

  2. 2018.12.14 浪在ACM 集训队第九次测试赛

    浪在ACM 集训队第九次测试赛 B Battleship E Masha and two friends B 传送门 题意: 战船上有占地n*n的房间cells[][],只由当cells[i][j]= ...

  3. 2018.12.14 codeforces 922E. Birds(分组背包)

    传送门 蒟蒻净做些水题还请大佬见谅 没错这又是个一眼的分组背包. 题意简述:有n棵树,每只树上有aia_iai​只鸟,第iii棵树买一只鸟要花cic_ici​的钱,每买一只鸟可以奖励bbb块钱,从一棵 ...

  4. 2018.12.14 codeforces 932E. Team Work(组合数学)

    传送门 组合数学套路题. 要求ans=∑i=0nCni∗ik,n≤1e9,k≤5000ans=\sum_{i=0}^n C_n^i*i^k,n\le 1e9,k\le 5000ans=∑i=0n​Cn ...

  5. 2018.12.14 Mac的Matlab2018a软件及其安装步骤

    软件百度云链接:https://pan.baidu.com/s/1q3EO5up-1YuAQ4gEi7sTwQ 密码:p6mf MATLAB R2018a for Mac破解说明 1.MATLAB R ...

  6. 2019-01-23 JavaScript实现ZLOGO: 性能改进

    主攻前文吴烜:JavaScript实现ZLOGO: 界面改进与速度可调的几个性能问题 在线演示: 圈3 源码仍在: program-in-chinese/quan3 之前是在绘制过程中计算每帧需要绘制 ...

  7. JavaScript实现ZLOGO: 用语法树实现多层循环

    原址: https://zhuanlan.zhihu.com/p/32571516 照例先上演示弱效果图. 演示地址照旧: 代码如下: 开始 循环4次 循环4次 前进50 左转90度 到此为止 右转9 ...

  8. 2018年,JavaScript都经历了什么?

    摘要: 对JSer来说,这是很有意思的1年. 本文灵感来自JavaScript Weekly周报,欢迎大家订阅. The State of JavaScript 2018 The State of J ...

  9. 2018-01-02 JavaScript实现ZLOGO: 用语法树实现多层循环

    原址: https://zhuanlan.zhihu.com/p/32571516 照例先上演示弱效果图. 演示地址照旧: 代码如下: 开始 循环4次 循环4次 前进50 左转90度 到此为止 右转9 ...

随机推荐

  1. Day8:html和css

    Day8:html和css 显示和隐藏: display: none 为 无,隐藏元素 display: block 为 显示元素 转换为块级元素 visibility: visible 显示 vis ...

  2. Mysql主从配置实战

    实战mysql主从配置 准备两个docker容器,分别在3306和3307开启两个mysql为主从数据库 可执行以下命令 docker run -p 3306:3306 --name mysql330 ...

  3. 如何写gdb命令脚本

    作为UNIX/Linux下使用广泛的调试器,gdb不仅提供了丰富的命令,还引入了对脚本的支持:一种是对已存在的脚本语言支持,比如python,用户可以直接书写python脚本,由gdb调用python ...

  4. 使用 DryIoc 替换 Abp 的 DI 框架

    一.背景 你说我 Castle Windsor 库用得好好的,为啥要大费周章的替换成 DryIoc 库呢?那就是性能,DryIoc 是一款优秀而且轻量级的 DI 框架,整个项目代码就两个文件,加起来代 ...

  5. 《JQuery技术内幕》读书笔记——自调用匿名函数剖析

    Javascript语言中的自调用匿名函数格式如下: (function(){ //do somethings })(); 它还有另外两种等价写法如下: //等价写法一 (function(){ // ...

  6. HashTable原理与源码分析

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作,如有错误之处忘不吝批评指正! HashTable内部存储结构 HashTable内部存储结构为数组+单向链 ...

  7. 【原创】Git删除暂存区或版本库中的文件

    0 基础     我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的 ...

  8. kubernets 单节点安装

    关闭防火墙和Selinux. setenforce 0 systemctl stop firewalld systemctl disable firewalld 配置EPEL源 yum install ...

  9. 【SqlServer系列】远程访问

    1   概述 已发布[SqlServer系列]文章如下: [SqlServer系列]SQLSERVER安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 [SqlS ...

  10. Perl和操作系统交互(一):system、exec和反引号

    调用操作系统命令:system函数 system函数可以直接让perl调用操作系统中的命令并执行. system入门示例 例如: #!/usr/bin/perl system 'date +" ...