查看: 5431|回复: 0

[教程] UpyCraft-micropython:microbit之石头剪刀布

[复制链接]
之前发表了一篇microbit通过radio通信的帖子:http://www.dfrobot.com.cn/commun ... =1&extra=#pid101712
现在,我们可以根据radio做实现一些简单的玩法啦!

石头剪刀布是我们童年时候经常玩的一种游戏,现在我想在microbit上实现。这样可以保证游戏的公平,不必担心谁先谁后造成的作弊现象 0.0

首先,我们需要准备的工具:
硬件:
Micro:bit主板               X2
数据线(或3.3V电池)  X2

软件:UpyCraft-Micropython

操作:
2个micro:bit主板分别接电源,把程序分别现在到2个microbit,设置Defaule run,然后重新上电就可运行

代码:
[Python] 纯文本查看 复制代码
from microbit import *
import radio

def judge(host,slave):
  if host == 1 and slave == 2:
    return 1
  elif host == 2 and slave == 3:
    return 1
  elif host == 3 and slave == 1:
    return 1
  elif host == slave:
    return 2
  else:
    return 0

radio.config(length=64,channel=7,group=200)
rock = Image("09090:90909:09090:90909:09090")
scissor = Image("99009:99090:00900:99090:99009")
paper = Image("99999:90009:90009:90009:99999")

image = [rock,scissor,paper]

radio.on()
i = 0
while True:
  i = i%3
  if i == 0:
    display.show(image[0])
  elif i == 1:
    display.show(image[1])
  elif i == 2:
    display.show(image[2])
  if button_b.was_pressed():
    i = i+1
  if button_a.was_pressed():
    radio.send(str(i))
    msg = radio.receive()
    while msg == None:
      msg = radio.receive()
    result = judge(i,int(msg))
    if result == 0:
      display.scroll("lose")
    elif result == 1:
      display.scroll("win")
    elif result == 2:
      display.scroll("tie")



解析:
第1行到第2行:导入所需的包
第4行到第14行:定义一个判断函数,平局返回2,赢了返回1,输了返回0
第16行:配置radio
第17行到第21行:编写石头剪刀布的图形,并将这些图形存放于image列表中
第23行:打开radio
第24行:定义i,做为列表下标及通信内容
第25行:while循环,一直执行26行到46行的内容
第26行到第32行:对i取模,是i一直在0到2之间循环,0为石头,1为剪刀,2为布,判断i的值,并显示对应的图形
第33行到第34行:判断按键a是否按下,如果按下,则加1,代表图形切换。
第35行到第46行:判断按键b是否按下,若按下,则将i的值通过radio发送。发送完,等待接收,直到接收到数据后,通过第4行的函数判断胜负

执行结果:
QQ图片20170815141136.png


实物图:

7.jpg

欢迎大家加入uPyCraft-micropython QQ群:619558168



高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail