进击的方块(二)- 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()
代码虐我千百遍,我待代码如初恋!--gogo-BUG!
吃过符号的亏,上过大小写的当!--gogo-DEBUG!

浙公网安备 33010602011771号