如果你喜欢自动化:一起学爬虫(Python) — 19 年轻人,进来学自动化
如果你想学习爬虫相关的知识,就关注一下下,点赞一下下,然后到小泽的主页里,尽情遨游吧~
努力做日更博主!如果没有日更,那就做两日更博主,或者三日更,四日更,努力!
如果你好好的从01看过来的话,就会发现我已经成功的水了两篇博客 教了大家两篇博客。
前面的基本上都没有什么难度哦,那今天我们就整一点比较难的,当然这里的难是指比较难理解,毕竟只要捅破那一层薄薄的xxx,思路就很明确了,大家就成长了。
敲代码上的成长,不是身体上的。
俗话说得好,男人最怕的,就是太快了!
所以我们就要慢慢的进入,不能一上来就直接把代码扔各位脸上,这样不光是不尊敬各位,而且还没有什么可阅读性,对吧。
毕竟道理大家都懂,不会真的有人是看小泽写的博客在学习吧,不都是在看乐子吗,不会吧不会吧…
啊,说了这么多,其实就是想让各位点个赞嘛,生活不易,点赞虽然没用,但是好看。
就当是各位付的学费吧,点赞点赞点赞,三连三连三连!
上一篇呢,我们写到了弄出来了一个背景图,对吧,效果是下面这样的:
咳咳,开个玩笑,这样子肯定是不可以的嘛,为什么呢?
Flappy 鸟,鸟呢?
那么我们今天就来弄鸟!
鸟就是…
那我们知道这个有什么用呢?
没有用。
来,进入到我们的鸟类,也就是:
class Bird():
def __init__(self):
pass
我们需要往里面写什么呢?
回顾一下我们的背景图片是怎么设置的:
我们在主进程类里写了一个背景图片的加载,又在主进程类里的run函数里写了一个显示背景,这就是我们对背景图片的处理。
听不懂我在说什么的,罚你去操场跑一百圈,跑不完不许啵上司嘴。
那我们也可以在主进程类里进行一个小鸟图片的显示吧,因为要在那里展示的嘛,但是具体的功能,还有数值,都写在小鸟类里叭!
包括图片的加载哦。
听不懂没关系,我们先把小鸟图片加到小鸟类里:
class Bird():
def __init__(self):
# 加载图片
self.image = pygame.image.load('./sprites/bluebird-midflap.png')
这样的话,只要主进程一调用小鸟类,就会自动加载图片吧,但是肯定是只调用一次嘛,主进程类里是一个死循环的,我们要调用的话会把小鸟类放到死循环外面去调用。
也就是初始化小鸟类。
不过这都是后话了,先来说小鸟类!
当然也可以说一下啦,就比如:
# 调用小鸟类
bird = Bird()
# 拿到小鸟这个图片的对象
bird_image = bird.image
这样我们就可以对这个图片进行显示,放置等等操作…随便玩~
那么我们既然已经成功加载了图片,现在我们需要给图片进行一个参数的设定吧。
就比如我们上货的时候也是要填大小,重量,数量等等的嘛~
class Bird():
def __init__(self):
# 加载图片
self.image = pygame.image.load('./sprites/bluebird-midflap.png')
# 跳跃高度
self.jump = -9
# 重力加速度
self.ft = 1
# 下降的最大速度
self.max_speed = 10
# 当前速度
self.speed = 0
跳跃高度呢,就是我们每一次跳跃会让y轴加上这个跳跃高度。
只要帧率刷新的够快,就不会看出来是一点一点往上移的,就感觉像是飞起来的一样。
重力加速度呢,是因为如果我们不进行跳跃,这个小鸟是会一直往下掉的,而且掉的速度是越来越快的,就是因为有这个重力加速度。
所以我们设置一个重力加速度,也就是一个每次下降速度增加多少的量。
这个游戏是只有一个跳跃键的哦,不是上下键!
下降的最大速度呢,是防止小鸟下降的太快,所以设置了一个阈值,不能超过这个速度,不然一小会不按唰一下就下去了。
当前速度就是小鸟当前的速度(废话),刚开始设置为0,游戏一开始如果我们不按任何东西,小鸟就会慢慢往下降。
白嫖党太多了,虽然我曾经也是一名同好吧,但是求求了,各位点个赞吧,本篇点赞过100,立马更新!
不过分吧,毕竟一千个粉丝,只要十分之一不是白嫖的就好了,呜呜呜T-T
那我们接着写吧,接下来就需要把这些参数给用上,也就是用上这些参数。
class Bird():
def __init__(self):
# 加载图片
self.image = pygame.image.load('./sprites/bluebird-midflap.png')
# 跳跃高度
self.jump = -9
# 重力加速度
self.ft = 1
# 下降的最大速度
self.max_speed = 10
# 当前速度
self.speed = 0
def updata(self):
# 如果当前速度小于最大速度,就让当前速度加上重力加速度
if self.speed < self.max_speed:
self.speed += self.ft
大意了,还要再加两个参数。
是小鸟的坐标。
x轴是可以固定不变的,只有y轴是变化的。
x轴就是横着的那一条,小鸟只能上下移动的。
点完赞了?
快回来继续学吧~
# 宽度是固定的
self.x = 288 * 0.2
self.y = 512 * 0.5
把这两个参数呢,放到鸟类的主函数下面。
x和y就是小鸟的坐标啦,288是游戏窗口的宽度,512是游戏窗口的高度。
这里我们用乘以一个小数的方式来放到合适的位置,当然这个是根据个人喜好的,你也可以设置成你觉得ok的位置!
由于宽度是不变的,也就是小鸟是只能上下动的,所以x是不变的吧,那我们只要让y一直变化,就能实现小鸟的上下摩擦!
class Bird():
def __init__(self):
# 加载图片
self.image = pygame.image.load('./sprites/bluebird-midflap.png')
# 跳跃高度
self.jump = -9
# 重力加速度
self.ft = 1
# 下降的最大速度
self.max_speed = 10
# 当前速度
self.speed = 0
# 宽度是固定的
self.x = 288 * 0.2
self.y = 512 * 0.5
def updata(self):
# 如果当前速度小于最大速度,就让当前速度加上重力加速度
if self.speed < self.max_speed:
self.speed += self.ft
# 让小鸟的y轴坐标加上速度
self.y += self.speed
这样我们的小鸟系就写的差不多啦!
剩下的就是到主进程类里,初始化小鸟系,调用里面的起飞方法,就可以啦~
def run(self):
# 初始化小鸟系,也就是调用小鸟系
bird = Bird()
while True:
# 检测发生的事件
for event in pygame.event.get():
# 如果事件的类型等等于点击关闭按钮,也就是窗口右上角的X
if event.type == pygame.QUIT:
# 中止运行
sys.exit()
# 按下w键时,速度等于-9,也就是让y轴加上了-9,就是往上移了9个像素
if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
bird.speed = bird.jump
# 小鸟移动,因为是一直要移动的,所以放到死循环里
bird.updata()
# 显示背景
self.screen.blit(self.background, (0, 0))
# 显示小鸟,bird.image是小鸟类里的image,也就是self.image
# 因为我们是在小鸟类里加载的小鸟图片
# bird.x和bird.y是self.x和self.y,也就是我们设置的坐标
self.screen.blit(bird.image, (bird.x,bird.y))
# 刷新窗口
pygame.display.update()
但是这样写的话,你会发现打开游戏窗口并看不到小鸟,这是为什么呢?
当小鸟下落的频率比我们能看到的频率还快的时候,我们就看不到小鸟下落了。
这里为了方便看,我们给小鸟设置一个最低下落的高度,也就是不能比窗口的高度减去小鸟的高度还要低。
窗口的高度减去小鸟的高度就是小鸟在窗口最下面的上面的高度。
没错,你听懂了。
def updata(self):
# 如果当前速度小于最大速度
if self.speed < self.max_speed:
# 当前速度加上重力加速度
self.speed += self.ft
# 如果小鸟的y坐标大于等于 窗口的高度 - 小鸟图片的高度
if self.y >= 512-self.image.get_height():
# 就让他们保持相等,也就是不能掉下去
self.y = 512-self.image.get_height()
self.y += self.speed
加上这个之后,我们来试一下吧!
可以看到小鸟是在这里了,而且我们按w是可以往上跳的,但是按得再快也不能让它起飞。
这是因为屏幕刷新的太快啦,所以男人有的时候太慢也是不好的。
如果你的手速能达到每秒按个几百下,估计就可以起飞了~
就是设置一下每秒多少帧,不至于我们的手速反应不过来~
class Game():
def __init__(self):
# 初始化
pygame.init()
# 设置频率
self.fps = pygame.time.Clock()
# 设置长和宽(根据背景图片来设置)
self.screen = pygame.display.set_mode((288, 512))
# 加载背景图片,使用self的话,在这个类中可以任意调用
self.background = pygame.image.load('./sprites/background-day.png')
可以看到,主进程类里多了一个设置频率,这样我们就可以调用fps里面的方法了,也就是pygame.time.Clock()里面的方法!
在哪里调用呢?
在我们的刷新屏幕的后面调用就好啦!
def run(self):
bird = Bird()
while True:
# 检测发生的事件
for event in pygame.event.get():
# 如果事件的类型等等于点击关闭按钮,也就是窗口右上角的X
if event.type == pygame.QUIT:
# 中止运行
sys.exit()
# 向上时,小鸟上移
if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
bird.speed = bird.jump
# 小鸟移动
bird.updata()
# 显示背景
self.screen.blit(self.background, (0, 0))
# 显示小鸟
self.screen.blit(bird.image, (bird.x,bird.y))
pygame.display.update()
# 设置最大帧率
self.fps.tick(30)
这样我们的小鸟就可以被我们玩来玩去啦~
小鸟酱?小鸟酱!
如果有哪里没有搞懂呢,就在留言里或者群里私聊问哦!
那就…因为我也不知道有没有人看这个系列,所以等01,02,03三篇加起来有200赞,就更新下一期!
不难吧,不要白嫖啦T-T
各位姥爷886~
import sys
import pygame
class Game():
def __init__(self):
# 初始化
pygame.init()
# 设置频率
self.fps = pygame.time.Clock()
# 设置长和宽(根据背景图片来设置)
self.screen = pygame.display.set_mode((288, 512))
# 加载背景图片,使用self的话,在这个类中可以任意调用
self.background = pygame.image.load('./sprites/background-day.png')
def run(self):
bird = Bird()
while True:
# 检测发生的事件
for event in pygame.event.get():
# 如果事件的类型等等于点击关闭按钮,也就是窗口右上角的X
if event.type == pygame.QUIT:
# 中止运行
sys.exit()
# 向上时,小鸟上移
if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
bird.speed = bird.jump
# 小鸟移动
bird.updata()
# 显示背景
self.screen.blit(self.background, (0, 0))
# 显示小鸟
self.screen.blit(bird.image, (bird.x,bird.y))
pygame.display.update()
self.fps.tick(30)
class Bird():
def __init__(self):
# 加载图片
self.image = pygame.image.load('./sprites/bluebird-midflap.png')
# 跳跃高度
self.jump = -9
# 重力加速度
self.ft = 1
# 下降的最大速度
self.max_speed = 10
# 当前速度
self.speed = 0
# 宽度是固定的
self.x = 288 * 0.2
self.y = 512 * 0.5
def updata(self):
if self.speed < self.max_speed:
self.speed += self.ft
if self.y >= 512-self.image.get_height():
self.y = 512-self.image.get_height()
self.y += self.speed
if __name__ == '__main__':
game = Game()
game.run()
那就…
200赞见喽!