本帖最后由 小梁老师 于 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.基于在本项目的思路,添加更多按钮,实现双人或多人游戏。 
 
 
 手速小游戏源码及素材.zip 
 
 
 
 |