WebTurtle

用Web复刻经典的PC Logo(也就是当年小学电脑课上教的“小海龟”程序)(注意:用的ES6,目前只有最新谷歌浏览器支持)

C0618C

喜欢

5313
浏览
2
喜欢

> 更多图片

项目状态:已完成
开放度:公开
所属分类:软件
发布时间:2017-09-08
最近更新:2017-12-16

标签

描述

你还记得当年的小海龟么,或许对很多人来说,成为程序员只是偶然;但我,在多年前认识小海龟的那个下午,就已经注定了。感谢Logo语言,让我在程序员的路上越走越远。


详细说明

注意:这是Web项目,是JS,通篇用的ES6。所以只支持新版Chrome浏览器(Firefox好像也行,没细测)。

WebTurtle

Web Turtle 是基于jGE的一个小程序,关于jGE的内容,请到jGE页面查看。

你还记得当年的小海龟么?或许对很多人来说,成为程序员只是偶然;但我,在多年前认识小海龟的那个下午,就已经注定了。感谢Logo语言,让我在程序员的路上越走越远。

部署地址:http://www.vmwed.com/sb2/webturtle/

关于Logo流派、Web Turtle所用语法及说明

Logo的发展史及流派可看维基百科Logo(programming_language)
Web Turtle支持如下的流派:

尽管BERKELEY LOGO有详尽的手册,但国内大部分Logo的教材和例子基于PC Logo和MSWLogo,所以支持的指令优先以这两种为准。但又因为这两者缺乏手册,所以部分指令是按照教材上对结果的描述,反推出来的(尤其对应BERKELEY LOGO中没有的指令如stampoval、stamprect、setw等),所以可能会导致一种糅合的语法而且不被上述三种所识别,这种现象我会尽量消除。
但因为采用兼容性语法,可能会导致在Web Turtle上能成功的作品在上述三种程序中均有各自的错误,针对此,我将做一个语法开关,和提供相应的风格校验、转换工具。

操作指引

  1. 在页面底部有指令输入栏,用于输入指令。

  2. 输入指令如 fd 10 并按回车,屏幕中海龟将执行向前走10步的指令。

  3. 指令的参数若为数字,则可以输入算式表达式,如 rt 360/24 等价于 rt 15

  4. 每次可以同时输入多个指令,不同指令中间用空格隔开;多个指令组合为一个指令组。

  5. 可在指令输入栏按上、下方向键,翻查历史指令记录。

  6. 使用help指令获取指令列表,用help + 其它指令(如:help rt)获取对应指令的说明。

基础指令

指令参数中文指令举例意义
fd步数(数字)前进fd 10向前走10步
lt步数(数字)左转lt 90左转90度
rt角度(数字)右转rt 45右转45度
bk角度(数字)后退bk 35后退35步
repeat次数(数字)重复repeat 4[ 其它指令组[*] ]重复执行其它指令组4次
home回家home回初始点,绘画内容保留
cs清屏cs擦除屏幕所有内容并回归初始点
clean清空clean擦除屏幕所有内容,位置角度不变
pu抬笔pu把笔提起, 不留痕迹
pd落笔pd把笔放下, 会留痕迹
setpc颜色代码或颜色数组[**]笔色setpc 10设置笔迹颜色,支持颜色编号和颜色数组[**]
setbg颜色代码或颜色数组[**]底色setbg [45 55 100]设置背景颜色,支持颜色编号和颜色数组[**]
setw宽度(数字)笔粗setw 1将笔粗设为1像素
width width查询当前笔宽
random数字随机random 30产生一个0到30之间的随机数

代码举例

