Pygame(八)事件(1)
前情提要
作业讲解
作业内容
自由落体
- 画一个棕色的扁长方形当地板
- 画一个蓝色小正方形(有能力的可以画球)当小球
- 小球自上而下.起始高度差200
- 每次落地后反弹高度为掉落高度的一半.直到反弹高度<5时停止
- 不考虑加速度.即速度在下落与反弹过程中假高是恒定的
思维分析
方块有两种运动:弹起(向上)与下落(向下)
向上运动按距离来算
向下运动按碰撞来算.
(也可以考虑用时间来算,下落的时间是弹起的时间的两倍)
运动结束的条件是弹起的距离<5
代码:
# /usr/bin/python3
# Author: 爱编程的章老师
# @Time: 2021/1/6 0006
# E-mail: Bluesand2010@163.com
import sys
import pygame
import time
def homework():
'''第七课作业:自落体'''
'''
1. 画一个棕色的扁长方形当地板
2. 画一个蓝色小正方形(有能力的可以画球)当小球
3. 小球自上而下.起始高度差200
4. 每次落地后反弹高度为掉落高度的一半.直到反弹高度<5时停止
5. 不考虑加速度.即速度在下落与反弹过程中假高是恒定的
'''
pygame.init()
s = pygame.display.set_mode((800, 600))
# 地板: floor
floor = pygame.Rect(0, 550, 800, 50)
floor_color = 139, 90, 43,
pygame.draw.rect(s, floor_color, floor)
# 球: ball
ball = pygame.Rect(390, 330,20,20)
ball_color = 0, 0, 255
pygame.draw.circle(s, ball_color, ball.center, 10)
# 球的下面距离地板上面的距离: 反弹的距离等于下落高度的一半
distance = (floor.top - ball.bottom)//2
# 运动标记:是向上,还是向下
dy = 1 # 表示向下, -1 表示向上
print(distance)
pygame.display.update()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
ball.move_ip(0, dy)
if dy == 1:
if ball.colliderect(floor):
dy = -1
elif floor.top - ball.bottom >= distance:
dy = 1
distance //=2
if distance < 5