“跳一跳”是微信裏的經典小遊戲,玩法簡單卻很上癮:玩家需要控制小方塊在不同的平台上跳躍,跳得越準越高分。今天,我們用 Python 來實現一個簡易版本,讓你掌握 遊戲開發基礎、物理模擬和事件交互 的核心技巧。
一、工具選擇
Python 開發小遊戲常用庫:
- Pygame:Python 遊戲開發的標準庫,支持圖形、音效、鍵盤鼠標操作
- Tkinter:Python 內置 GUI 庫,也可以做簡單遊戲
- Arcade:Python 的現代遊戲庫,簡潔高效
本文使用 Pygame,因為功能強大、易上手。
安裝 Pygame:
pip install pygame
二、遊戲邏輯分析
“跳一跳”的核心邏輯包括:
-
角色與平台
- 角色:一個可跳躍的方塊
- 平台:小方塊或圓形的平台,隨機排列
-
跳躍機制
- 跳躍高度與按鍵時間(長按)成正比
- 水平移動根據上一個平台位置動態調整
-
得分與判定
- 跳到平台中心越接近中心得分越高
- 跳空或落在平台外判定失敗
三、代碼實現
下面給出一個簡化版的跳一跳遊戲示例:
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 初始化、主循環、事件處理)
- 物理模擬(重力、跳躍、碰撞檢測)
- 動態遊戲元素生成(平台隨機生成)
從這裏出發,你可以不斷擴展功能,最終做出一個完整的跳一跳小遊戲。