"跳一跳"是微信里的经典小游戏,玩法简单却很上瘾:玩家需要控制小方块在不同的平台上跳跃,跳得越准越高分。今天,我们用 Python 来实现一个简易版本,让你掌握 游戏开发基础、物理模拟和事件交互 的核心技巧。
一、工具选择
Python 开发小游戏常用库:
- Pygame:Python 游戏开发的标准库,支持图形、音效、键盘鼠标操作
- Tkinter:Python 内置 GUI 库,也可以做简单游戏
- Arcade:Python 的现代游戏库,简洁高效
本文使用 Pygame,因为功能强大、易上手。
安装 Pygame:
bash
pip install pygame
二、游戏逻辑分析
"跳一跳"的核心逻辑包括:
-
角色与平台
- 角色:一个可跳跃的方块
- 平台:小方块或圆形的平台,随机排列
-
跳跃机制
- 跳跃高度与按键时间(长按)成正比
- 水平移动根据上一个平台位置动态调整
-
得分与判定
- 跳到平台中心越接近中心得分越高
- 跳空或落在平台外判定失败
三、代码实现
下面给出一个简化版的跳一跳游戏示例:
python
import pygame
import random
import sys
# 初始化 Pygame
pygame.init()
# 屏幕大小
WIDTH, HEIGHT = 400, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Python 跳一跳")
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
# FPS
clock = pygame.time.Clock()
FPS = 60
# 平台类
class Platform:
def __init__(self, x, y, width=60, height=10):
self.rect = pygame.Rect(x, y, width, height)
def draw(self):
pygame.draw.rect(screen, BLUE, self.rect)
# 小方块类
class Player:
def __init__(self):
self.rect = pygame.Rect(WIDTH//2, HEIGHT-50, 30, 30)
self.vel_y = 0
self.is_jumping = False
self.jump_start = 0
def draw(self):
pygame.draw.rect(screen, RED, self.rect)
def jump(self, power):
self.vel_y = -power
self.is_jumping = True
def update(self):
self.vel_y += 0.5 # 重力
self.rect.y += self.vel_y
if self.rect.bottom > HEIGHT:
self.rect.bottom = HEIGHT
self.is_jumping = False
self.vel_y = 0
# 初始化玩家和平台
player = Player()
platforms = [Platform(random.randint(50, WIDTH-100), HEIGHT - 30)]
# 游戏主循环
score = 0
running = True
jump_power = 0
while running:
screen.fill(WHITE)
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
jump_power = 0
elif event.type == pygame.KEYUP:
if event.key == pygame.K_SPACE:
player.jump(jump_power)
# 按键长按计算跳跃力度
keys = pygame.key.get_pressed()
if keys[pygame.K_SPACE]:
jump_power += 0.2
if jump_power > 15:
jump_power = 15
# 更新玩家状态
player.update()
# 平台绘制
for plat in platforms:
plat.draw()
# 简单碰撞判定
if player.rect.colliderect(plat.rect) and player.vel_y > 0:
player.rect.bottom = plat.rect.top
player.vel_y = 0
player.is_jumping = False
score += 1
# 绘制玩家
player.draw()
# 显示分数
font = pygame.font.SysFont(None, 36)
text = font.render(f"Score: {score}", True, BLACK)
screen.blit(text, (10, 10))
pygame.display.flip()
clock.tick(FPS)
pygame.quit()
sys.exit()
四、核心实现点解析
-
跳跃机制
jump_power随空格长按累加player.jump(jump_power)设置垂直速度,实现跳跃
-
重力与落地判定
vel_y += 0.5模拟重力- 撞到平台或地面时重置速度
-
平台碰撞判定
- 用
pygame.Rect.colliderect()判断玩家是否落在平台上 - 成功落地增加分数
- 用
-
动态平台生成
- 示例中只有一个平台
- 可通过
random.randint动态生成多个不同高度的平台,提高难度
五、可扩展功能
- 丰富平台类型:移动平台、消失平台
- 音效和粒子效果:增强游戏体验
- 关卡与难度:随着分数增加平台间距和高度变化
- 触控或鼠标操作:模拟微信版长按跳跃
六、总结
通过这个简单示例,我们掌握了:
- Python 游戏开发基础(Pygame 初始化、主循环、事件处理)
- 物理模拟(重力、跳跃、碰撞检测)
- 动态游戏元素生成(平台随机生成)
从这里出发,你可以不断扩展功能,最终做出一个完整的跳一跳小游戏。