元豪 发表于 2023-1-24 16:12:31

『用Python做植物大战僵尸』第2期【有鱼币】

本帖最后由 元豪 于 2023-1-28 19:47 编辑


【前言】

啊!今天我元豪又来更新了{:10_256:}

上期回顾

现在是『用Python做植物大战僵尸』的第2期!{:10_298:}

本次素材 ->

本页已结束,请切换下一页^-^


【目标】

本次目标:
1. 实现提示字体闪烁
2. 按空格切换背景
3. 背景向左滑动

本页已结束,请切换下一页^-^


【实现】

先导入我们这次需要的模块

import random


实现第1个目标:实现提示字体闪烁

游戏是要开始的,但是如果你只是放一张图上去,人家怎么知道怎么开始,是吧

所以,我们要提示一下用户,按下空格游戏就开始了

我们写一个函数,用来显示文字

# 展示文字
def showFont(self, text):
    font = pygame.font.SysFont('Arial', 15)
    text2 = font.render(text, True, TEXT_COLOR)
    return text2


我们在调用展示背景的后面加上调用

text = self.showFont('Please press the space bar to start')


现在,我们在显示开始界面时,就会有提示了

但是,有些用户可能不会注意到这一行小字{:10_284:}

那怎么办呢?

我们让字动起来不就行了{:10_256:}

我们来实现闪烁的功能

我们定义一个变量numder,让这个变量自增

当这个变量在10~40之间时,显示,否则消失

在__init__中加入这个代码

self.numder = 0


在循环中加入这个代码

self.showOpen()
self.numder += 1
if self.numder in :
    if self.numder == 40:
      self.numder = 0
    text = self.showFont('Please press the space bar to start')
    self.font_rect = text.get_rect()
    self.window.blit(text, (WIDTH / 2 - self.font_rect.width / 2, 570))


这样,字体闪烁功能就实现了{:10_298:}

实现第2个目标:按空格切换背景

依照这个目标,我们可以定义一个“是否开始游戏”的变量

如果没有,展示开始界面,否则展示游戏背景

self.open = False


先加载图片

# 加载背景图集
self.bgs = [
    pygame.image.load('imgs/bg1.jpg'),
    pygame.image.load('imgs/bg2.jpg')
]
# 设置背景下标
self.bgindex = 0
# 设置背景图
self.bg = self.bgs


定义一个展示背景的方法

# 展示背景
def showBg(self, x, y):
    self.window.blit(self.bg, (x, y))


为了方便下一个目标,我们定义两个变量,储存背景的x, y坐标

# 设置背景x, y坐标
self.bgx, self.bgy = 0, 0


将前面展示的那部分改成下面

if not self.open:
    self.showOpen()
    self.numder += 1
    if self.numder in :
      if self.numder == 40:
            self.numder = 0
      text = self.showFont('Please press the space bar to start')
      self.font_rect = text.get_rect()
      self.window.blit(text, (WIDTH / 2 - self.font_rect.width / 2, 570))
else:
    self.showBg(self.bgx, self.bgy)


然后,在按下空格的时候,检测是否开始游戏

如果没有开始,将“是否开始游戏”改为True

# 获取事件
for event in pygame.event.get():
    # 退出
    if event.type == pygame.QUIT:
      self.end()

    # 获取键盘按下事件
    if event.type == pygame.KEYDOWN:
      # 按下Esc键
      if event.key == pygame.K_ESCAPE:
            self.end()

      if event.key == pygame.K_SPACE:
            if not self.open:
                self.open = True


至此,我们的第二个目标完成了{:10_298:}

实现第3个目标:背景向左滑动

我们只要将背景x坐标自减直到到背景最右边

多出来的部分 = 背景图长度 - 窗口长度

因为要获取背景图的长度,所以我们要提前获得背景图的矩形

# 获取背景图的矩形
self.bg_rect = self.bg.get_rect()


所以只要 self.bgx > -(self.bg_rect.width - WIDTH)

那么我们就进行自增



# 如果游戏还没有开始
# 则放置开始界面
if not self.open:
    self.showOpen()
    self.numder += 1
    print(self.numder)
    if self.numder in :
      if self.numder == 40:
            self.numder = 0
      text = self.showFont('Please press the space bar to start')
      self.font_rect = text.get_rect()
      self.window.blit(text, (WIDTH / 2 - self.font_rect.width / 2, 570))
else:
    self.window.blit(self.xuanze, (self.xuanx, self.xuany))
    if self.xuanx < 0:
      self.xuanx += 10


至此,我们今天的目标就完成啦!{:10_298:}

今日代码 + 素材 ->

如果有兴趣,记得评分 + 订阅哦~

订阅传送门 -> 『用Python做植物大战僵尸』

https://xxx.ilovefishc.com/forum/202301/21/133129oaow9wvuss2oht9p.gif


liuhongrun2022 发表于 2023-1-24 16:13:58

来顶贴了!!{:7_146:}

元豪 发表于 2023-1-24 16:15:46

liuhongrun2022 发表于 2023-1-24 16:13
来顶贴了!!

哇!来这么快!{:10_257:}
奖励一下

元豪 发表于 2023-1-24 16:20:37

@高山 @hveagle @Mike_python小 @小伤口 @sfqxx @zhangjinxuan @python爱好者. @Twilight6

sfqxx 发表于 2023-1-24 16:22:34

9分钟前?还热乎的{:10_256:}
顶!
(有奖励吗?)

一点沙 发表于 2023-1-24 16:28:51

15分钟?好冷!

Mike_python小 发表于 2023-1-24 16:37:04

23分钟,放岩浆里热热还能吃{:10_256:}

lymww 发表于 2023-1-24 16:50:50

顶帖

1molHF 发表于 2023-1-24 17:17:30

1小时,用火爆辣椒烤一烤还能吃{:10_256:}

zhangjinxuan 发表于 2023-1-24 17:18:41

{:10_256:}

元豪 发表于 2023-1-24 17:19:40

送给大家的花花{:10_287:}

yg飞许 发表于 2023-1-24 22:42:24

鱼币

hziyan 发表于 2023-1-24 23:06:48

。。前几天刚看到准备现在就开搞了?{:10_257:}
执行力很强啊{:10_254:}
你是不是天天泡五六个小时在编程里面{:10_256:}

hornwong 发表于 2023-1-25 00:05:51

支持

Mta123456 发表于 2023-1-25 09:18:37

楼主万岁

元豪 发表于 2023-1-25 09:47:37

hziyan 发表于 2023-1-24 23:06
。。前几天刚看到准备现在就开搞了?
执行力很强啊
你是不是天天泡五六个小时在编程 ...

说实话,一天都在电脑面前{:10_256:}

lenghui 发表于 2023-1-25 09:53:49

还在测吗?

hziyan 发表于 2023-1-25 09:56:12

元豪 发表于 2023-1-25 09:47
说实话,一天都在电脑面前

离谱,大过年的不出去走亲戚,去打电脑
我已经被各大亲戚的问候弄得心疲力尽了{:10_266:}

元豪 发表于 2023-1-25 10:22:51

hziyan 发表于 2023-1-25 09:56
离谱,大过年的不出去走亲戚,去打电脑
我已经被各大亲戚的问候弄得心疲力尽了

有时候去吧
大多都是别人来我家

the_ben 发表于 2023-1-25 13:14:52

顶!加油
页: [1] 2
查看完整版本: 『用Python做植物大战僵尸』第2期【有鱼币】