0°

(十七)基础例子:萤火虫

夏日,每到夜晚,我仰望星空,就时常想起家乡的萤火虫。

家乡的夜晚静谧而安详。在树丛,在稻田,在沟塘,萤火虫飞来飞去,绿莹莹的光,宛若遥远的小灯笼,忽明忽暗,若隐若现。当走在乡间小路上,多情的荧火虫,会舞弄着轻柔的倩影,伴你款款而行。时常听大人说,天上的人看地球是天,萤火虫就是天上游动的星星。还听母亲说,萤火虫是一个美丽善良的姑娘变成的,专门提着灯,给夜行人引路

今天我想要用多个micro:bit(每个micro:bit充当一个萤火虫)创建虚拟萤火虫。来怀念的童年,我的故乡我的山间田野

编码萤火虫

“每只萤火虫都有自己独立的内部时钟……”

在这种情况下,时钟就像一个计数器,所以我们首先在程序中添加一个clock变量。

// the clock ticker
let clock = 1

“……每当时钟’数到十二’时,它就会闪烁。”

我们可以使用||basic:forever||循环来重复增加时钟的代码。当时钟到达“中午”(让我们选择8为正午)时,我们会短暂打开屏幕

// the clock ticker
let clock = 0
basic.forever(() => {
    // if clock "hits noon", flash the screenif (clock >= 8) {// flash
        game.addScore(1)
        // wait for 2 ticks
        basic.pause(200)
        // reset the clock
        clock = 0
    } else {
        // just wait a bit
        basic.pause(100)
        // increment the clock
        clock += 1
    }
})

当你看到附近的萤火虫闪光灯时,稍微向前推动你的时钟

micro:bit可以向相邻的micro:bit发送无线信息。我们可以使用这些信息来模拟光的“闪烁”。

当萤火虫闪烁时,它还通过无线电发送号码||radio:radio send number||

// the clock ticker
let clock = 0
basic.forever(() => {
    // if clock "hits noon", flash the screenif (clock >= 8) {// notify neighbors
        radio.sendNumber(0)
        // flash
        game.addScore(1)
        // wait for 2 ticks
        basic.pause(200)
        // reset the clock
        clock = 0
    } else {
        // just wait a bit
        basic.pause(100)
        // increment the clock
        clock += 1
    }
})

当一只萤火虫接收到无线电数据包并且它没有发送数据包时,它会将其时钟递增一:

// the clock ticker
let clock = 0
radio.onDataPacketReceived(() => {
    // advance clock to catch up neighborsif (clock < 8) {
        clock += 1
    }
})

最后,把他们放在一起,然后关掉灯,一起来看萤火虫飞舞吧



「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论