Python创作《穿越大峡谷》游戏


通过Python创作游戏《穿越大峡谷》,从而熟悉卷轴背景、角色切换和飞行及随机出现、计分功能和退出功能的实现。
穿越大峡谷

实现卷轴背景

在游戏中,月月鸟向前飞行的效果,是通过不断左移的背景图来实现的。为了能够让月月鸟不断向前飞行,需要通过卷轴来实现无限延长的背景。

卷轴效果
1. 创建两个背景角色
2. 背景角色向左移动
3. 交替拼接背景角色

创建两个背景角色

角色名 = Actor(‘造型名称’)

创建好角色后,需要设置角色的初始位置坐标。
角色坐标,就是角色中心点的位置。

角色名.draw()

创建好角色后,需要使用draw()函数绘制角色。

背景角色向左移动

程序运行时,每秒钟会调用60次update()函数。
想要实现背景角色不断左移,需要在update()函数 的下级代码中,减小角色的x坐标。

交替拼接背景角色

当角色1完全移出窗口以后,我们需要将它拼接到 角色2的右侧,然后再继续一起向左移动。同样的, 当角色2完全移出窗口以后,我们需要将它拼接到 角色1的右侧,然后再继续一起向左移动。

判断角色是否移出窗口,可以在update()函数中判断 角色的x坐标。

py

import pgzrun
WIDTH = 1000
HEIGHT = 500
bg1 = Actor('背景图1')                         #创建角色bg1
bg1.x = 500
bg1.y = 250
bg2 = Actor('背景图2')                         #创建角色bg2
bg2.x = bg1.x + 1000
bg2.y = 250
#绘制背景角色
def draw():
    bg1.draw()
    bg2.draw()
#在update()函数中,减小角色的x坐标,实现不断左移的效果
def update():
    bg1.x -= 7
    bg2.x -= 7
    #当角色bg1移出窗口时将它拼接到bg2的右侧
    if bg1.x < -500:
        bg1.x = bg2.x + 1000
    #当角色bg2移出窗口时将它拼接到bg1的右侧
    if bg2.x < -500:
        bg2.x = bg1.x + 1000
pgzrun.go()
[/code]

角色造型切换

创建并绘制好月月鸟角色以后,想要实现月月鸟扇动翅膀的效果,我们需要让月月鸟来回切换两种造型。 [code title=py] import pgzrun WIDTH = 1000 HEIGHT = 500 bird = Actor('月月鸟1') #创建角色bird bird.x = 200 bird.y = 100 #绘制角色 def draw(): bird.draw() def update(): #想要一直重复切换造型,需要使用update()函数 #当角色bird的造型为月月鸟1时,将造型切换为月月鸟2 if bird.image == '月月鸟1': bird.image = '月月鸟2' #否则,当角色bird的造型为月月鸟2时,将造型切换为月月鸟1 else: bird.image = '月月鸟1' pgzrun.go()

控制角色飞行

通过空格键控制月月鸟上下飞行:
按住空格键时,月月鸟会一直向上飞行;
松开空格键时,月月鸟会一直向下飞行。

on_key_down()

py

def on_key_down(key): 
    if key == keys.SPACE:
        ......

写在on_key_down()函数中,程序只会在每次按下键盘的时候,执行一次。

update()

py

def update():
    if keyboard.space:
        ......

写在update()函数中,只要按住按键,代码就会被一直重复执行。

py

import pgzrun

WIDTH = 1000
HEIGHT = 500

bird = Actor('月月鸟1')                  
bird.x = 200
bird.y = 100

#绘制角色
def draw():
    bird.draw()

def update():
    #当按下空格键时,角色bird向上飞行,y坐标减小5
    if keyboard.space:
        bird.y -= 5
    #当松开空格键时,角色bird向下飞行,y坐标增加5
    else:
        bird.y += 5

pgzrun.go()

为了避免让角色飞出窗口,需要限制角色y坐标的取值范围。
月月鸟的高度为70,窗口高度为500; 当月月鸟碰到窗口上方时,月月鸟的y坐标为35; 当月月鸟碰到窗口下方时,月月鸟的y坐标为465; 因此,月月鸟y坐标的取值范围为35到465。

py

import pgzrun

WIDTH = 1000
HEIGHT = 500

bird = Actor('月月鸟1')                  
bird.x = 200
bird.y = 100

#绘制角色
def draw():
    bird.draw()

def update():
    if keyboard.space:
        if bird.y >35:                 #当角色的坐标小于35时,才可以继续向上飞行
            bird.y -= 5
    else:
        if bird.y < 465:               #当角色的坐标大于465时,才可以继续向下飞行
            bird.y += 5

pgzrun.go()
[/code]


岩浆角色切换造型

岩浆角色 实现效果:位于窗口底部,并有不断流动的效果 思路: 1. 创建障碍物角色并绘制 2. 不断切换造型

创建岩浆角色并绘制

[code title=py] magma = Actor('岩浆1') magma.x = 500 magma.y = 480 def draw(): bg1.draw() bg2.draw() bird.draw() magma.draw()

不断切换造型

py

def update():
    if magma.image == '岩浆1'
        magma.image = '岩浆2'
    else:
        magma.image = '岩浆1'

障碍物角色往复随机出现

障碍物角色
效果:
不断有障碍物从右侧随机出现,并向左移动
思路:
1. 创建障碍物角色并绘制
2. 障碍物不断向左移动,移到窗口左侧后回到右侧
3. 障碍物回到右侧后,随机切换造型

创建障碍物角色并绘制

py

#创建3个障碍物角色
b1 = Actor('藤蔓')
b1.x = 1000
b1.y = 100

b2 = Actor('枝干')
b2.x = 1600
b2.y = 75

b3 = Actor('尖刺')
b3.x = 2100
b3.y = 400

#将3个障碍物角色存放在列表中,简化绘制和移动的代码
blocks = [b1, b2, b3]

#在draw函数中遍历blocks,绘制障碍物
def draw():
    for b in blocks:
        b.draw()

障碍物移动

障碍物不断向左移动,移到窗口左侧后回到右侧。
穿越大峡谷

障碍物切换

障碍物回到右侧后,随机切换造型
思路:
将造型名称存放在列表names中,在列表索引范围内取一个随机数n,将造型设为names[n];将造型对应 的y坐标存放在列表num中,将y坐标设为num[n]
穿越大峡谷

退出功能

效果:
当月月鸟碰到障碍物或者岩浆时,就退出程序
1. 检测碰撞

角色1.colliderect(角色2)

2. 退出程序

exit()

代码示例:
穿越大峡谷

计分功能

效果
当障碍物移出窗口左侧时,得一分
1.全局变量 vs 局部变量
全局变量
2.在pygame窗口中显示文本

screen.draw.text('显示内容',(x坐标,y坐标))

显示内容 ==> 字符串类型
穿越大峡谷

完整代码

Windows/macOS // Python版本 // 1KB // 下载1次

写于2022年9月14日
没有伞的孩子,必须学会努力奔跑。

赞助 点赞 1 unread messages

UI柒等人对本文发表了2条热情洋溢的评论。
  • Kevin说道: 3
    嗯,才刚开始接触。
  • UI柒说道: 0
    最近想法有点多,开始积累项目了吧
  • 发表回复

    您的电子邮箱地址不会被公开。