当前位置: 首页 > news >正文

Python经典游戏:植物大战僵尸(附源码!)

游戏完整源码素材资源,都打包在一块了。需要的朋友,戳文字!

已有的植物:向日葵,豌豆射手,坚果墙,寒冰射手,樱桃炸弹,双发射手,三线射手,大嘴花,小喷菇,土豆雷,地刺,胆小菇,倭瓜,火爆辣椒,阳光菇,寒冰菇,魅惑菇,火炬树桩,睡莲,杨桃,咖啡豆,海蘑菇,高坚果,缠绕水草,毁灭菇,墓碑吞噬者,大喷菇,大蒜,南瓜头

* 已有的僵尸:普通僵尸,旗帜僵尸,路障僵尸,铁桶僵尸,读报僵尸,橄榄球僵尸,鸭子救生圈僵尸,铁门僵尸,撑杆跳僵尸,冰车僵尸,潜水僵尸

图片

* 使用JSON文件记录关卡信息数据

* 在0.8.18.0及以后直接用python记录关卡的不可变数据,JSON目前仅用于用户存档

* 支持选择植物卡片

* 支持白昼模式,夜晚模式,泳池模式,浓雾模式(暂时没有加入雾),传送带模式和坚果保龄球模式

* 支持背景音乐播放

* 支持调节音量

* 支持音效

* 支持与背景音乐一起调节音量

* 支持全屏模式

* 按`F`键进入全屏模式,按`U`键恢复至窗口模式

* 支持用小铲子移除植物

* 支持分波生成僵尸

* 支持“关卡进程”进度条显示

* 夜晚模式支持墓碑以及从墓碑生成僵尸

* 含有泳池的模式支持在最后一波时从泳池中自动冒出僵尸

↓ 源码如下 ↓

# -*- coding: utf-8 -*-
# @Author : 玉玉子
# 微信公众号:Python玉玉子
import logging
import traceback
import os
import pygame as pg
from logging.handlers import RotatingFileHandler

# 由于在后续本地模块中存在对pygame的调用,在此处必须完成pygame的初始化
os.environ["SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR"] = "0"  # 设置临时环境变量以避免Linux下禁用x11合成器
pg.init()

from source import tool
from source import constants as c
from source.state import mainmenu, screen, level

if __name__ == "__main__":
    # 日志设置
    if not os.path.exists(os.path.dirname(c.USERLOG_PATH)):
        os.makedirs(os.path.dirname(c.USERLOG_PATH))
    logger = logging.getLogger("main")
    formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
    fileHandler = RotatingFileHandler(c.USERLOG_PATH, "a", 1_000_000, 0, "utf-8")
    # 设置日志文件权限,Unix为644,Windows为可读写;Python的os.chmod与Unix chmod相同,但要显式说明8进制
    os.chmod(c.USERLOG_PATH, 0o644)
    fileHandler.setFormatter(formatter)
    streamHandler = logging.StreamHandler()
    streamHandler.setFormatter(formatter)
    logger.addHandler(fileHandler)
    logger.addHandler(streamHandler)

    try:
        # 控制状态机运行
        game = tool.Control()
        state_dict = {c.MAIN_MENU: mainmenu.Menu(),
                      c.GAME_VICTORY: screen.GameVictoryScreen(),
                      c.GAME_LOSE: screen.GameLoseScreen(),
                      c.LEVEL: level.Level(),
                      c.AWARD_SCREEN: screen.AwardScreen(),
                      c.HELP_SCREEN: screen.HelpScreen(),
                      }
        game.setup_states(state_dict, c.MAIN_MENU)
        game.run()
    except:
        print()  # 将日志输出与上文内容分隔开,增加可读性
        logger.error(f"\n{traceback.format_exc()}")

更多Python学习资料请戳👇

http://www.dtcms.com/a/19305.html

相关文章:

  • mac 意外退出移动硬盘后再次插入移动硬盘不显示怎么办
  • springboot整合modbus实现通讯
  • github用户名密码登陆失效了
  • SolidWorks速成教程P3-7【零件 | 第七节】——3D设计打印手机支架+草图文本草图图片材质与质量属性测量
  • TypeScript 面试题
  • 直线导轨尺寸参数
  • 在Autonomous DB中创建训练数据集
  • 机试刷题_数组中出现次数超过一半的数字【python】
  • Linux上Elasticsearch 集群部署指南
  • UE5中的四元数
  • 【kafka系列】日志存储设计 消息写入、读取
  • 基于CXL内存的热数据检测技术解读
  • SpringCloud面试题----如何保证 Spring Cloud 微服务的安全性
  • 【MySQL】数据库基础知识
  • 数据库脚本MySQL8转MySQL5
  • 基于角色访问控制的UML 表示02
  • 【Python】函数
  • Java八股文详细文档.2(基于黑马、ChatGPT、DeepSeek)
  • springboot与springcloud对应版本
  • 【Java学习】类和对象
  • qt QRadioButton 总结
  • C++11新特性之别名模版
  • Python--网络编程
  • 【C++前缀和】1906. 查询差绝对值的最小值|2146
  • DeepSeek-R1-Distill-Qwen-1.5B模型的深度解析
  • Vue.js 组件 - 自定义事件
  • 当通用智能遇到深度推理:如何正确驾驭DeepSeek-V3与R1?
  • 解决Windows11复制文件到桌面会跑左上角第2个位置导致桌面图标位置错乱问题
  • 算法11-分治算法
  • C++字符串处理指南:从基础操作到性能优化——基于std::string的全面解析