描述代码
复杂花纹fd 200 clean repeat 12 [repeat 75 [fd 100 bk 100 rt 2] fd 250]
花纹repeat 4000 [repeat 34 [fd 12 rt 10] rt 90]
雨伞rp 180[rt 1 fd 60*pi/180] rt 90 pu fd 120 rt 90 pd rp 3[rp 180[rt 1 fd 20*pi/180] rt 180] pu fd 68 rt 90 bk 60 rt 90 pd fd 8 pu fd 40 pd fd 80 rp 180[rt 1 fd 9*pi/180]
蒲公英repeat 24[fd 40 lt 45 fd 15 bk 15 rt 90 fd 15 bk 15 lt 45 bk 40 rt 360/24] bk 200
蒲公英重复 24[前进 40 左转 45 前进 15 后退 15 右转 90 前进 15 后退 15 左转 45 后退 40 右转 360/24] 后退 200
五角星(定义过程)to lwjx :b rt 18 repeat 5[fd :b rt 144 fd :b rt 54 fd :b*1.9 bk :b*1.9 lt 126] end lwjx 150
五角花repeat 1800 [fd 10 rt repcount + .1]
花环rp 3600 [ fd 5 rt repcount+0.4 ]
rp 3600 [ fd 10 rt repcount+0.2 ]
花纹rp 45 [ setpc random 16 fd 250 rt 178 fd 250 lt 182 ]
花纹repeat 15 [ lt 360/15 fd 80 repeat 20 [ fd 20 lt 45 fd 10 bk 10 rt 90 fd 10 bk 10 lt 45 bk 20 rt 360/20 ] bk 80 ]
花纹repeat 8 [rt 45 repeat 6 [repeat 90 [fd 4 rt 2]rt 90]]
直线圆rp 45 [ setpc random 16 fd 300 rt 128 ]
花朵rp 6[lt 45 rp 4[rp 9[fd 5 rt 10] rp 9[fd 5 lt 10] rt 90]rt 105]
矩形纹rp 8[fd 30 lt 45 rp 4 [fd 25 rt 90] rt 45 fd 10 lt 45 rp 4 [fd 50 rt 90] rt 45 bk 40 rt 360/8]
矩形纹repeat 8 [repeat 4 [rt 90 fd 100] bk 100 lt 45]
彩笔示范setw 20 fd 50 setpc 4 fd 50 setpc 6 fd 50 setpc [20 20 100] fd 50
涂鸦(会卡)rp 100[rp 100 [ setpc random 16 fd random 200 rt random 360 ] home ]
原子模型rp 4 [ stampoval 100 50 rt 45 ]
网状环rp 60[stampoval 200 100 rt 3 ]
环线管rp 60[stampoval 100 50 rt 3 fd 10]
海螺rp 120 [ stampoval 100 50 rt 3 fd 5 ] rp 60[stampoval 100 50 rt 3 fd 10]
放射线repeat 180 [fd 500 bk 500 rt 2]
线repeat 25 [repeat 15 [fd 100 bk 100 rt 5] fd 100]
线框图for [x 1 150] [fd :x rt 89]
线圈for [i 0.01 4 0.05] [repeat 180 [fd :i rt 1]]

注:部分例子摘录于 Logo 15-word challenge [参考1]

网友作品
;Denius 2017-04-03
cs pd setw 1
fd 100 rt 90 fd 25 repeat 180[fd ((π*50)/180) rt 1] fd 25 
pu 
bk 100 rt 90 fd 25
pd
rt 90 fd 25 lt 90 repeat 270[fd ((π*25)/180) lt 1] fd 30 
lt 90 fd 50 bk 25 repeat 180[fd ((π*25)/180) rt 1] fd 25 
pu 
lt 90 fd 10 lt 90
pd
fd 50 pu fd 10 pd setw 2 fd 2 setw 1
pu 
bk 2+10 rt 90 fd 10 rt 90
pd
fd 25 repeat 180[fd ((π*25)/180) lt 1] fd 25
pu 
rt 90 fd 6+(25/2)+25/1.414 rt 90 fd 5 rt 90+45
pd 
repeat (180+45)[fd ((π*(25/2))/180) lt 1]
repeat (180+45)[fd ((π*(25/2))/180) rt 1] repeat 10[fd 1 lt 4]
pu 
fd 3000

颜色代码和颜色数组

颜色代码

setpcsetbg 需要用到颜色代码(0-15),代码与颜色对照如下表:

     0  black     1  blue     2  green     3  cyan
     4  red         5  magenta     6  yellow     7 white
     8  brown     9  tan        10  forest    11  aqua
    12  salmon    13  purple    14  orange    15  grey
颜色数组

在支持使用颜色数组的地方,可以用 [R G B] 方式表示颜色。其中R、G、B分别为红、绿、蓝在颜色中的比例,取值为0~100。
示例:

setbg [100 50 50] setpc [10 100 10]

TODO List

  • 支持指令 ht、st

  • 支持指令 for、wait、go、repcount

  • 支持多行录入、行尾;注释

  • 支持setxy、seth、fill

  • 支持更多的数据类型

  • 播放绘画过程

版本记录

  • v2.3.0 2017-04-22

    新增指令for。已能画出大部分Logo 15-word challenge的图案。
  • v2.2.0 2017-04-16

    新增setx sety setxy seth
  • v2.1.1 2017-04-9

    $undo、$redo
    修正home
  • v2.0.0  2017-04-2

    正式更名为Web Turtle
    调整解释器,为‘多线程’画图作准备  
    新增setpc、setw、$turtle、random  
    支持更换海龟图形,默认使用经典海龟
  • v1.7.0  2017-03-31

    新增clean、ct
  • v1.6.0  2017-03-30

    新增setbg
  • v1.5.0  2017-03-28

    重构国际化部分,支持根据浏览器语言选择显示语言。
  • v1.4.0  2017-03-28

    支持To ... END方式自定义过程;修复复杂算术表达式分词失败问题;
  • v1.3.0  2017-03-27

    加入pu pd指令;
  • v1.2.0  2017-03-26

    优化内部指令描述;增加home,cs指令支持;记录历史指令;
  • v1.1.0  2017-03-25

    加入中文指令支持。
  • v1.0.0  2017-03-25

    支持5个基础的画图指令。
    

License

You may use the jGE (or Steering Behaviors or Web Turtle) under the MIT license. See LICENSE.

链接表