Logo
  • Features
  • Educators
  • What's New
  • Blog
  • Showcase
  • About us
  • Contact
Try it now!

Archive Code

拓展作用

在使用 Scratch 编程的时候,我们经常遇到希望把若干数据转换成一串字符的情况,例如,制作存档码。

一种常见的做法是:使用分隔符来分隔多个数据。

image

然后使用便利积木取出数据:

image

在一些更复杂的情况中,我们还想将列表的内容转为一串字符,这时再用分隔符的做法就会比较复杂。

这时,我们就可以使用存档码拓展。存档码拓展能够非常方便的将多个变量、列表转换成存档码,再将存档码转为变量、列表

拓展原理

这个拓展使用一个“容器”。

你可以将一些变量和列表存进去,通过这个“容器”转变成一串字符;

(如果你了解过Javascript、 JSON ,实际上“容器”就是对象,“容器”对应的字符也就是 JSON 字符串)

基础积木

清空容器。清空容器中的内容

image

将单个内容加入容器。用于将单个数据加入容器。

image

将变量的内容加入容器。将一个变量的内容加入容器。

image

将列表加入容器。将一个列表加入容器。

image

容器对应字符串。将容器的内容转成一串字符。

image

例如,运行下面的代码:

image
image

得到容器中内容:{"数据1":100,"数据2":"苹果","列表1":["第一项","第二项","第三项"]}

其中 :

  • {XXX} 表示容器( {} 则表示空容器)
  • [XXX] 表示列表( [] 则表示空列表)
  • “数据1“:XX 表示容器中有一个名为”数据1“的数据 XX,其中 XX 可以是:
    • 数值,例如 100,100.0
    • 字符串,例如 “苹果”,“香蕉”(字符串要带双引号)
    • 列表,如 [1,2,3],[”第一项”,123,”苹果”]
    • 容器,例如 {”数据”:100,”列表”:[1,2,”苹果”]}

例子:

  • {"数据1":100,"数据2":"苹果","列表1":["第一项","第二项","第三项"]}
  • 👉
    表示容器中有三个内容,数据1为100,数据2为苹果,列表1有三项,依次是第一项、第二项、第三项
  • {"player1":{”ID”:”fd03”,”血量”:100},"player2":{”ID”:”DX3e”,”血量”:50},"AI":{”ID”:”dsc3”,”血量”:-5}},
  • 👉
    表示容器中有三个容器,player1,player2,AI。每个容器中有ID、血量两个数据。
  • [{”name”:”Shawn”,”score”:”100”},{”name”:”Arkos”,”score”:”98”},{”name”:”yk1boy”,”score”:”99”}]
  • 👉
    表示一个列表,其中有三个容器,每个容器中有 name、score 两个数据。

读取字符串到容器。

image

注:只有满足容器格式,才能读取成功,否则会读取失败。

image

读取失败时不会进行任何操作,容器保持原来的内容。

是否读取成功。用于判断读入的字符串格式是否正确。

image

获取容器中名为…的内容。

image

将容器中的…保存到变量。

image

将容器中的…保存到列表。

image

辅助积木

获取容器中内容总数。例如,容器中有两个变量,两个列表,则返回4。

image

获取容器第…个内容的XX:

  • 名称:内容的名字
  • 内容:内容的值
  • 类型:内容的类型,返回变量/列表/容器
  • 列表长度:如果内容是列表,返回列表长度;否则返回空
image

容器是否包含名为…的内容

image

容器名为…的列表的长度。如果列表不存在,则返回空

image

获取容器中名为…的列表的第n项。如果列表不存在或者索引不正确,返回空

image

删除容器中名为…的内容

image

附加积木

复制内容到剪切板。可以用于让玩家复制存档码。

image

用XX方法加密…,以XX作为密匙。

image

用XX方法解密…,以XX作为密匙。

image

其中密匙的作用是,只有加密和解密时密匙相同,才能正确解密。

因此,可以将用户ID作为密匙,这样只有同一个用户进行加密解密,才能得到正确结果。从而实现只有生成存档码的玩家才能使用这个存档码,每个玩家只能使用自己的存档码。

(目前这个加密算法有一些问题,一些中文字符例如“!”无法被正确加密)

获得字符的 Unicode 编码。

image

获取 Unicode 编码对应的字符。

image

这两个积木可以用于编写自己的加密算法。

最佳实践

例子 A:制作存档码

生成存档码:

一种简单的做法如下:

image

得到的存档码形如:{"金币":0,"关卡进度":0,"经验值":0,"列表1":["第一项","第二项","第三项"]}

考虑到上面的存档码比较简单,容易篡改,可以对存档码进行加密:

image

读取存档码:

image

例子 B:制作云存档

  1. 一种简单的制作云存档的方法:

存档:

image

读档:

image
  1. 如果要保存列表到云存档,要怎么做呢?

可以使用如下的积木。他们可以将列表转成一串字符,以及读取字符到列表

image

存档和读档如下:

image
  1. 如果使用存档码拓展,则可以这么写:
image

例子 C:存档码拓展和 Simple MMO 的结合使用

  1. 我们知道,Simple MMO 中,每个玩家只有一个额外数据,但是玩家可能会有很多需要传输的数据,比如玩家的血量、阵营、背包……要将这么多数据存入一个额外数据,会很头疼。
  2. 而如果使用存档码拓展,就可以很方便地解决这个问题:

image
  1. 在使用 Simple MMO 广播的时候,可能需要传入多个参数,这个时候就可以使用存档码拓展。
image
image

例子 D:将多个信息存到列表的一项

  1. 例如,对于格子地图,我们通常使用一个列表来存放一张地图的信息。

当我们需要存多张地图时,如果能将一张地图的信息转成一串字符,存入列表的一项,就可以做到一个列表存多张地图。并且方便管理。

image
image
  1. 再比如,我们想用列表存放武器的定义信息,我们可以用列表的一项来存一个武器的定义:
image

更新日志

版本
更新内容
1.0
发布拓展
Logo

Designed by 2ndR with love

Discord