本帖最后由 小梁老师 于 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
|