小梁老师 发表于 2022-8-12 02:29:48

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

本帖最后由 小梁老师 于 2022-8-12 02:31 编辑


【效果预览】

一、学习内容
运用行空板触摸屏、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等相关库。
# 加载第三方库
from pinpong.extension.unihiker import *
from pinpong.board import *
import pygame
import pgzrun
import time
2.初始化pinpong库和游戏中的多个角色
# 初始化pinpong库
Board().begin()
# 设置屏幕大小
WIDTH = 240
HEIGHT = 320
# 初始分数
score = 0
# 创建按钮角色,设置角色位置
button = Actor("button1_on")
button.center = WIDTH / 2, HEIGHT / 2 + 40
# 剩余时间
time_left = 5
# 游戏状态
game_over = False
3.使用draw( )函数显示文本、角色和背景def draw():
    global game_over,time_left,score
    screen.surface = pygame.display.set_mode((WIDTH, HEIGHT), pygame.FULLSCREEN)
    # 填充浅蓝色的背景
    screen.fill("lightblue")
    # 显示按钮
    button.draw()
    # 显示分数
    screen.draw.text("Score: " + str(score), color="white", center=(WIDTH / 2, 60), fontsize=30)
    # 显示倒计时
    screen.draw.text("Time Left: " + str(time_left), color="white", center=(WIDTH / 2, 30), fontsize=30)
    # 游戏结束后显示最终得分
    if game_over:
      screen.fill("lightblue")
      screen.draw.text("Final Score: " + str(score), center=(WIDTH / 2, 100), fontsize=30)
      # 单击b键重置变量,重新开始游戏
      if keyboard.b:
            game_over = False
            time_left = 5
            score = 0
4.添加鼠标事件,单击按钮得分。# 点击按钮,得分增加
def on_mouse_down(pos):
    global score
    if not game_over:# 如果游戏没有结束
      if button.collidepoint(pos):
            button.image = "button1_off"
            score += 1

# 松开鼠标按钮复原
def on_mouse_up():
    button.image = "button1_on"



5.运用clock.schedule_interval实现倒计时
# 倒计时
def update_time_left():
    global time_left, game_over
    if score > 0:
      if time_left > 0:
            time_left -= 1
      else:
            game_over = True

# 每隔 1 秒调用一次倒计时函数
clock.schedule_interval(update_time_left, 1.0)

6.通过加速度传感器和光线传感器,实现摇一摇或晃一晃得分。
def update():
    global score
    # 按住A键并摇一摇,实现分数增加
    if keyboard.a:
      if accelerometer.get_strength() > 1.5:
            score += 1
      a = light.read()
      time.sleep(0.1)
      b = light.read()
      time.sleep(0.1)
      if abs(a - b) > 10:
            score += 1

pgzrun.go()




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






页: [1]
查看完整版本: 2.手速小游戏(行空板触摸屏、AB键、光线传感器)