2022-12-6 17:44:11 [显示全部楼层]
4103浏览
查看: 4103|回复: 0

[M10项目] 行空板UNIHIKER实现打地鼠游戏

[复制链接]
本帖最后由 Lillian 于 2022-12-14 10:23 编辑

项目背景:


打地鼠游戏是小朋友都非常喜欢的一个游戏,今天分享一个利用行空板实现打地鼠游戏。至逝去的童年。
游戏主要目标是在最短时间内得到指定的分数,打到一个地鼠得到1分,完成时间越短,成绩越好。地鼠数量和地鼠停留时间随着难度升级减少。小游戏难度分为多级,达到一定分数之后,游戏难度升级。

硬件设备:

  • UNIHIKER 行空板
  • digital led model



软件清单:

  • mind+ python模式


代码下载:



代码描述:

导入行空板依赖库,主要使用unihiker绘制gui界面,显示地鼠,led传感器使用pinpong库,导入python相关random,datatime等,siot库将用户名和用户成绩上传到物联网上。
  1. from unihiker import GUI
  2. from pinpong.board import Board,Pin
  3. from pinpong.extension.unihiker import *
  4. import random
  5. import time
  6. import datetime
  7. import siot
复制代码
初始化游戏,定义开始地鼠数量、等待时间,初始化分数、开始时间。
  1. def init_game():
  2.     num = 5
  3.     waite_time = 1
  4.     score = 0
  5.     last_score = 0
  6.     dishu = creat_dishu(num)  #创建地鼠
  7.     start_time = datetime.datetime.now()
  8.     return num,waite_time,score,last_score,dishu,start_time
复制代码


定义打中地鼠函数,如果打中地鼠,分数加一,led灯点亮一次,行空板发出声音提示一次
  1. def on_click():
  2.     global score
  3.     score = score + 1
  4.     led.write_digital(1)
  5.     buzzer.pitch(147, 4) #播放音符
复制代码
定义创建地鼠函数,根据传入的地鼠数量创建地鼠,返回值是地鼠列表。gui.draw_image()方法显示地鼠。
  1. def creat_dishu(num):
  2.     dishu = []
  3.     for i in range(num):
  4.         dishu.append(gui.draw_image(image="dishu.jpg",x=0,y=100,w=50,h=50,onclick=on_click))
  5.     return dishu
复制代码
初始化mqtt传输协议,连接网络,准备发送消息。输入siot_dishu ,server ,port ,user ,password
  1. def init_mqtt():
  2.     siot.init(client_id="siot_dishu",server="10.1.2.3",port=1883,user="xxx",password="xxx")
  3.     siot.connect()
  4.     siot.loop()
  5.     siot.getsubscribe(topic="topic")
复制代码

主循环部分,每次循环要随机定义地鼠的位置,在随机位置显示地鼠,每次循环将led灯设置低电平熄灭。判断分数是否变化且达到升级分数,如果达到升级条件,则减少地鼠数量和等待时间。判断时间是否达到游戏结束条件,如果达到结束条件,将结束游戏,初始化游戏,将游戏用户名和成绩上传到物联网上。
  1. while True:
  2.     for i in range(num):
  3.         x = random.randint(0,190)
  4.         y = random.randint(6,270)
  5.         dishu[i].config(x=x,y=y)
  6.    
  7.     text_value.config(text=score)
  8.     led.write_digital(0)
  9.     if score%10 == 0 and is_score_chage(score,last_score):
  10.         clear_dishu(dishu)
  11.         
  12.         
  13.         waite_time = waite_time - 0.2
  14.         print(waite_time)
  15.         
  16.         num = num-1
  17.         if waite_time>0.2:
  18.             tips = gui.draw_text(x=120,y=160,font_size=15,color=(255,0,0),text="难度升级!",origin="center")
  19.             time.sleep(2)
  20.             tips.remove()
  21.             
  22.             last_score = score
  23.             dishu = creat_dishu(num)
  24.         else:
  25.             clear_dishu(dishu)
  26.             end_time = datetime.datetime.now()
  27.             last_time = (end_time - start_time).seconds
  28.             siot.publish(topic="dishu/control", data=str(user_name)+"  "+str((end_time - start_time).seconds))
  29.             tips = gui.draw_text(x=120,y=150,font_size=15,color=(255,0,0),text="游戏结束!",origin="center")
  30.             tips1 = gui.draw_text(x=120,y=170,font_size=15,color=(255,0,0),text="你的成绩:"+str(last_time)+"秒",origin="center")
  31.            
  32.             time.sleep(2)
  33.             tips.remove()
  34.             tips1.remove()
  35.             num,waite_time,score,last_score,dishu,start_time = init_game()  #初始化游戏
复制代码

siot.publish()上传的主题可以是未创建的主题,则新建主题。行空板UNIHIKER实现打地鼠游戏图2
结果展示:

游戏开始展示用户名,展示当前时间。

行空板UNIHIKER实现打地鼠游戏图3
游戏开始,展示分数进程,每次游戏难度升级界面进行提示难度升级。游戏结束后显示游戏结束没当前用户成绩。

行空板UNIHIKER实现打地鼠游戏图4行空板UNIHIKER实现打地鼠游戏图5行空板UNIHIKER实现打地鼠游戏图6行空板UNIHIKER实现打地鼠游戏图8
当地鼠被击中时,led灯亮起,地鼠变化位置后灯灭。
行空板UNIHIKER实现打地鼠游戏图7
















TueDecember-202212061482..png
TueDecember-202212065614..png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

硬件清单

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

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

mail