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

2022-11-11 20:08:49 浏览数 (2)

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

实现卷轴背景

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

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

创建两个背景角色

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

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

角色名.draw()

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

背景角色向左移动

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

交替拼接背景角色

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

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

py

代码语言:javascript复制
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

代码语言:javascript复制
def on_key_down(key): 
    if key == keys.SPACE:
        ......

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

update()

py

代码语言:javascript复制
def update():
    if keyboard.space:
        ......

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

py

代码语言:javascript复制
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

代码语言:javascript复制
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

代码语言:javascript复制
def update():
    if magma.image == '岩浆1'
        magma.image = '岩浆2'
    else:
        magma.image = '岩浆1'

障碍物角色往复随机出现

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

创建障碍物角色并绘制

py

代码语言:javascript复制
#创建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坐标))

显示内容 ==> 字符串类型

完整代码

穿越大峡谷

0 人点赞