当前位置: 首页 > 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学习资料请戳👇

相关文章:

  • 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学习】类和对象
  • 习近平复信中国丹麦商会负责人
  • 订婚不等于性同意!山西订婚强奸案入选最高法案例
  • 香港暂停进口美国北达科他州一地区禽肉及禽类产品
  • 母亲节|写给妈妈
  • 巴西总统卢拉将访华
  • 竞彩湃|霍芬海姆看到保级曙光,AC米兰专注于意大利杯