Funpack第十期-使用Kitronik ARCADE编写摩斯密码练习器
Funpack第十期-使用Kitronik ARCADE编写摩斯密码小游戏,使用摩斯码写出自己的名字
标签
Funpack
好大一只荣哥哥
更新2021-08-26
622

     哈喽,大家好,又一次见面了,这次是第四次参加我们的Funpack活动了,本期的开发版是来自Kitronik公司的 ARCADE--一款功能丰富的可编程游戏手柄。

     本次任务选择的是任务二中的 2. 敲击按键,识别出按键组合对应的字符,在屏幕上打出自己的id。

     根据微软MakeCode Arcade编辑器和直播课堂的讲解,思考的基础逻辑为:预设两个按键(或单键长短按)分别输入点和横,超时自动转换或者通过按键事件来转换,在撸代码过程中发现输入错误的话还需要删除,分别指定两个按键为清除已输入的摩斯码,和删除转换完成的文本最后一位,这样来完善操作失误带来的不良体验。

实现部分:

      1. 首先还是用块编辑器将需要使用的功能(例如6个按键的按键命令,延时暂停,震动,设定玩家角色以及文字展现(角色说的命令))依次在块编辑器中生成,然后转换成python来完善。

      2.每个游戏开始会有一个操作按键说明,这里内容可以先空着,后面完善之后再补充。

game.show_long_text("左=输入· 右=输入- 上=清空输入的摩斯码 下=(空白)       B=转换到文本       A=删除文本末位",
    DialogLayout.FULL)

      3.这部分是直接转换生成的角色及位置描述,预定义了2个数组,分别存储摩斯码及对应的文本字符, 3个变量分别为输入的摩斯码 input_code;转换后的文本show_text;以及转换文本中临时变量show_text_temp。

player_: Sprite = None

scene.set_background_color(13)

input_code = ""
show_text = ""
show_text_temp = ""
dic_code_list = [".-", "-...", "-.-.", "-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----","..--..","-..-.","-....-"]
dic_text_list = ["A", "B", "C", "D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1","2","3","4","5","6","7","8","9","0","?","/","-"]
player_ = sprites.create(img("""
        . . . . . . . . . . b 5 b . . .
            . . . . . . . . . b 5 b . . . .
            . . . . . . b b b b b b . . . .
            . . . . . b b 5 5 5 5 5 b . . .
            . . . . b b 5 d 1 f 5 d 4 c . .
            . . . . b 5 5 1 f f d d 4 4 4 b
            . . . . b 5 5 d f b 4 4 4 4 b .
            . . . b d 5 5 5 5 4 4 4 4 b . .
            . b b d d d 5 5 5 5 5 5 5 b . .
            b d d d b b b 5 5 5 5 5 5 5 b .
            c d d b 5 5 d c 5 5 5 5 5 5 b .
            c b b d 5 d c d 5 5 5 5 5 5 b .
            c b 5 5 b c d d 5 5 5 5 5 5 b .
            b b c c c d d d 5 5 5 5 5 d b .
            . . . . c c d d d 5 5 5 b b . .
            . . . . . . c c c c c b b . . .
    """),
    SpriteKind.player)
player_.set_position(40, 70)
translate = sprites.create(img("""
        . . . . . . . . . . . . . . . .
            . . . . . . . 5 . 5 . . . . . .
            . . . . . . f 5 5 5 f . . . . .
            . . . . . f 6 2 5 5 6 f . . . .
            . . . . f 6 6 6 6 1 6 6 f . . .
            . . . . f 6 6 6 6 6 1 6 f . . .
            . . . . f d f d 6 6 6 1 f . . .
            . . . . f d f d 6 6 6 6 f f . .
            . . . . f d 3 d d 6 6 6 f 6 f .
            . . . . . f d d d f f 6 f f . .
            . . . . . . f f 3 3 f f 6 6 f .
            . . . . . f 5 3 3 d d f f f . .
            . . . . . f 3 3 3 f d d f . . .
            . . . . . . f 3 5 f f f . . . .
            . . . . . f 3 3 3 3 f . . . . .
            . . . . . . f f f f f . . . . .
    """),
    SpriteKind.player)
translate.set_position(110, 70)

     4.根据编辑器转换的代码补充填写每个按键的事件:

             上--清除已输入的摩斯码(实现:直接将输入变量赋值为空,同时更新显示内容)

             下--测试的震动模块代码,此案例中无实际操作。

             左--输入· (实现:在输入变量的字符串后添加 · 字符,减去重新组合字符串的需求)

             右--输入- (实现:同左按键)

def on_up_pressed():
    #清除输入的摩斯码
    global input_code
    input_code = ""  
    player_.say(input_code)
controller.up.on_event(ControllerButtonEvent.PRESSED, on_up_pressed)

def on_down_pressed():
    #备用空白功能键,仅震动测试
    controller.vibrate(100)
    pause(200)
controller.down.on_event(ControllerButtonEvent.PRESSED, on_down_pressed)

def on_left_pressed():
    #输入.代码
    global input_code
    input_code = input_code + "."
    player_.say(input_code)
    pause(200)
controller.left.on_event(ControllerButtonEvent.PRESSED, on_left_pressed)

def on_right_pressed():
    #输入-代码
    global input_code 
    input_code = input_code + "-"
    player_.say(input_code)
    pause(200)
controller.right.on_event(ControllerButtonEvent.PRESSED, on_right_pressed)

      5.同样补全按键A 和B 的事件:

               A -- 将目前的show_text删除最后一位字符重新赋值,同时更新显示内容。

               B -- 循环判断输入的摩斯码与第3条中预定义的数组内容是否一致,一致则将对应文本数组中同索引的字符赋值到show_text_temp变量,后组合到show_text,并更新显示内容。

每次按下B键均会响起提示音。

def on_a_pressed():
    #删除转换后文本的最后一位
    global show_text
    show_text = show_text[:-1]
    pause(200)
    translate.say(show_text)
controller.A.on_event(ControllerButtonEvent.PRESSED, on_a_pressed)

def on_b_pressed():
    #转换摩斯码到文本
    global input_code,show_text,show_text_temp  
    pause(200)
    for index in range(len(dic_code_list)):
        if input_code == dic_code_list[index]:
            show_text_temp = dic_text_list[index]
            pause(200)    
            break
    show_text = show_text + show_text_temp #连接转换后的文本字符串
    translate.say(show_text)
    music.ba_ding.play()
controller.B.on_event(ControllerButtonEvent.PRESSED, on_b_pressed)

     

       到这里基本游戏即可实现,实现效果如下;

FuSOfQK2nhbCpaj0ETWelAAVhF7WFhRHortev-rpRn-F4K_rIUErI4JU

 

 

  • 心得体会

      本次活动最先想体验的是微软的这个块编辑器,不需要那些语法,大小写等等,即可生成相应的程序文件,还是比较好玩。但是实际体验中,感觉还是没有代码界面那么灵活,不能完全按照自己的想法来“拖拽”代码到想要的位置上,还是有些欠缺。但是用于初始开发,定义好的函数等等还是特别方便,可以极大的减少难度。

      通过这次活动,还是学到了很多,期待下一次Funpack,哈哈哈

       

附件下载
arcade-Write-your-name-in-Morse-code.png
arcade-Write-your-name-in-Morse-code.uf2
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号