行空板UNIHIKER实现打地鼠游戏
本帖最后由 Lillian 于 2022-12-14 10:23 编辑项目背景:
打地鼠游戏是小朋友都非常喜欢的一个游戏,今天分享一个利用行空板实现打地鼠游戏。至逝去的童年。
游戏主要目标是在最短时间内得到指定的分数,打到一个地鼠得到1分,完成时间越短,成绩越好。地鼠数量和地鼠停留时间随着难度升级减少。小游戏难度分为多级,达到一定分数之后,游戏难度升级。
硬件设备:
[*]UNIHIKER 行空板
[*]digital led model
软件清单:
[*]mind+ python模式
代码下载:
代码描述:
导入行空板依赖库,主要使用unihiker绘制gui界面,显示地鼠,led传感器使用pinpong库,导入python相关random,datatime等,siot库将用户名和用户成绩上传到物联网上。
from unihiker import GUI
from pinpong.board import Board,Pin
from pinpong.extension.unihiker import *
import random
import time
import datetime
import siot
初始化游戏,定义开始地鼠数量、等待时间,初始化分数、开始时间。
def init_game():
num = 5
waite_time = 1
score = 0
last_score = 0
dishu = creat_dishu(num)#创建地鼠
start_time = datetime.datetime.now()
return num,waite_time,score,last_score,dishu,start_time
定义打中地鼠函数,如果打中地鼠,分数加一,led灯点亮一次,行空板发出声音提示一次
def on_click():
global score
score = score + 1
led.write_digital(1)
buzzer.pitch(147, 4) #播放音符定义创建地鼠函数,根据传入的地鼠数量创建地鼠,返回值是地鼠列表。gui.draw_image()方法显示地鼠。
def creat_dishu(num):
dishu = []
for i in range(num):
dishu.append(gui.draw_image(image="dishu.jpg",x=0,y=100,w=50,h=50,onclick=on_click))
return dishu 初始化mqtt传输协议,连接网络,准备发送消息。输入siot_dishu ,server ,port ,user ,password
def init_mqtt():
siot.init(client_id="siot_dishu",server="10.1.2.3",port=1883,user="xxx",password="xxx")
siot.connect()
siot.loop()
siot.getsubscribe(topic="topic")
主循环部分,每次循环要随机定义地鼠的位置,在随机位置显示地鼠,每次循环将led灯设置低电平熄灭。判断分数是否变化且达到升级分数,如果达到升级条件,则减少地鼠数量和等待时间。判断时间是否达到游戏结束条件,如果达到结束条件,将结束游戏,初始化游戏,将游戏用户名和成绩上传到物联网上。
while True:
for i in range(num):
x = random.randint(0,190)
y = random.randint(6,270)
dishu.config(x=x,y=y)
text_value.config(text=score)
led.write_digital(0)
if score%10 == 0 and is_score_chage(score,last_score):
clear_dishu(dishu)
waite_time = waite_time - 0.2
print(waite_time)
num = num-1
if waite_time>0.2:
tips = gui.draw_text(x=120,y=160,font_size=15,color=(255,0,0),text="难度升级!",origin="center")
time.sleep(2)
tips.remove()
last_score = score
dishu = creat_dishu(num)
else:
clear_dishu(dishu)
end_time = datetime.datetime.now()
last_time = (end_time - start_time).seconds
siot.publish(topic="dishu/control", data=str(user_name)+""+str((end_time - start_time).seconds))
tips = gui.draw_text(x=120,y=150,font_size=15,color=(255,0,0),text="游戏结束!",origin="center")
tips1 = gui.draw_text(x=120,y=170,font_size=15,color=(255,0,0),text="你的成绩:"+str(last_time)+"秒",origin="center")
time.sleep(2)
tips.remove()
tips1.remove()
num,waite_time,score,last_score,dishu,start_time = init_game()#初始化游戏
siot.publish()上传的主题可以是未创建的主题,则新建主题。
结果展示:
游戏开始展示用户名,展示当前时间。
游戏开始,展示分数进程,每次游戏难度升级界面进行提示难度升级。游戏结束后显示游戏结束没当前用户成绩。
。
当地鼠被击中时,led灯亮起,地鼠变化位置后灯灭。
页:
[1]