基本步骤
- 设置游戏窗口
创建窗口,设置标题、背景等基本内容。 - 加载资源
需要准备图片资源,例如植物、僵尸、子弹、草地等图片,还要加载音效资源。 - 创建游戏对象
定义植物、僵尸、子弹类。每个类需要处理它们的属性和行为,比如植物的攻击,僵尸的移动和扣血。 - 处理碰撞
实现植物攻击僵尸,僵尸与植物的碰撞处理。 - 游戏循环
让僵尸在游戏中不断生成,并向左移动,玩家可以种植植物进行防御。
import pygame import random # 初始化Pygame pygame.init() # 定义游戏窗口大小 WIDTH, HEIGHT = 1400, 700 win = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Plants vs Zombies") # 定义一些颜色 WHITE = (255, 255, 255) GRAY = (200, 200, 200) # 用于植物卡槽的背景颜色 # 设置帧率 clock = pygame.time.Clock() FPS = 60 # 加载资源 background_img = pygame.image.load(r"src/img/bg1.jpg") # 草地背景 plant_img = pygame.image.load(r"src/img/plants/Repeater0.png") # 植物 zombie_img = pygame.image.load(r"src/img/zombies/zombie00.png") # 僵尸 # 定义僵尸可能生成的五行的 y 坐标 (从y=100开始绘制背景) zombies_rows_y = [130, 230, 330, 430, 530 ] # 五行坐标 zombies_cols_x = [250 + 80 * x for x in range(0,9)] # 定义植物的列坐标 (从x=150到x=1250, 共9列) plants_rows_y = [630, 230, 330, 430, 530 ] plants_cols_x = [300 + 80 * x for x in range(0,9)] # 植物类 class Plant(pygame.sprite.Sprite): def __init__(self, x, y): super().__init__() self.image = plant_img self.rect = self.image.get_rect() self.rect.center = (x, y) self.health = 100 def update(self): pass # 可以添加攻击逻辑 # 僵尸类 class Zombie(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = zombie_img self.rect = self.image.get_rect() self.rect.x = WIDTH self.rect.y = random.choice(zombies_rows_y) # 僵尸生成在五行中的某一行 self.speed = 2 self.health = 100 def update(self): self.rect.x -= self.speed if self.rect.x < 0: self.kill() # 僵尸到达最左侧时消失 # 查找最接近的网格坐标 def get_nearest_grid(x, y): # 找到最接近的行和列 closest_row = min(plants_rows_y, key=lambda row: abs(row - y)) closest_col = min(plants_cols_x, key=lambda col: abs(col - x)) return closest_col, closest_row # 创建组 plants = pygame.sprite.Group() zombies = pygame.sprite.Group() # 主游戏循环 running = True while running: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 点击鼠标种植植物 if event.type == pygame.MOUSEBUTTONDOWN: x, y = pygame.mouse.get_pos() # 获取最近的网格点坐标 grid_x, grid_y = get_nearest_grid(x, y) plant = Plant(grid_x, grid_y) plants.add(plant) # 生成僵尸 if random.randint(1, 100) < 2: # 2%的几率每帧生成一个僵尸 zombie = Zombie() zombies.add(zombie) # 更新植物和僵尸 plants.update() zombies.update() # 绘制背景和植物卡槽 win.fill(WHITE) # 绘制植物卡槽区域(顶部100像素) pygame.draw.rect(win, GRAY, (0, 0, WIDTH, 100)) # 用灰色绘制卡槽区域 # 在y=100位置开始绘制背景 win.blit(background_img, (0, 100)) plants.draw(win) zombies.draw(win) # 刷新画面 pygame.display.flip() # 退出游戏 pygame.quit()
来自美国·