现在马里奥走路如入无人之境,我们为了增加游戏的难度,给他设置一个水管障碍物,代码如下所示:
02\01.py
|
import pygame
# 初始化pygame pygame.init()
# 设置窗口大小 WIDTH = 600 HEIGHT = 400 screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 设置窗口标题 pygame.display.set_caption('super mario bros')
# 避免输入法影响按键 pygame.key.stop_text_input()
# 时钟 clock = pygame.time.Clock()
# 马里奥位置和大小 x = 10 y = 20 blockWidth = 30 blockHeight = 30
# 障碍物大小 blockSize = 30
# 主循环 isRunning = True while isRunning: for event in pygame.event.get(): if event.type == pygame.QUIT: isRunning = False
# 获取按键状态 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: print("按了左方向键") if x > 0: x = x - 2 if keys[pygame.K_RIGHT]: print("按了右方向键") if x + blockWidth < WIDTH: x = x + 2 if keys[pygame.K_g]: print("按了跳跃键") if y > 0: y = y - 10
# 全屏擦除 screen.fill((0, 0, 0))
# 地平线 pygame.draw.line(screen, (255, 255, 255), (0, 300), (WIDTH, 300), 1) # 画直线
# 障碍物 pygame.draw.rect(screen, (255, 255, 255), ((400, 300 - blockSize * 2), (blockSize, blockSize * 2)), 0)
# 计算马里奥位置 y = y + 4 if y >= 300 - blockHeight: y = 300 - blockHeight
# 显示马里奥 pygame.draw.rect(screen, (255, 255, 255), ((x, y), (blockWidth, blockHeight)), 0) pygame.draw.rect(screen, (0, 0, 0), ((x + 5, y + 5), (blockWidth - 10, blockHeight - 10)), 0)
# 刷新显示 pygame.display.flip()
# 每秒60帧 clock.tick(60) # 退出 Pygame pygame.quit() |
代码只需作出轻微调整,首先,通过变量blockSize定义了一格方块的大小,然后将水管定义为一格宽、两格高,并绘制在地平线上。由于马里奥也是小方块,为了更加清晰地区分,我们将马里奥绘制成空心方块。
运行程序,会发现马里奥可以轻松穿过水管,仿佛水管不存在一般,如图2‑1所示。

图2‑1 马里奥穿越水管