进击的方块(二)- pygame自由落体运动

自由落体公式原理:

s = ½ g t²

s是下落的高度,g是重力加速度,t是运动时间。

自由落体运动是指初速度为0,在下落过程中只受重力作用的运动过程。在地球上相同位置与相同高度,自由落体的加速度相同(均为g,与质量无关。) 在这里值得注意的是,自由落体运动特点是:下落的初速度为0,在下落的过程只有重力作用。(不存在空气阻力的理想状态。)

 

了解原理以后,我们开始来做自由落体运动的方块。

 

任务分析:

  1)、制造窗口

  2)、填充背景、方块

  3)、按键监听,上下左右移动

  4)、边界判断、延迟执行

  5)、自由落体运动

  6)、完整代码

 

一、制造窗口

 1 # -*- coding:utf-8 -*-
 2 """
 3 1)、在27中新建一个包,名字:game_3
 4 2)、将桌面上"课件"中的两个文件夹:img,music复制到game_3中
 5 3)、创建一个py文件,名字叫:p
 6 """
 7 import pygame as p  # 人物走动
 8 import os
 9 
10 p.init()
11 WIN_WIDTH, WIN_HEIGHT = 852, 480
12 win = p.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
13 p.display.set_caption("连续移动的自由落体人物")
14 
15 bg = p.image.load(img_base_path + "bg.jpg")
16 
17 run = True
18
19 
20 while run:
21 
22     for e in p.event.get():
23         if e.type == p.QUIT:
24             run = False
25 
26     p.display.update()

二、填充背景、方块

 1 # coding:utf-8
 2 import pygame as p
 3 ...
 4 x,y,width,height,speed = 100,200,50,50,5
 5 while run:
 6     ...
 7     for e in p.event.get():
 8         if e.type == p.QUIT:
 9             run = False
10     # 填充屏幕 fill填充
11     screen.fill((255,0,0))
12     # 画出方块,画在哪里?颜色?位置尺寸
13     p.draw.rect(screen,(0,255,0),(x,y,width,height))
14 
15     # 更新屏幕
16     p.display.update()

三、按键监听,上下左右移动 

 1 # coding:utf-8
 2 ...
 3 p.display.set_caption("灰灰老师")
 4 # 循环 while(当...的时候...怎么办)
 5 run = True # 窗口正在运行
 6 # 当窗口正在运行的时候
 7 # 方块的属性
 8 x,y,width,height,speed = 100,200,50,50,5
 9 while run:
10     # 延迟
11     p.time.delay(25)
12     # 做?
13     for e in p.event.get():
14         if e.type == p.QUIT:
15             run = False
16     # 填充屏幕 fill填充
17     screen.fill((255,0,0))
18     # 画出方块,画在哪里?颜色?位置尺寸
19     p.draw.rect(screen,(0,255,0),(x,y,width,height))
20     # =表示赋值
21    ...
22     # 监听键盘
23     # 1.获取每一个键盘的值
24     keys = p.key.get_pressed()
25     # 2.获取方向键
26     if keys[p.K_RIGHT]:
27         x = x + speed
28     if keys[p.K_LEFT]:
29         x = x - speed
30     if keys[p.K_UP]:
31         y = y - speed
32     if keys[p.K_DOWN]:
33         y = y + speed
34    
35     # 更新屏幕
36     p.display.update()

四、边界判断、延迟执行

 1 # coding:utf-8
 2 import pygame as p
 3 ...
 4 while run:
 5     # 延迟
 6     p.time.delay(25)
 7     # 做?
 8     for e in p.event.get():
 9         if e.type == p.QUIT:
10             run = False
11   ...
12     # 3.边界判断
13     # 右边
14     if x + width > SCREEN_WIDTH:
15         x = SCREEN_WIDTH - width
16     # 左边
17     if x < 0:
18         x = 0
19     if y + height > SCREEN_HEIGHT:
20         y = SCREEN_HEIGHT - height
21     # 左边
22     if y < 0:
23         y = 0
24   ...
25     # 更新屏幕
26     p.display.update()

五、自由落体运动

 1 # coding:utf-8
 2 import pygame as p
 3 ...
 4 t = 10
 5 isJump = False
 6 # 方块的属性
 7 x,y,width,height,speed = 100,200,50,50,5
 8 while run:
 9     ...
10     # 监听键盘
11     # 1.获取每一个键盘的值
12     keys = p.key.get_pressed()
13     ...
14     # 按空格键的时候进行自由落体运动
15     if keys[p.K_SPACE]:
16         # 是否正在跳跃
17         isJump = True #False
18     if isJump:
19         # -10是自由落体运动的起点
20         if t >= -10:
21             g = 1
22             if t < 0:
23                 g = -1
24             y -= 0.5 * g * (t ** 2)
25             t -= 1
26         else:
27             isJump = False
28             t = 10
29     # 更新屏幕
30     p.display.update()

六 、完整代码

 1 # coding:utf-8
 2 import pygame as p
 3 # init初始化
 4 p.init()
 5 SCREEN_WIDTH,SCREEN_HEIGHT = 600,600
 6 screen = p.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
 7 p.display.set_caption("灰灰老师")
 8 # 循环 while(当...的时候...怎么办)
 9 run = True # 窗口正在运行
10 # 当窗口正在运行的时候
11 t = 10
12 isJump = False
13 # 方块的属性
14 x,y,width,height,speed = 100,200,50,50,5
15 while run:
16     # 延迟
17     p.time.delay(25)
18     # 做?
19     for e in p.event.get():
20         if e.type == p.QUIT:
21             run = False
22     # 填充屏幕 fill填充
23     screen.fill((255,0,0))
24     # 画出方块,画在哪里?颜色?位置尺寸
25     p.draw.rect(screen,(0,255,0),(x,y,width,height))
26     # =表示赋值
27 
28     # 监听键盘
29     # 1.获取每一个键盘的值
30     keys = p.key.get_pressed()
31     # 2.获取方向键
32     if keys[p.K_RIGHT]:
33         x = x + speed
34     if keys[p.K_LEFT]:
35         x = x - speed
36     if keys[p.K_UP]:
37         y = y - speed
38     if keys[p.K_DOWN]:
39         y = y + speed
40     # 3.边界判断
41     # 右边
42     if x + width > SCREEN_WIDTH:
43         x = SCREEN_WIDTH - width
44     # 左边
45     if x < 0:
46         x = 0
47     if y + height > SCREEN_HEIGHT:
48         y = SCREEN_HEIGHT - height
49     # 左边
50     if y < 0:
51         y = 0
52     # 按空格键的时候进行自由落体运动
53     if keys[p.K_SPACE]:
54         # 是否正在跳跃
55         isJump = True #False
56     if isJump:
57         # -10是自由落体运动的起点
58         if t >= -10:
59             g = 1
60             if t < 0:
61                 g = -1
62             y -= 0.5 * g * (t ** 2)
63             t -= 1
64         else:
65             isJump = False
66             t = 10
67     # 更新屏幕
68     p.display.update()

 

posted @ 2019-07-14 09:42  灰灰老师  阅读(733)  评论(0)    收藏  举报