Pygame学习之路 - 植物大战僵尸(一) 搭建框架

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

        最近研究pygame,在这里,使用到csdn来记录一下自己开发的过程,方便后续的bug修复,在本项目中,使用的python是3.11.2,那么开始进入到框架的搭建

        主要思路:因为植物大战僵尸这个项目还是挺大的,涉及到方方面面的功能,也要考虑到后期的升级和修改,所以在这个项目当中,每一个单独的功能需要使用一个py文件进行创建

        下面是我暂时想到的框架内容,可能后续会再次加入新的功能

        到这里就是我的全部文件就完成了布局,暂时没有去考虑菜单功能,先做到可以战斗吧,菜单功能后续有机会会进行添加        

        在进行游戏布局之前,需要先确定一些数据,我这里使用json文件来控制卡牌数据,下面的内容是现阶段写在Card.json文件的内容

{
  "SunFlower": {
    "id": 1,
    "EnglishName": "SunFlower",
    "name": "向日葵",
    "CardImage": "File/Card/",
    "image": "File/Plant/",
    "introduce": "",
    "sun": 50,
    "cd": 5,
    "life": 100,
    "attack": 0,
    "attack_interval": 15,
    "can_attack": true,
    "start": true
  },
  "PeaShooter": {
    "id": 2,
    "EnglishName": "PeaShooter",
    "name": "豌豆射手",
    "CardImage": "File/Card/",
    "image": "File/Plant/",
    "introduce": "",
    "sun": 100,
    "cd": 5,
    "life": 100,
    "attack": 20,
    "attack_interval": 1.5,
    "can_attack": true,
    "start": true
  },
  "PotatoMine": {
    "id": 3,
    "EnglishName": "PotatoMine",
    "name": "土豆雷",
    "CardImage": "File/Card/",
    "image": "File/Plant/",
    "introduce": "",
    "sun": 25,
    "cd": 15,
    "life": 100,
    "attack": 500,
    "attack_interval": 10,
    "can_attack": true,
    "start": false
  },
  "IceArcher": {
    "id": 4,
    "EnglishName": "IceArcher",
    "name": "寒冰射手",
    "CardImage": "File/Card/",
    "image": "File/Plant/",
    "introduce": "",
    "sun": 175,
    "cd": 10,
    "life": 150,
    "attack": 20,
    "attack_interval": 1.5,
    "can_attack": true,
    "start": false
  },
  "WallNut": {
    "id": 5,
    "EnglishName": "WallNut",
    "name": "坚果墙",
    "CardImage": "File/Card/",
    "image": "File/Plant/",
    "introduce": "",
    "sun": 50,
    "cd": 20,
    "life": 400,
    "attack": 0,
    "attack_interval": 0,
    "can_attack": false,
    "start": false
  },
  "CherryBomb": {
    "id": 6,
    "EnglishName": "CherryBomb",
    "name": "樱桃炸弹",
    "CardImage": "File/Card/",
    "image": "File/Plant/",
    "introduce": "",
    "sun": 150,
    "cd": 25,
    "life": 150,
    "attack": 400,
    "attack_interval": 0,
    "can_attack": true,
    "start": false
  }
}

        上面的一些数据的解释是这样的

json文件含义对照
id植物的唯一代码,用来确定植物的选择
EnglishName植物的英文名字
name植物的中文名字
CardImage卡片状态下,植物图片的内存地址
iamge选择卡片后,植物跟随鼠标的图片内存地址
introduce简单的植物介绍
sun种植需要消耗的阳光
cd冷却时间
life植物的生命值
attack植物的攻击力
attack_interval攻击间隔,如果为0表示是消耗品,攻击结束后消失
can_attack植物是否会攻击,如果会并且攻击力>0,那么僵尸出现后或者触碰到后会自动攻击(因为植物的特性会有些差异)
start开局进入冷却,true表示不进入,false表示开局冷却

        准备工作就绪,下面就开始进入main函数的主逻辑,先让窗口可以创建出来,下图为main.py的代码,到这里,准备工作完成,接下来就是进入到一些场景布置的功能了!

import pygame
import Setting
from pygame.locals import *

pygame.init()
window = pygame.display.set_mode((Setting.WIDTH, Setting.HEIGHT))  # 窗口


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


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


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


def draw():
    """绘制函数,控制绘制内容的主逻辑"""


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

持续更新中……

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值