pygame复刻植物大战僵尸————第2课

基本步骤

  1. 设置游戏窗口
    创建窗口,设置标题、背景等基本内容。
  2. 加载资源
    需要准备图片资源,例如植物、僵尸、子弹、草地等图片,还要加载音效资源。
  3. 创建游戏对象
    定义植物、僵尸、子弹类。每个类需要处理它们的属性和行为,比如植物的攻击,僵尸的移动和扣血。
  4. 处理碰撞
    实现植物攻击僵尸,僵尸与植物的碰撞处理。
  5. 游戏循环
    让僵尸在游戏中不断生成,并向左移动,玩家可以种植植物进行防御。

 


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()


来自美国·
pygame复刻植物大战僵尸————第2课
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