返回

萌兔跳跃向前冲,踏上像素化冒险之旅

见解分享

跳跳兔六:游戏结束与玩家图片化

跳跳兔五中,我们实现了积分机制、玩家死亡逻辑以及游戏开始界面逻辑。本节将继续完善游戏,实现游戏结束逻辑以及玩家图片化,不再使用方块。

游戏结束逻辑

当玩家死亡时,需要显示游戏结束界面,并展示玩家的分数。为了实现这一点,我们需要在game_over函数中添加以下代码:

def show_gameover():
    # 绘制游戏结束界面
    screen.fill((0, 0, 0))
    font = pygame.font.SysFont(None, 30)
    text = font.render("游戏结束", True, (255, 255, 255))
    text_rect = text.get_rect()
    text_rect.center = (width / 2, height / 2)
    screen.blit(text, text_rect)

    # 展示玩家的分数
    score_text = font.render("得分: " + str(score), True, (255, 255, 255))
    score_text_rect = score_text.get_rect()
    score_text_rect.center = (width / 2, height / 2 + 50)
    screen.blit(score_text, score_text_rect)

    # 更新屏幕
    pygame.display.update()

    # 等待玩家按任意键退出游戏
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                pygame.quit()
                sys.exit()

玩家图片化

目前,玩家仍然是一个方块。为了让游戏更加生动有趣,我们需要将玩家图片化。首先,我们需要创建一个玩家图片。可以使用任何图像编辑软件,比如Photoshop或GIMP,创建一个32x32像素的图片。图片的内容可以是任何东西,比如一个兔子、一个外星人,或者任何你喜欢的东西。

创建好玩家图片后,需要将其保存为PNG格式。然后,在Pygame中,可以使用以下代码加载玩家图片:

player_image = pygame.image.load("player.png")

现在,我们需要在游戏主循环中,使用player_image绘制玩家。可以使用以下代码:

# 绘制玩家
screen.blit(player_image, (player_x, player_y))

这样,玩家就会变成图片了。

完整代码

以下是完整的代码,包括游戏结束逻辑和玩家图片化:

import pygame
import sys

# 初始化Pygame
pygame.init()

# 设置屏幕大小
width = 800
height = 600
screen = pygame.display.set_mode((width, height))

# 设置游戏标题
pygame.display.set_caption("跳跳兔")

# 设置玩家初始位置
player_x = width / 2
player_y = height - 50

# 设置玩家速度
player_speed_x = 0
player_speed_y = 0

# 设置重力
gravity = 0.5

# 设置平台列表
platforms = []
for i in range(10):
    platform = pygame.Rect(100 * i, height - 100, 100, 20)
    platforms.append(platform)

# 设置积分
score = 0

# 设置游戏是否结束
game_over = False

# 游戏主循环
while True:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_speed_x = -5
            elif event.key == pygame.K_RIGHT:
                player_speed_x = 5
            elif event.key == pygame.K_SPACE:
                if player_y == height - 50:
                    player_speed_y = -10
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                player_speed_x = 0

    # 更新玩家位置
    player_x += player_speed_x
    player_y += player_speed_y

    # 检测玩家是否与平台碰撞
    for platform in platforms:
        if player_y + 32 >= platform.y and player_y + 32 <= platform.y + 20 and player_x + 32 >= platform.x and player_x + 32 <= platform.x + 100:
            player_speed_y = 0
            player_y = platform.y - 32

    # 检测玩家是否掉出屏幕
    if player_y > height:
        game_over = True

    # 更新积分
    if player_y + 32 <= 0:
        score += 1

    # 绘制屏幕
    screen.fill((0, 0, 0))

    # 绘制平台
    for platform in platforms:
        pygame.draw.rect(screen, (255, 255, 255), platform)

    # 绘制玩家
    screen.blit(player_image, (player_x, player_y))

    # 显示分数
    font = pygame.font.SysFont(None, 30)
    text = font.render("得分: " + str(score), True, (255, 255, 255))
    text_rect = text.get_rect()
    text_rect.center = (width / 2, 30)
    screen.blit(text, text_rect)

    # 检测游戏是否结束
    if game_over:
        show_gameover()

    # 更新屏幕
    pygame.display.update()

# 游戏结束函数
def show_gameover():
    # 绘制游戏结束界面
    screen.fill((0, 0, 0))
    font = pygame.font.SysFont(None, 30)
    text = font.render("游戏结束", True, (255, 255, 255))
    text_rect = text.get_rect()
    text_rect.center = (width / 2, height / 2)
    screen.blit(text, text_rect)

    # 展示玩家的分数
    score_text = font.render("得分: " + str(score), True, (255, 255, 255))
    score_text_rect = score_text.get_rect()
    score_text_rect.center = (width / 2, height / 2 + 50)
    screen.blit(score_text, score_text_rect)

    # 更新屏幕
    pygame.display.update()

    # 等待玩家按任意键退出游戏
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                pygame.quit()
                sys.exit()

# 加载玩家图片
player_image = pygame.image.load("player.png")

运行游戏

将上述代码保存为一个文件,比如jump_bunny.py。然后,在命令行中运行以下命令:

python jump_bunny.py

游戏