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学习资料请戳👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值