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]