本帖最后由 想你课堂 于 2022-8-28 10:25 编辑  
 
一、任务目标 
 
1.给出一副图片,做背景;2.心中想一个1-60的数字; 
3.在给出6张数字卡片中,通过每张卡片选择你想的数字是否在卡片中,在选择按键A,不在选择按键B,直到6张卡片选完; 
 
4.最后给出你想的数字,看是否与你想的数字一致。 
 
 
二、创意起源 
 二进制原理;猜数字 
 
 
三、作品展示 
   
 
 
对应的电脑端显示过程如下: 
  
 
 
四、知识点 
 
1.学习使用unihiker库显示图片、文字的方法 
Unihiker库GUI类draw_image()方法显示图片 
GUI类中的draw_image()方法可以实现在行空板屏幕上显示图片,在编程时,通过“对象.方法名()”的形式来实现功能,同时,此方法会返回一个图片对象,使用变量存储起来方便后续进行对象更新操作。 
2.二进制知识;以十进制数52为例,二进制应该是:110100B,对应位换算成十进制为: 
0乘2的0次方=0 
 
 
0乘2的1次方=0 
1乘2的2次方=4 
0乘2的3次方=0 
1乘2的4次方=16 
1乘2的5次方=32 
52=32+16+0+4+0+0 
 
3.列表的应用 
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示: 
list1 = [1, 2, 3, 4, 5 ] 
 
list.reverse() 
反向列表中元素 
 
五、背景图片 
  
 
 
六、动手实践 
1、硬件搭建 
通过USB连接线将行空板连接到计算机 
 
2、程序编写 
把图片放到同一个文件夹中。 
			
			
			- # -*- coding: utf-8 -*-
 - from pinpong.board import *
 - from pinpong.extension.unihiker import *
 - 
 - card= ["""Card 1:
 -     1 11 21 31 41 51
 -     3 13 23 33 43 53
 -     5 15 25 35 45 55
 -     7 17 27 37 47 57
 -     9 19 29 39 49 59""",
 -     """Card 2:
 -     2 11 22 31 42 51
 -     3 14 23 34 43 54
 -     6 15 26 35 46 55
 -     7 18 27 38 47 58
 -    10 19 30 39 50 59""",
 -     """Card 3:
 -     4 13 22 31 44 53
 -     5 14 23 36 45 54
 -     6 15 28 37 46 55
 -     7 20 29 38 47 60
 -    12 21 30 39 52 *""",
 -     """Card 4:
 -     8 13 26 31 44 57
 -     9 14 27 40 45 58
 -    10 15 28 41 46 59
 -    11 24 29 42 47 60
 -    12 25 30 43 56 *""",
 -     """Card 5:
 -    16 21 26 31 52 57
 -    17 22 27 48 53 58
 -    18 23 28 49 54 59
 -    19 24 29 50 55 60
 -    20 25 30 51 56 *""",
 -     """Card 6:
 -    32 37 42 47 52 57
 -    33 38 43 48 53 58
 -    34 39 44 49 54 59
 -    35 40 45 50 55 60
 -    36 41 46 51 56 *"""]
 - 
 - import time
 - from unihiker import GUI   #导入包
 - gui=GUI()  #实例化GUI类
 - 
 - 
 - img = gui.draw_image(image='猜一猜.png')# 显示初始背景图为猜一猜
 - b=[1,2,3,4,5,6] 
 - i=0
 - s=0  #最后显示你猜的数字
 - info_text = gui.draw_text(x=20, y=20, text=card[i])
 - 
 - info_text1 = gui.draw_text(x=20, y=180, text='''你心中想的数字,
 - 在卡片中吗?
 - 在选A,不在选B,
 - 见证奇迹,
 - 我知道你所想!''')
 - 
 - Board().begin() #初始化
 - 
 - while i<=5:
 -     
 -     
 -     if button_a.is_pressed() == True: #判断按钮是否被按下
 -         print("按钮A按下")
 -         b[i]=1
 -         print(b[i])
 -         info_text1.config(text='''有这个数字?
 -         有选A,没有选B''')
 -         
 -         time.sleep(1)
 -         print(b)
 -         i=i+1
 -         print(i)
 -         if(i==6):
 -             break;
 -         info_text.config(text=card[i])
 -         
 -         
 -         
 -     if button_b.is_pressed() == True: #判断按钮是否被按下
 -         print("按钮B按下")
 -         b[i]=0
 - print(b[i])
 -         info_text1.config(text='''有这个数字?
 -         有选A,没有选B''')
 -         time.sleep(1)
 -         print(b)
 -         i=i+1
 -         print(i)
 -         if(i==6):
 -             break;
 -         info_text.config(text=card[i])
 - 
 - s=b[5]*32 + b[4]*16 + b[3]*8 + b[2]*4 + b[1]*2 + b[0]*1
 - 
 - b.reverse() #列表逆序输出二进制顺序数字;     
 - print("Binary answer:",b)#你想的数字的二进制形式;
 - print("The number is:", s)
 - info_text1.config(text='''你心中想的数字,
 - 是:''')
 - info_text3 = gui.draw_text(x=20, y=240, text=s)
 - while True:  # 循环
 -     time.sleep(10)  # delay1秒
 
  复制代码
  
3、程序运行 
 
STEP1:远程连接行空板 
 
(1) 确认板子处于连接且开机状态 
 
(2) 开启远程连接终端 
  
(3) 连接行空板 
 [size=0.83em]WedAugust-202208244269..png (31.43 KB, 下载次数: 0) [color=rgb(153, 153, 153) !important]4 天前 上传  
 
(4)运行程序观察效果 
每出现一次卡片,按A,B键选择自己想的数字是否在卡片中。 
     
总结: 
       感谢官方交流群的热心朋友的帮助,基础知识在具体应用中非常重要,中间很多基础知识的细节,需要进一步的练习和熟悉。否则具体应用中,会遇到各种问题,影响项目实施进度。 
 
 
 
 
 
 
 |