2328浏览
查看: 2328|回复: 0

2.手速小游戏(行空板触摸屏、AB键、光线传感器)

[复制链接]
本帖最后由 小梁老师 于 2022-8-12 02:31 编辑

2.手速小游戏(行空板触摸屏、AB键、光线传感器)图1
【效果预览】

一、学习内容

运用行空板触摸屏、AB键、加速度传感器、光线传感器设计一款手速小游戏。
1.在触摸屏上,快速单击按钮,实现分数增加
2.在AB键上,按住A键并摇一摇,实现分数增加,单击B键分数和时间归零,重新开始游戏3.在光线传感器上,按住A键并在屏幕前左右摆动,通过光线变化实现分数增加

二、学习对象
适合有Python基础五年级以上学生学习

三、学习目标
1.了解pinpong库的加载,熟悉pgzrun(pygame zero)库的使用
2.了解clock.schedule_interval实现倒计时
3.掌握draw()函数的text用法
4.学会if条件语句嵌套的运用

四、学习重难点
1.重点:行空板板载按键和传感器调用自定义函数
2.难点:鼠标事件调用自定义函数

五、学习过程

1.加载第三方库,此项目使用了pygame zero相关功能和板载AB按键和加速度传感器,所以需要加载pinpong、pgzrun、pygame等相关库。
  1. # 加载第三方库
  2. from pinpong.extension.unihiker import *
  3. from pinpong.board import *
  4. import pygame
  5. import pgzrun
  6. import time
复制代码

2.初始化pinpong库和游戏中的多个角色
  1. # 初始化pinpong库
  2. Board().begin()
  3. # 设置屏幕大小
  4. WIDTH = 240
  5. HEIGHT = 320
  6. # 初始分数
  7. score = 0
  8. # 创建按钮角色,设置角色位置
  9. button = Actor("button1_on")
  10. button.center = WIDTH / 2, HEIGHT / 2 + 40
  11. # 剩余时间
  12. time_left = 5
  13. # 游戏状态
  14. game_over = False
复制代码

3.使用draw( )函数显示文本、角色和背景
  1. def draw():
  2.     global game_over,time_left,score
  3.     screen.surface = pygame.display.set_mode((WIDTH, HEIGHT), pygame.FULLSCREEN)
  4.     # 填充浅蓝色的背景
  5.     screen.fill("lightblue")
  6.     # 显示按钮
  7.     button.draw()
  8.     # 显示分数
  9.     screen.draw.text("Score: " + str(score), color="white", center=(WIDTH / 2, 60), fontsize=30)
  10.     # 显示倒计时
  11.     screen.draw.text("Time Left: " + str(time_left), color="white", center=(WIDTH / 2, 30), fontsize=30)
  12.     # 游戏结束后显示最终得分
  13.     if game_over:
  14.         screen.fill("lightblue")
  15.         screen.draw.text("Final Score: " + str(score), center=(WIDTH / 2, 100), fontsize=30)
  16.         # 单击b键重置变量,重新开始游戏
  17.         if keyboard.b:
  18.             game_over = False
  19.             time_left = 5
  20.             score = 0
复制代码

4.添加鼠标事件,单击按钮得分
  1. # 点击按钮,得分增加
  2. def on_mouse_down(pos):
  3.     global score
  4.     if not game_over:  # 如果游戏没有结束
  5.         if button.collidepoint(pos):
  6.             button.image = "button1_off"
  7.             score += 1
  8. # 松开鼠标按钮复原
  9. def on_mouse_up():
  10.     button.image = "button1_on"
复制代码


2.手速小游戏(行空板触摸屏、AB键、光线传感器)图3

5.运用clock.schedule_interval实现倒计时
  1. # 倒计时
  2. def update_time_left():
  3.     global time_left, game_over
  4.     if score > 0:
  5.         if time_left > 0:
  6.             time_left -= 1
  7.         else:
  8.             game_over = True
  9. # 每隔 1 秒调用一次倒计时函数
  10. clock.schedule_interval(update_time_left, 1.0)
复制代码


6.通过加速度传感器和光线传感器,实现摇一摇或晃一晃得分
  1. def update():
  2.     global score
  3.     # 按住A键并摇一摇,实现分数增加
  4.     if keyboard.a:
  5.         if accelerometer.get_strength() > 1.5:
  6.             score += 1
  7.         a = light.read()
  8.         time.sleep(0.1)
  9.         b = light.read()
  10.         time.sleep(0.1)
  11.         if abs(a - b) > 10:
  12.             score += 1
  13. pgzrun.go()
复制代码



2.手速小游戏(行空板触摸屏、AB键、光线传感器)图2 2.手速小游戏(行空板触摸屏、AB键、光线传感器)图4

六、总结提升
1.如果灯光强度太强或太弱,如何改进光线传感器实现得分?
2.基于在本项目的思路,添加更多按钮,实现双人或多人游戏。


下载附件手速小游戏源码及素材.zip



单击.gif
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

硬件清单

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

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

mail