注:这个系列文章的全部内容里面包含自己写的一些思路,难免会有时候同一个文章中需要多次修改代码的情况,但是编程就是这样(个人觉得)在修改中不断的完善代码,慢慢解决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数据参考的内容,很直观:

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

被折叠的 条评论
为什么被折叠?



