Pygame学习之路 - 植物大战僵尸(二) 场景布置和卡片放置

文章讲述了在开发植物大战僵尸游戏的过程中,如何完善JSON文件以存储卡片信息,并创建Text类和SeedBank类来管理背景图片、阳光槽和植物种子布局。作者详细介绍了代码的修改过程,包括设置背景图片、创建种子银行、处理卡片点击事件以及实现阳光和植物卡槽的显示与更新。

        注:这个系列文章的全部内容里面包含自己写的一些思路,难免会有时候同一个文章中需要多次修改代码的情况,但是编程就是这样(个人觉得)在修改中不断的完善代码,慢慢解决bug,最后的效果我虽然不清楚能不能完全做出来,但是不试试怎么知道 !

        在游戏框架搭建完成后,那么就要开始完善json文件了,card.json文件当中储存了一些卡片的信息,资料为了方便保存,打包暂时放到百度云当中,下面是卡片的资料链接

       卡片素材

        植物素材

        之后的json文件也需要去添加指定的路径,不止是单纯的根目录,后面需要对应上指定的名字,同时需要再来一个文件夹,取名叫OtherPicture,这个文件用来储存一些其他的素材,如背景图片和阳光槽等。

        那么首先,我们需要先去创建好背景,在这之前,我们需要设置好背景图片的链接,为了方便后续的调用,所以在这里,我把地图的全部数据读取下来了,然后通过setting.py文件来确定,后面的话就只需要在关卡数据当中第一行加入使用的地图就好啦,下面是setting.py文件

        其他素材

import os

WIDTH = 760
HEIGHT = 600

# 全部的背景图片素材,每一关都有对应的编号,会写在关卡配置信息当中,直接读取这些图片路径作为背景
BackGround = [f"File/OtherPicture/BackGround{i}"
              for i in os.listdir("File/OtherPicture/BackGround")]

        其它素材当中的,我们存入了这些数据,有阳光的数据,有植物卡槽和背景,因为背景的图片有点多,所以单独建一个文件夹来进行储存。

        接下来就可以在main函数当中编辑地图的内容了,因为每一关需要去初始一些数据,如地图的图片信息等,所以我们需要在原来main.py文件当中去修改一些内容,加入一个初始化的代码。

import pygame
import Setting
from pygame.locals import *

pygame.init()
window = pygame.display.set_mode((Setting.WIDTH, Setting.HEIGHT))  # 窗口
BG = pygame.image.load(Setting.BackGround[0])  # 先准备加载素材


def mouse_click():
    """鼠标的点击事件,用于处理卡片选择和植物种植,以及铲子的功能"""


def mouse_right():
    """右键事件,点击后取消卡片选择和铲子的功能"""


def set_up():
    """初始化数据加载,每一关开始就运行一次,对于一些数据的初始化"""
    pass


def other_event():
    """一些其他事件,如点击了关闭按钮"""
    for event in pygame.event.get():
        if event.type == QUIT:
            return True


def draw():
    """绘制函数,控制绘制内容的主逻辑"""
    window.blit(BG, (-200, 0))


def run():
    """控制整个程序的主逻辑"""
    clock = pygame.time.Clock()  # 开启游戏时钟
    clock.tick(60)  # 设置游戏帧率

    pygame.display.set_caption("植物大战僵尸 - Pygame")  # 设置窗口标题

    while True:
        if other_event():  # 如点击了退出,那么程序结束
            break

        draw()  # 运行绘制函数
        pygame.display.update()  # 更新屏幕


if __name__ == '__main__':
    run()

        背景布置完成后需要根据图片大小适当调整图片的位置和参考大小,因为之前的760太小了,所以在setting中,扩展到了820,在电脑上的位置还是比较满意的 

        setting.py数据修改了一下

WIDTH = 820
HEIGHT = 600

        下面是目前的窗口状态

        

        然后再加入植物种子槽的布局,并且绘制出来

Seed_Bank = pygame.image.load("File/OtherPicture/SeedBank.png")  # 植物银行,存放植物种子
window.blit(Seed_Bank, (10, 0))

        然后就形成了下面的效果

        因为种子图片(种子槽变化后)和代表阳光的文字都有可能会发生改变,所以考虑现在将它们封装起来,这样修改就会方便很多,但是这个是在主程序不方便放那么多类,所以我们需要在Other_function.py里面进行修改

        并且将左边的阳光储存和后面的植物卡槽分解开,后面的植物卡槽需要和植物的大小相关,暂时不知道多大,但是卡片先放着 60 * 80 大小,后续再看看是不是需要进行修改

        在Other_function.py文件中,我们需要有一些数据,如阳光数量,用于阳光的显示,并且要确保其在中间的位置,在pygame中,可以使用get_rect获取一些点,下面的博文链接是get_rect数据参考的内容,很直观:

        

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值