Compare commits

...

145 Commits

Author SHA1 Message Date
wszqkzqk
c88a018209
升级CI到python 3.12 (#21)
Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
2025-06-23 10:40:10 +08:00
sanshi
11c3129ea0
格式化代码以及添加依赖文件配置 (#19)
* refactor: 格式化代码

* 添加依赖文件
2025-06-23 10:21:58 +08:00
wszqkzqk
72915de297
更新CI配置:升级Python版本并添加发布条件 (#20)
* 将CI工作流的Python版本从3.11升级到3.12
* 为所有发布步骤添加仓库条件检测,避免在fork仓库的PR中触发发布

Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
2025-06-21 22:06:19 +08:00
wszqkzqk
268b32bba5
启用pygame缩放 (#18)
* Closes #17

Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
2025-06-12 23:34:52 +08:00
星外之神
47b4ba1783
在夜晚关卡不推荐选择咖啡豆 (#16) 2023-11-24 10:32:11 +08:00
星外之神
9e63c5bf57
Update audio files & CI scripts
* 手动指定依赖文件

* ci

* 包括所有dll

* 手动修复dll包含

* update audio files

* 更改潜水僵尸设定
2023-10-14 13:45:49 +08:00
星外之神
78ba0efbcd
Update audio files & CI scripts
* 手动指定依赖文件

* ci

* 包括所有dll

* 手动修复dll包含

* update audio files
2023-10-11 21:59:47 +08:00
星外之神
70ffd9489d
Dev (#12)
* 手动指定依赖文件

* ci

* 手动修复dll包含
2023-06-01 09:59:48 +08:00
星外之神
daee48eb6e
Merge pull request #11 from wszqkzqk/dev
尝试修复CI
2023-06-01 01:04:54 +08:00
wszqkzqk
5267003c6f
尝试修复CI 2023-06-01 01:04:21 +08:00
星外之神
431d4ae662
Merge pull request #9 from wszqkzqk/dev
小修改: 类型注释 & CI
2023-06-01 00:46:03 +08:00
wszqkzqk
7efd1fcadf
重命名截屏 2023-06-01 00:42:16 +08:00
wszqkzqk
1bcef4d141
移除python 3.10 CI 2023-06-01 00:42:16 +08:00
wszqkzqk
2d368f8bf5
添加类型注解 2023-06-01 00:42:16 +08:00
wszqkzqk
388b3175e0
避免重复构建 2023-06-01 00:42:16 +08:00
星外之神
ffb48381a5
Merge pull request #8 from wszqkzqk/dev
小:统一括号缩进
2022-12-25 16:00:31 +08:00
wszqkzqk
6ac010321a 小:统一括号缩进 2022-12-25 16:00:01 +08:00
星外之神
d07983dbbd
Merge pull request #7 from wszqkzqk/dev
在README中更新数据和日志存储路径
2022-12-25 15:52:24 +08:00
wszqkzqk
fc5029fad3 在README中更新数据和日志存储路径 2022-12-25 15:51:55 +08:00
wszqkzqk
b18e442f66 Linux可执行文件说明 2022-12-13 18:37:19 +08:00
wszqkzqk
fd9253d410 恢复Linux单文件版构建 2022-12-13 18:06:58 +08:00
wszqkzqk
17de44a773 切换到Python 3.10 2022-12-11 14:29:09 +08:00
wszqkzqk
ac392595b0 运行时不禁用x11合成器(Linux) 2022-12-11 11:07:38 +08:00
wszqkzqk
926f40caf9 迁移存档位置 2022-12-10 19:46:14 +08:00
wszqkzqk
63e36df930 面向对象化 2022-11-04 11:16:35 +08:00
wszqkzqk
8ae6b88d8a 使用dev进行开发,master进行发布 2022-11-04 10:52:05 +08:00
星外之神
3ef4570334 恢复python3.10的使用 2022-10-30 17:23:59 +08:00
wszqkzqk
1ec9c19f41 升级Python版本 2022-10-30 11:16:14 +08:00
wszqkzqk
65b7c38078 增加权限设置的可读性 2022-10-30 11:14:42 +08:00
星外之神
05770cf502 统一变量命名风格 2022-10-05 21:28:14 +08:00
星外之神
6c2595d35c 进度推进说明 2022-10-05 18:37:33 +08:00
星外之神
3f22446a85 列入重新面向对象实现的计划 2022-09-14 07:56:51 +08:00
wszqkzqk
5baf11a3f1 优化标志使用 2022-09-14 07:49:05 +08:00
wszqkzqk
f496e576fd 更改不推荐的逻辑顺序,防止海蘑菇错误归类 2022-09-14 07:41:05 +08:00
星外之神
60911bebdd 删除部分冗余结构 2022-09-13 21:21:20 +08:00
星外之神
37d8b29f60 显示当前关卡不推荐选择的卡片提示 2022-09-13 17:22:46 +08:00
星外之神
2235f687dc 更改选中卡片显示 2022-09-13 16:02:12 +08:00
wszqkzqk
533820deda Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-08-30 18:57:43 +08:00
星外之神
8ce2ccf734 统一变量命名风格 2022-08-30 15:06:03 +08:00
星外之神
57501a8f22 统一越界判断函数 2022-08-14 11:03:55 +08:00
星外之神
cf20f9733f 修复更多的地图越界bug 2022-08-14 10:58:12 +08:00
星外之神
f46585264d 修复铲子位置导致的列表越界bug 2022-08-14 10:53:40 +08:00
星外之神
f38e415add 将screen设置为抽象基类;重构 2022-08-11 16:11:11 +08:00
wszqkzqk
a0c8201d26 重构 2022-08-11 10:42:30 +08:00
wszqkzqk
ebf68c0393 Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-08-10 20:26:38 +08:00
wszqkzqk
23824233df 重构 2022-08-10 20:26:30 +08:00
星外之神
5f83d8c805 关卡说明 2022-08-10 10:47:54 +08:00
星外之神
da1eb13946 增加可读性 2022-08-10 10:30:08 +08:00
wszqkzqk
777e937d98 重构 2022-08-09 20:23:47 +08:00
wszqkzqk
08ec7e2d00 平衡难度 2022-08-09 11:01:57 +08:00
wszqkzqk
b7b69cec61 更改卡片显示 2022-08-09 05:46:06 +08:00
wszqkzqk
9e01c018e4 更改缠绕海草攻击范围 2022-08-08 23:59:17 +08:00
wszqkzqk
544560c49e 重构表达式 2022-08-08 23:08:03 +08:00
星外之神
baeb003f5f 修改卡片显示 2022-08-08 18:26:46 +08:00
星外之神
2376922a77 指定编码 2022-08-08 17:34:15 +08:00
星外之神
f37f05b726 改用推导式以便pylance明确数据类型 2022-08-08 16:27:48 +08:00
wszqkzqk
10711a5509 减少try包括的语段 2022-08-08 12:29:14 +08:00
wszqkzqk
1c52ea88f4 更改权限处理方式 2022-08-08 12:21:13 +08:00
wszqkzqk
44ccabd74d 捕捉保存时权限问题 2022-08-08 12:12:36 +08:00
wszqkzqk
f3b602a30e 避免提示的歧义 2022-08-08 10:55:13 +08:00
wszqkzqk
7e93949f91 完善日志 2022-08-08 10:49:18 +08:00
wszqkzqk
6edaf34d11 完善日志机制 2022-08-08 10:38:45 +08:00
wszqkzqk
1c96110e28 整理 2022-08-08 09:05:41 +08:00
wszqkzqk
98463e524b 修复墓碑吞噬者可以种植在墓碑吞噬者上的bug 2022-08-06 15:39:39 +08:00
wszqkzqk
e010251b00 平衡难度 2022-08-06 15:36:47 +08:00
wszqkzqk
506900d21c 减少音乐前间隔 2022-08-06 13:50:30 +08:00
wszqkzqk
d07810afce 点击冒险模式后暂停普通音乐播放 2022-08-06 13:45:48 +08:00
wszqkzqk
139b5d3ef8 删除音频播放前的延迟 2022-08-06 13:44:28 +08:00
星外之神
8067508eb3 修复显示问题 2022-08-05 16:42:58 +08:00
星外之神
d93acfe9e3 修复4-1关的bug 2022-08-05 14:49:21 +08:00
星外之神
0493ec70d5 简化测试关卡 2022-08-05 14:23:36 +08:00
星外之神
95b4d789e5 压缩 2022-08-03 09:15:36 +08:00
wszqkzqk
6ae7007bb9 增加帮助菜单打开音效 2022-08-02 22:29:23 +08:00
星外之神
bf3fdc08b9 优化警告排版 2022-08-02 20:17:12 +08:00
星外之神
9801133724 修复小推车触发bug 2022-08-02 19:41:14 +08:00
星外之神
fde1661ec5 更改标题显示 2022-08-02 19:06:01 +08:00
星外之神
7240c61765 修复坚果保龄球闪退bug 2022-08-02 18:19:35 +08:00
星外之神
8cd22a1140 修复南瓜头bug“安倍晋三的保镖” 2022-08-02 14:49:27 +08:00
星外之神
ce62e9b35c 完善小推车设置 2022-08-02 13:35:25 +08:00
星外之神
9fa8fbb847 加入坚果保龄球2 2022-08-02 12:52:46 +08:00
星外之神
72cad4a3fd 暂时设定为大嘴花没有成功攻击时不发出声音 2022-08-01 23:19:21 +08:00
星外之神
80021191ff 更改大嘴花音效体验 2022-08-01 23:14:01 +08:00
星外之神
205ec949e1 更改小推车机制 2022-08-01 22:54:21 +08:00
星外之神
0f59007e82 修改小推车机制 2022-08-01 22:53:12 +08:00
星外之神
99deb7bbe8 植物卡片在冷却时间不足且阳光也不足时,叠加两者效果显示,即同时改变透明度与图像覆盖 2022-08-01 22:34:58 +08:00
星外之神
2862aa28b5 修复用str作key导致keyerror的问题 2022-08-01 22:30:25 +08:00
星外之神
ac3f7f56d7 统一变量命名规则 2022-08-01 14:44:29 +08:00
星外之神
172b736e2f 统一变量命名规则 2022-08-01 14:39:25 +08:00
星外之神
7c2b72152d 统一命名规则:function、method用驼峰命名法变量用下划线命名法 2022-08-01 14:37:39 +08:00
星外之神
93259a2380 修改成就显示位置 2022-08-01 11:38:51 +08:00
星外之神
177e426ed5 Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-08-01 11:35:15 +08:00
星外之神
a1b7c389a0 平衡难度 2022-08-01 11:34:56 +08:00
wszqkzqk
cb94f49cf9 补全后缀名 2022-07-31 21:33:58 +08:00
星外之神
afda2a02c8 更改子弹生存时间 2022-07-31 10:46:02 +08:00
星外之神
76533796a3 更改毁灭菇阳光 2022-07-31 08:12:44 +08:00
wszqkzqk
6c65b27df6 显示标题 2022-07-30 20:04:30 +08:00
wszqkzqk
428b4df8e7 修复阳光错误 2022-07-30 19:52:45 +08:00
星外之神
a87233c920 忽略更多文件 2022-07-30 13:51:12 +08:00
星外之神
3117a85c88 设置帮助界面标题 2022-07-30 10:39:59 +08:00
星外之神
e00a640d76 添加截图 2022-07-30 10:34:51 +08:00
星外之神
8aea3e7c36 平衡难度 2022-07-30 10:28:53 +08:00
星外之神
02e77c081f 更改colorkey 2022-07-30 10:21:53 +08:00
星外之神
f939e10215 跟进自述文件 2022-07-30 10:12:51 +08:00
星外之神
05144d9a1b 加入帮助界面 2022-07-30 10:11:55 +08:00
星外之神
ad5bd75478 明确变量名含义 2022-07-29 23:23:28 +08:00
星外之神
b9a08ba9aa 完善说明 2022-07-29 22:39:46 +08:00
星外之神
68bfc3269e 要认真写commit的项目还是不要加这两个脚本了 2022-07-29 22:32:21 +08:00
wszqkzqk
286fd32444 整理函数调用 2022-07-29 22:19:11 +08:00
wszqkzqk
ae8492ded7 更改失败界面 2022-07-29 20:15:58 +08:00
wszqkzqk
428f57fac1 胜利界面音乐设定 2022-07-29 20:08:06 +08:00
wszqkzqk
b7452a0635 更改文字显示 2022-07-29 20:06:39 +08:00
wszqkzqk
7263521ef7 更改胜利、失败界面 2022-07-29 19:51:53 +08:00
wszqkzqk
20f6400e9a 修复漏参 2022-07-29 17:08:48 +08:00
wszqkzqk
5f4c571ff6 使用统一双引号 2022-07-29 17:06:17 +08:00
wszqkzqk
4e055429b0 规范常数表达 2022-07-29 17:02:45 +08:00
星外之神
2bca7f1d65 放宽Ag向日葵条件;加入新BGM 2022-07-29 16:21:45 +08:00
星外之神
dd090b022d 修复小游戏通关结果不正常的bug 2022-07-29 15:52:25 +08:00
星外之神
837e225335 微调 2022-07-29 15:16:36 +08:00
星外之神
51f80eb081 完善获得金向日葵的界面 2022-07-29 15:11:20 +08:00
星外之神
14f485e8f5 增加向日葵奖杯获得界面 2022-07-29 14:54:53 +08:00
星外之神
c80df793c4 改进日志;初步引入新界面 2022-07-29 14:01:32 +08:00
星外之神
698f2cbae9 说明最新状态 2022-07-29 12:05:58 +08:00
星外之神
8acb592508 将常数性质的json统一合并到python 2022-07-29 11:59:39 +08:00
星外之神
7c50a29f9e 将地图统一为python内容 2022-07-29 11:17:52 +08:00
星外之神
280d8c2a57 使用字体渲染实现返回按钮 2022-07-29 07:42:23 +08:00
星外之神
c2d1483fb6 更新截图 2022-07-28 23:52:27 +08:00
星外之神
dc87bcadb1 增加成就提示 2022-07-28 23:44:53 +08:00
星外之神
29f47bf789 平衡难度 2022-07-28 22:33:21 +08:00
星外之神
e8380e25ff 统一colorkey 2022-07-28 20:51:40 +08:00
星外之神
7164dd3beb 修复选卡模式下点击菜单会闪退的bug;更改封装 2022-07-28 20:00:40 +08:00
星外之神
be5309f328 修复初始时未应用存档内的音效音量设定的bug 2022-07-28 18:58:52 +08:00
星外之神
04b4bd140a 修复地图路径错误 2022-07-28 18:42:44 +08:00
星外之神
3dc97a4ed4 修正语病 2022-07-28 18:36:52 +08:00
星外之神
ca13fdf085 删除多余的调用 2022-07-28 18:36:03 +08:00
星外之神
290e5d60ff 修复寒冰射手子弹音效播放时闪退的bug 2022-07-28 18:33:36 +08:00
星外之神
59deb4afe4 整理path缩减代码 2022-07-28 18:22:51 +08:00
星外之神
3898dd920d 汇总路径 2022-07-28 17:35:24 +08:00
星外之神
b639e5f5be 增加截图 2022-07-28 16:57:51 +08:00
星外之神
b2a7c22be6 修复没有铲子关卡自动检测铲子点击导致闪退的bug 2022-07-28 16:42:48 +08:00
星外之神
8b74d2cc38 删除冗余信息 2022-07-28 16:27:21 +08:00
星外之神
0b6c545de5 采用海象算子(>=python3.8)减少维护工作量 2022-07-28 16:26:49 +08:00
星外之神
2b85451404 支持自动保存音量设置到文件,以便下次直接应用 2022-07-28 15:48:59 +08:00
星外之神
ffc57d12ff 关卡内也实现了音量调节 2022-07-28 15:38:56 +08:00
星外之神
6508bdcdb7 全面更改音乐机制,支持调节音量 2022-07-28 15:16:00 +08:00
星外之神
3a67b414ee 初步加入音量调节按钮(仅按钮) 2022-07-28 13:02:23 +08:00
284 changed files with 4919 additions and 2490 deletions

View File

@ -14,7 +14,7 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
python_version: python_version:
- '3.10' - "3.12"
name: Windows Python ${{ matrix.python_version }} name: Windows Python ${{ matrix.python_version }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -46,10 +46,11 @@ jobs:
-i ./pypvz.ico -i ./pypvz.ico
- name: Release the version built by pyinstaller - name: Release the version built by pyinstaller
if: github.event.pull_request.head.repo.full_name == github.repository
uses: ncipollo/release-action@v1 uses: ncipollo/release-action@v1
with: with:
allowUpdates: true allowUpdates: true
tag: Current.Version.Built.with.Pyinstaller tag: Dev.Version.Built.with.Pyinstaller
artifacts: ./out/*pyinstaller*.exe artifacts: ./out/*pyinstaller*.exe
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@ -67,74 +68,75 @@ jobs:
--show-memory ` --show-memory `
--output-dir=out ` --output-dir=out `
--windows-icon-from-ico=pypvz.ico ` --windows-icon-from-ico=pypvz.ico `
--include-data-dir=resources=resources `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libogg-0.dll=libogg-0.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libogg-0.dll=libogg-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopus-0.dll=libopus-0.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopus-0.dll=libopus-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbisfile-3.dll=libvorbisfile-3.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libjpeg-9.dll=libjpeg-9.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbis-0.dll=libvorbis-0.dll ` --include-data-dir=resources=resources `
--windows-disable-console ` --windows-disable-console `
-o ./out/pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe ` -o pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
pypvz.py pypvz.py
# artifact压缩包处上传包含exe和运行环境的文件夹 - name: Release the version built by nuitka
- name: "Upload binaries" if: github.event.pull_request.head.repo.full_name == github.repository
uses: actions/upload-artifact@v2 uses: ncipollo/release-action@v1
with: with:
name: artifact-windows-python-${{ matrix.python_version }} allowUpdates: true
path: ./out/*.dist tag: Dev
artifacts: ./out/*nuitka*.exe
token: ${{ secrets.GITHUB_TOKEN }}
#linux: linux:
# runs-on: ubuntu-latest runs-on: ubuntu-latest
# strategy: strategy:
# fail-fast: false fail-fast: false
# matrix: matrix:
# python_version: python_version:
# - '3.10' - "3.12"
# name: Ubuntu Python ${{ matrix.python_version }} name: Ubuntu Python ${{ matrix.python_version }}
# steps: steps:
# - name: 🛎️ Checkout - name: 🛎️ Checkout
# uses: actions/checkout@v2 uses: actions/checkout@v2
# with: with:
# fetch-depth: 0 fetch-depth: 0
# - name: 🐍 Use Python ${{ matrix.python_version }} - name: 🐍 Use Python ${{ matrix.python_version }}
# uses: actions/setup-python@v2 uses: actions/setup-python@v2
# with: with:
# python-version: ${{ matrix.python_version }} python-version: ${{ matrix.python_version }}
# - name: 🧳 Install dependencies - name: 🧳 Install dependencies
# run: | run: |
# sudo apt-get update sudo apt-get update
# sudo apt-get install patchelf gdb ccache libfuse2 sudo apt-get install patchelf gdb ccache libfuse2 zstd tar
# python -m pip install --no-python-version-warning --disable-pip-version-check zstandard appdirs ordered-set tqdm Jinja2 python -m pip install --no-python-version-warning --disable-pip-version-check zstandard appdirs ordered-set tqdm Jinja2
# python -m pip install --no-python-version-warning --disable-pip-version-check nuitka python -m pip install --no-python-version-warning --disable-pip-version-check nuitka
# python -m pip install --no-python-version-warning --disable-pip-version-check pygame python -m pip install --no-python-version-warning --disable-pip-version-check pygame
# # 使用Nuitka构建 # 使用Nuitka构建
# - name: Show nuitka version - name: Show nuitka version
# run: | run: |
# env env
# python -m nuitka --version python -m nuitka --version
# - name: Build pypvz with Nuitka - name: Build pypvz with Nuitka
# run: | run: |
# yes | python -m nuitka \ yes | python -m nuitka \
# --show-progress \ --onefile \
# --follow-imports \ --standalone \
# --show-memory \ --include-data-dir=resources=resources \
# --output-dir=out \ --linux-onefile-icon=pypvz.png \
# --linux-onefile-icon=pypvz.ico \ --static-libpython=no \
# -o ./out/pypvz \ --remove-output \
# --remove-output \ -o pypvz-with-python${{ matrix.python_version }}-linux-x86_64.bin \
# main.py pypvz.py
# cp -r ./resources ./out/resources
# cd out
# tar -cvpaf ../pypvz-with-python${{ matrix.python_version }}-nuitka-linux-x64.tar.zst .
# - name: "Upload binaries" - name: Release the version built by nuitka
# uses: actions/upload-artifact@v2 if: github.event.pull_request.head.repo.full_name == github.repository
# with: uses: ncipollo/release-action@v1
# name: artifact-windows-python-${{ matrix.python_version }} with:
# path: ./pypvz-with-python${{ matrix.python_version }}-nuitka-linux-x64.tar.zst allowUpdates: true
tag: Dev
artifacts: ./pypvz*-x86_64.*
token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -16,7 +16,7 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
python_version: python_version:
- '3.10' - "3.12"
name: Windows Python ${{ matrix.python_version }} name: Windows Python ${{ matrix.python_version }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -69,22 +69,15 @@ jobs:
--show-memory ` --show-memory `
--output-dir=out ` --output-dir=out `
--windows-icon-from-ico=pypvz.ico ` --windows-icon-from-ico=pypvz.ico `
--include-data-dir=resources=resources `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libogg-0.dll=libogg-0.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libogg-0.dll=libogg-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopus-0.dll=libopus-0.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopus-0.dll=libopus-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbisfile-3.dll=libvorbisfile-3.dll ` --include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libjpeg-9.dll=libjpeg-9.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbis-0.dll=libvorbis-0.dll ` --include-data-dir=resources=resources `
--windows-disable-console ` --windows-disable-console `
-o ./out/pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe ` -o pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
pypvz.py pypvz.py
# artifact压缩包处上传包含exe和运行环境的文件夹
- name: "Upload binaries"
uses: actions/upload-artifact@v2
with:
name: artifact-windows-python-${{ matrix.python_version }}
path: ./out/*.dist
- name: Release the version built by nuitka - name: Release the version built by nuitka
uses: ncipollo/release-action@v1 uses: ncipollo/release-action@v1
@ -94,58 +87,55 @@ jobs:
artifacts: ./out/*nuitka*.exe artifacts: ./out/*nuitka*.exe
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
#linux: linux:
# runs-on: ubuntu-latest runs-on: ubuntu-latest
# strategy: strategy:
# fail-fast: false fail-fast: false
# matrix: matrix:
# python_version: python_version:
# - '3.10' - "3.12"
# name: Ubuntu Python ${{ matrix.python_version }} name: Ubuntu Python ${{ matrix.python_version }}
# steps: steps:
# - name: 🛎️ Checkout - name: 🛎️ Checkout
# uses: actions/checkout@v2 uses: actions/checkout@v2
# with: with:
# fetch-depth: 0 fetch-depth: 0
# - name: 🐍 Use Python ${{ matrix.python_version }} - name: 🐍 Use Python ${{ matrix.python_version }}
# uses: actions/setup-python@v2 uses: actions/setup-python@v2
# with: with:
# python-version: ${{ matrix.python_version }} python-version: ${{ matrix.python_version }}
# - name: 🧳 Install dependencies - name: 🧳 Install dependencies
# run: | run: |
# sudo apt-get update sudo apt-get update
# sudo apt-get install patchelf gdb ccache libfuse2 zstd tar sudo apt-get install patchelf gdb ccache libfuse2 zstd tar
# python -m pip install --no-python-version-warning --disable-pip-version-check zstandard appdirs ordered-set tqdm Jinja2 python -m pip install --no-python-version-warning --disable-pip-version-check zstandard appdirs ordered-set tqdm Jinja2
# python -m pip install --no-python-version-warning --disable-pip-version-check nuitka python -m pip install --no-python-version-warning --disable-pip-version-check nuitka
# python -m pip install --no-python-version-warning --disable-pip-version-check pygame python -m pip install --no-python-version-warning --disable-pip-version-check pygame
# # 使用Nuitka构建 # 使用Nuitka构建
# - name: Show nuitka version - name: Show nuitka version
# run: | run: |
# env env
# python -m nuitka --version python -m nuitka --version
# - name: Build pypvz with Nuitka - name: Build pypvz with Nuitka
# run: | run: |
# yes | python -m nuitka \ yes | python -m nuitka \
# --show-progress \ --onefile \
# --follow-imports \ --standalone \
# --show-memory \ --include-data-dir=resources=resources \
# --output-dir=out \ --linux-onefile-icon=pypvz.png \
# --linux-onefile-icon=pypvz.ico \ --static-libpython=no \
# -o ./out/pypvz \ --remove-output \
# --remove-output \ -o pypvz-with-python${{ matrix.python_version }}-linux-x86_64.bin \
# main.py pypvz.py
# cp -r ./resources ./out/resources
# cd out
# tar -cvpaf ../pypvz-with-python${{ matrix.python_version }}-nuitka-linux-x64.tar.zst .
# - name: Release the version built by nuitka - name: Release the version built by nuitka
# uses: ncipollo/release-action@v1 uses: ncipollo/release-action@v1
# with: with:
# allowUpdates: true allowUpdates: true
# tag: Latest tag: Latest
# artifacts: ./*.tar.zst artifacts: ./pypvz*-x86_64.*
# token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

6
.gitignore vendored
View File

@ -4,7 +4,11 @@ test-build/
release/ release/
# 忽略调试内容 # 忽略调试内容
.vscode/ .vscode/
# 忽略 Pycharm 项目文件
.idea/
__pycache__/ __pycache__/
*/__pycache__/ */__pycache__/
# 忽略测试文件 # 忽略测试文件
test.py test*.py
# uv 管理的虚拟环境
.venv

1
.python-version Normal file
View File

@ -0,0 +1 @@
3.12

111
README.md
View File

@ -7,10 +7,13 @@
* 已有的植物:向日葵,豌豆射手,坚果墙,寒冰射手,樱桃炸弹,双发射手,三线射手,大嘴花,小喷菇,土豆雷,地刺,胆小菇,倭瓜,火爆辣椒,阳光菇,寒冰菇,魅惑菇,火炬树桩,睡莲,杨桃,咖啡豆,海蘑菇,高坚果,缠绕水草,毁灭菇,墓碑吞噬者,大喷菇,大蒜,南瓜头 * 已有的植物:向日葵,豌豆射手,坚果墙,寒冰射手,樱桃炸弹,双发射手,三线射手,大嘴花,小喷菇,土豆雷,地刺,胆小菇,倭瓜,火爆辣椒,阳光菇,寒冰菇,魅惑菇,火炬树桩,睡莲,杨桃,咖啡豆,海蘑菇,高坚果,缠绕水草,毁灭菇,墓碑吞噬者,大喷菇,大蒜,南瓜头
* 已有的僵尸:普通僵尸,旗帜僵尸,路障僵尸,铁桶僵尸,读报僵尸,橄榄球僵尸,鸭子救生圈僵尸,铁门僵尸,撑杆跳僵尸,冰车僵尸,潜水僵尸 * 已有的僵尸:普通僵尸,旗帜僵尸,路障僵尸,铁桶僵尸,读报僵尸,橄榄球僵尸,鸭子救生圈僵尸,铁门僵尸,撑杆跳僵尸,冰车僵尸,潜水僵尸
* 使用JSON文件记录关卡信息数据 * 使用JSON文件记录关卡信息数据
* 在0.8.18.0及以后直接用python记录关卡的不可变数据JSON目前仅用于用户存档
* 支持选择植物卡片 * 支持选择植物卡片
* 支持白昼模式,夜晚模式,泳池模式,浓雾模式(暂时没有加入雾),传送带模式和坚果保龄球模式 * 支持白昼模式,夜晚模式,泳池模式,浓雾模式(暂时没有加入雾),传送带模式和坚果保龄球模式
* 支持背景音乐播放 * 支持背景音乐播放
* 支持调节音量
* 支持音效 * 支持音效
* 支持与背景音乐一起调节音量
* 支持全屏模式 * 支持全屏模式
* 按`F`键进入全屏模式,按`U`键恢复至窗口模式 * 按`F`键进入全屏模式,按`U`键恢复至窗口模式
* 支持用小铲子移除植物 * 支持用小铲子移除植物
@ -19,21 +22,33 @@
* 夜晚模式支持墓碑以及从墓碑生成僵尸 * 夜晚模式支持墓碑以及从墓碑生成僵尸
* 含有泳池的模式支持在最后一波时从泳池中自动冒出僵尸 * 含有泳池的模式支持在最后一波时从泳池中自动冒出僵尸
* 支持保存进度 * 支持保存进度
* Windows下默认进度文件的保存路径为`~\AppData\Roaming\wszqkzqk.dev\pypvz\userdata.json` * Windows下默认进度文件的保存路径为`~\AppData\Roaming\pypvz\userdata.json`
* 其他操作系统为`~/.config/wszqkzqk.dev/pypvz/userdata.json` * 其他操作系统为`~/.config/pypvz/userdata.json`
* 存档为JSON文件如果出现因存档损坏而造成程序无法启动可以手动编辑修复或者删除该文件重试 * 存档为JSON文件如果出现因存档损坏而造成程序无法启动可以手动编辑修复或者删除该文件重试
* 0.8.12.0版本后理论上不可能因为存档损坏而无法启动,如果有,请在[issues](https://github.com/wszqkzqk/pypvz/issues)中报告bug * 0.8.12.0版本后理论上不可能因为存档损坏而无法启动,如果有,请在[issues](https://github.com/wszqkzqk/pypvz/issues)中报告bug
* 仍然有可能因为升级后变量名不同而丢失存档的进度信息,这种情况手动编辑恢复即可 * 仍然有可能因为升级后变量名不同而丢失存档的进度信息,这种情况手动编辑恢复即可
* 支持错误日志记录 * 支持错误日志记录
* Windows下默认日志文件的保存路径为`~\AppData\Roaming\wszqkzqk.dev\pypvz\run.log` * Windows下默认日志文件的保存路径为`~\AppData\Roaming\pypvz\run.log`
* 其他操作系统为`~/.config/wszqkzqk.dev/pypvz/run.log` * 其他操作系统为`~/.config/pypvz/run.log`
* 支持自定义游戏速度倍率 * 支持自定义游戏速度倍率
* 保存在游戏存档文件中,可以通过修改`game rate`值更改速度倍率 * 保存在游戏存档文件中,可以通过修改`game rate`值更改速度倍率
* 游戏完成成就显示 * 游戏完成成就显示
* 冒险模式全部完成显示银向日葵 * 任意一游戏模式全部完成显示银向日葵奖杯
* 所有模式全部完成显示金向日葵 * 所有模式全部完成显示金向日葵奖杯
* 光标移动到向日葵奖杯上是显示当前各个模式通关次数
* 含有游戏帮助界面 QwQ
## 环境要求 ## 环境安装
建议使用 [uv](https://docs.astral.sh/uv/) 安装依赖:
```bash
git clone https://github.com/wszqkzqk/pypvz.git
cd pypvz
uv sync
```
或者参考:
* `Python3` (建议 >= 3.10,最好使用最新版) * `Python3` (建议 >= 3.10,最好使用最新版)
* `Python-Pygame` (建议 >= 2.0,最好使用最新版) * `Python-Pygame` (建议 >= 2.0,最好使用最新版)
@ -56,36 +71,40 @@ python pypvz.py
- 可以在仓库的[`Releases`](https://github.com/wszqkzqk/pypvz/releases)页面中[下载最新版(点击跳转)](https://github.com/wszqkzqk/pypvz/releases/latest)(推荐): - 可以在仓库的[`Releases`](https://github.com/wszqkzqk/pypvz/releases)页面中[下载最新版(点击跳转)](https://github.com/wszqkzqk/pypvz/releases/latest)(推荐):
- 使用GCC编译 - 使用GCC编译
- 程序包含名称、版本等信息 - 程序包含名称、版本等信息
- 得到的验证最多(相对) - 得到的验证最多
- 并非每次提交都会更新,更新可能不及时 - 并非每次提交都会更新,更新可能不及时
- 也可以直接下载GitHub Workflow[自动利用Nuitka构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Latest)(推荐): - 也可以直接下载GitHub Workflow[自动利用Nuitka构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Latest)(推荐):
- 使用MSVC编译 - 使用MSVC编译
- 每次提交均会更新,保证更新及时 - 每次合并提交到主分支时更新
- 未进行任何测试存在bug的概率高于前者 - 得到的验证较多
- 可看作本软件的测试版 - 服务器构建,编译环境更纯粹,冗余更少,体积更小
- 还可以下载GitHub Workflow[自动利用Pyinstaller构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Current.Version.Built.with.Pyinstaller) - 还可以下载GitHub Workflow[自动利用Pyinstaller构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Current.Version.Built.with.Pyinstaller)
- 在程序闪退时有报错窗口弹出 - 在程序闪退时有报错窗口弹出
- 程序性能较差,不推荐 - 程序性能较差,不推荐
- 其他特性同GitHub Workflow自动利用Nuitka构建的版本
- 均仅支持64位操作系统 - 均仅支持64位操作系统
- 不依赖python、pygame等外部环境开箱即用 - 不依赖python、pygame等外部环境开箱即用
### 使用Linux可执行文件
由于Linux几乎都标配了Python环境因此本程序不太重视Linux下可执行的单文件的维护因此没有手动构建版只能下载自动构建的软件包。可以在仓库的[`Releases`](https://github.com/wszqkzqk/pypvz/releases)页面中[下载最新版(点击跳转)](https://github.com/wszqkzqk/pypvz/releases/latest)。
## 方法 ## 方法
* 使用鼠标收集阳光,种植植物 * 使用鼠标收集阳光,种植植物
* 对于已经存在存档的用户,可以在`~\AppData\Roaming\wszqkzqk.dev\pypvz\userdata.json`Windows`~/.config/wszqkzqk.dev/pypvz/userdata.json`(其他操作系统)中修改当前关卡: * 对于已经存在存档的用户,可以在`~\AppData\Roaming\pypvz\userdata.json`Windows`~/.config/pypvz/userdata.json`(其他操作系统)中修改当前关卡:
* 冒险模式: * 冒险模式:
* 1——引入白昼模式——单行草皮 * 白昼模式——单行草皮1
* 2——引入白昼模式——三行草皮 * 白昼模式——三行草皮2
* 3和4白昼模式 * 白昼模式3~5
* 5和6夜晚模式 * 夜晚模式6~8
* 7、8和9泳池模式 * 泳池模式9~11
* 10: 浓雾模式(暂时没有雾) * 浓雾模式(暂时没有雾)12
* 小游戏模式: * 小游戏模式:
* 1坚果保龄球模式 * 坚果保龄球1
* 2传送带模式白天 * 传送带模式白天2
* 3传送带模式黑夜 * 传送带模式黑夜3
* 4传送带模式泳池 * 传送带模式泳池4
* 坚果保龄球(II)5
* 目前暂时按照以上设定,未与原版相符 * 目前暂时按照以上设定,未与原版相符
* 可以通过修改存档JSON文件中的`game rate`值来调节游戏速度倍率 * 可以通过修改存档JSON文件中的`game rate`值来调节游戏速度倍率
@ -194,7 +213,6 @@ pyinstaller -F pypvz.py `
* 魅惑的僵尸未用红色滤镜标识 * 魅惑的僵尸未用红色滤镜标识
* 这个可能会作为一种“特性” * 这个可能会作为一种“特性”
* 南瓜头显示不正常 * 南瓜头显示不正常
* 对于部分“长得比较长”的植物甚至可以在南瓜头存在的情况下优先被啃食
* 墓碑吞噬者吞噬墓碑过程中被吞噬的墓碑顶端不会消失 * 墓碑吞噬者吞噬墓碑过程中被吞噬的墓碑顶端不会消失
**欢迎提供[Pull requests](https://github.com/wszqkzqk/pypvz/pulls)或修复方法建议也欢迎在这里反馈新的bug()** **欢迎提供[Pull requests](https://github.com/wszqkzqk/pypvz/pulls)或修复方法建议也欢迎在这里反馈新的bug()**
@ -209,6 +227,7 @@ pyinstaller -F pypvz.py `
* `pg.mixer.music.set_volume()` * `pg.mixer.music.set_volume()`
* 可以用`音量+``音量-`按钮实现 * 可以用`音量+``音量-`按钮实现
* 注意字体颜色渲染 * 注意字体颜色渲染
* 该功能自0.8.14.0已实现
* 关卡开始前增加预览界面 * 关卡开始前增加预览界面
* 增加解锁与选关功能 * 增加解锁与选关功能
* 目前的设想与原版不同,在完成两轮冒险模式(初始冒险模式 + 戴夫选关的冒险模式)后可以自主选关~~(当然现在只是画饼)~~ * 目前的设想与原版不同,在完成两轮冒险模式(初始冒险模式 + 戴夫选关的冒险模式)后可以自主选关~~(当然现在只是画饼)~~
@ -286,28 +305,34 @@ pyinstaller -F pypvz.py `
## 截屏 ## 截屏
![截屏1](/demo/demo1.webp) ![截屏1](/screenshots/screenshot-1.webp)
![截屏2](/demo/demo2.webp) ![截屏2](/screenshots/screenshot-2.webp)
![截屏3](/demo/demo3.webp) ![截屏3](/screenshots/screenshot-3.webp)
![截屏4](/demo/demo4.webp) ![截屏4](/screenshots/screenshot-4.webp)
![截屏5](/demo/demo5.webp) ![截屏5](/screenshots/screenshot-5.webp)
![截屏6](/demo/demo6.webp) ![截屏6](/screenshots/screenshot-6.webp)
![截屏7](/demo/demo7.webp) ![截屏7](/screenshots/screenshot-7.webp)
![截屏8](/demo/demo8.webp) ![截屏8](/screenshots/screenshot-8.webp)
![截屏9](/demo/demo9.webp) ![截屏9](/screenshots/screenshot-9.webp)
![截屏10](/demo/demo10.webp) ![截屏10](/screenshots/screenshot-10.webp)
![截屏11](/demo/demo11.webp) ![截屏11](/screenshots/screenshot-11.webp)
![截屏12](/demo/demo12.webp) ![截屏12](/screenshots/screenshot-12.webp)
![截屏13](/demo/demo13.webp) ![截屏13](/screenshots/screenshot-13.webp)
![截屏14](/demo/demo14.webp) ![截屏14](/screenshots/screenshot-14.webp)
![截屏15](/demo/demo15.webp) ![截屏15](/screenshots/screenshot-15.webp)
![截屏16](/demo/demo16.webp) ![截屏16](/screenshots/screenshot-16.webp)
![截屏17](/demo/demo17.webp) ![截屏17](/screenshots/screenshot-17.webp)
![截屏18](/screenshots/screenshot-18.webp)
![截屏19](/screenshots/screenshot-19.webp)
![截屏20](/screenshots/screenshot-20.webp)
![截屏21](/screenshots/screenshot-21.webp)
![截屏22](/screenshots/screenshot-22.webp)
![截屏23](/screenshots/screenshot-23.webp)
## 关于日志与反馈 ## 关于日志与反馈
对于闪退情况Linux用户与Windows下的python源代码运行用户可以直接在终端中复制出崩溃日志进行反馈。 对于闪退情况Linux用户与Windows下的python源代码运行用户可以直接在终端中复制出崩溃日志进行反馈。
Windows单文件封装版本无法通过终端显示日志需要在日志文件中寻找崩溃原因 Windows单文件封装版本无法通过终端显示日志需要在日志文件中寻找崩溃原因
* Windows默认日志文件路径为`~\AppData\Roaming\wszqkzqk.dev\pypvz\run.log` * Windows默认日志文件路径为`~\AppData\Roaming\pypvz\run.log`
* 其他操作系统为`~/.config/wszqkzqk.dev/pypvz/run.log`,但一般可以在终端中显示时用终端中的输出即可 * 其他操作系统为`~/.config/pypvz/run.log`,但一般可以在终端中显示时用终端中的输出即可

View File

@ -1,3 +0,0 @@
#!/bin/bash
cd `dirname $0`; pwd
git pull git@github.com:wszqkzqk/pypvz.git

12
pyproject.toml Normal file
View File

@ -0,0 +1,12 @@
[project]
name = "pypvz"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"blue>=0.9.1",
"pygame>=2.6.1",
"setuptools>=80.9.0",
"wheel>=0.45.1",
]

View File

@ -1,19 +1,32 @@
#!/usr/bin/env python #!/usr/bin/env python
import logging import logging
import traceback
import os import os
import traceback
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
from source import tool
from source import constants as c
from source.state import mainmenu, screen, level
if __name__=="__main__": import pygame as pg
# 由于在后续本地模块中存在对pygame的调用在此处必须完成pygame的初始化
os.environ[
'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR'
] = '0' # 设置临时环境变量以避免Linux下禁用x11合成器
pg.init()
from source import constants as c
from source import tool
from source.state import level, mainmenu, screen
if __name__ == '__main__':
# 日志设置 # 日志设置
if not os.path.exists(os.path.dirname(c.USERLOG_PATH)): if not os.path.exists(os.path.dirname(c.USERLOG_PATH)):
os.makedirs(os.path.dirname(c.USERLOG_PATH)) os.makedirs(os.path.dirname(c.USERLOG_PATH))
logger = logging.getLogger() logger = logging.getLogger('main')
formatter = logging.Formatter("%(asctime)s: %(message)s") formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
fileHandler = RotatingFileHandler(c.USERLOG_PATH, "a", 1024*1024, 0, "utf-8") fileHandler = RotatingFileHandler(
c.USERLOG_PATH, 'a', 1_000_000, 0, 'utf-8'
)
# 设置日志文件权限Unix为644Windows为可读写Python的os.chmod与Unix chmod相同但要显式说明8进制
os.chmod(c.USERLOG_PATH, 0o644)
fileHandler.setFormatter(formatter) fileHandler.setFormatter(formatter)
streamHandler = logging.StreamHandler() streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formatter) streamHandler.setFormatter(formatter)
@ -23,13 +36,16 @@ if __name__=="__main__":
try: try:
# 控制状态机运行 # 控制状态机运行
game = tool.Control() game = tool.Control()
state_dict = { c.MAIN_MENU: mainmenu.Menu(), state_dict = {
c.MAIN_MENU: mainmenu.Menu(),
c.GAME_VICTORY: screen.GameVictoryScreen(), c.GAME_VICTORY: screen.GameVictoryScreen(),
c.GAME_LOSE: screen.GameLoseScreen(), c.GAME_LOSE: screen.GameLoseScreen(),
c.LEVEL: level.Level() c.LEVEL: level.Level(),
c.AWARD_SCREEN: screen.AwardScreen(),
c.HELP_SCREEN: screen.HelpScreen(),
} }
game.setup_states(state_dict, c.MAIN_MENU) game.setup_states(state_dict, c.MAIN_MENU)
game.run() game.run()
except: except:
print() # 将日志输出与上文内容分隔开,增加可读性 print() # 将日志输出与上文内容分隔开,增加可读性
logger.error(f"\n{traceback.format_exc()}") logger.error(f'\n{traceback.format_exc()}')

View File

@ -1,15 +0,0 @@
{
"plant_image_rect":{
"PeaNormal":{"x":28, "y":0, "width":28, "height":34},
"PeaIce":{"x":26, "y":0, "width":30, "height":34},
"Chomper":{"x":0, "y":0, "width":100, "height":114},
"PuffShroom":{"x":0, "y":28, "width":35, "height":38},
"PuffShroomSleep":{"x":1, "y":0, "width":39, "height":65},
"BulletMushRoom":{"x":0, "y":1, "width":55, "height":21},
"BulletSeaShroom":{"x":0, "y":1, "width":55, "height":21},
"PotatoMine":{"x":0, "y":0, "width":75, "height":55},
"Squash":{"x":10, "y":140, "width":80, "height":86},
"SquashAim":{"x":10, "y":140, "width":80, "height":86},
"Spikeweed":{"x":3, "y":0, "width":80, "height":35}
}
}

View File

@ -1,38 +0,0 @@
{
"zombie_image_rect":{
"Zombie":{"x":62, "width":90},
"ZombieAttack":{"x":62, "width":90},
"ZombieLostHead":{"x":62, "width":90},
"ZombieLostHeadAttack":{"x":62, "width":90},
"ZombieDie":{"x":0, "width":164},
"BoomDie":{"x":68, "width":80},
"ConeheadZombie":{"x":80, "width":80},
"ConeheadZombieAttack":{"x":79, "width":87},
"BucketheadZombie":{"x":54, "width":90},
"BucketheadZombieAttack":{"x":46, "width":90},
"FlagZombie":{"x":56, "width":110},
"FlagZombieAttack":{"x":60, "width":100},
"FlagZombieLostHead":{"x":55, "width":110},
"FlagZombieLostHeadAttack":{"x":55, "width":110},
"NewspaperZombie":{"x":48, "width":92},
"NewspaperZombieAttack":{"x":48, "width":92},
"NewspaperZombieNoPaper":{"x":40, "width":98},
"NewspaperZombieNoPaperAttack":{"x":48, "width":92},
"NewspaperZombieLostHead":{"x":44, "width":96},
"NewspaperZombieLostHeadAttack":{"x":48, "width":92},
"NewspaperZombieDie":{"x":0, "width":100},
"DukyTubeZombie":{"x":55, "width":105},
"DukyTubeZombieAttack":{"x":55, "width":105},
"DukyTubeZombieDie":{"x":55, "width":105},
"DukyTubeZombieLostHead":{"x":55, "width":105},
"DukyTubeZombieSwim":{"x":55, "width":105},
"ConeheadDukyTubeZombie":{"x":55, "width":105},
"ConeheadDukyTubeZombieAttack":{"x":55, "width":105},
"ConeheadDukyTubeZombieSwim":{"x":55, "width":105},
"BucketheadDukyTubeZombie":{"x":55, "width":105},
"BucketheadDukyTubeZombieAttack":{"x":55, "width":105},
"BucketheadDukyTubeZombieSwim":{"x":55, "width":105},
"ScreenDoorZombie":{"x":41, "width":100},
"ScreenDoorZombieAttack":{"x":41, "width":100}
}
}

View File

@ -1,23 +0,0 @@
{
"background_type":2,
"init_sun_value":5000,
"shovel":1,
"spawn_zombies":"list",
"zombie_list":[
{"time":0, "map_y":5, "name":"Zomboni"},
{"time":1000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":2000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":3100, "map_y":4, "name":"ScreenDoorZombie"},
{"time":4500, "map_y":4, "name":"ScreenDoorZombie"},
{"time":5000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":6000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":7000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":8000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":0, "map_y":1, "name":"NewspaperZombie"},
{"time":0, "map_y":0, "name":"PoleVaultingZombie"},
{"time":6000, "map_y":0, "name":"FootballZombie"},
{"time":0, "map_y":3, "name":"ConeheadDuckyTubeZombie"},
{"time":0, "map_y":2, "name":"SnorkelZombie"},
{"time":90000, "map_y":2, "name":"ConeheadDuckyTubeZombie"}
]
}

View File

@ -1,8 +0,0 @@
{
"background_type": 7,
"init_sun_value": 150,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":1
}

View File

@ -1,9 +0,0 @@
{
"background_type":3,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "FootballZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"], "30":["FootballZombie"]},
"num_flags":4
}

View File

@ -1,8 +0,0 @@
{
"background_type": 8,
"init_sun_value": 50,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":1
}

View File

@ -1,8 +0,0 @@
{
"background_type": 0,
"init_sun_value": 50,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":2
}

View File

@ -1,8 +0,0 @@
{
"background_type":0,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "PoleVaultingZombie"],
"num_flags":3
}

View File

@ -1,8 +0,0 @@
{
"background_type":1,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "ScreenDoorZombie"],
"num_flags":2
}

View File

@ -1,10 +0,0 @@
{
"background_type":1,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "ScreenDoorZombie", "BucketheadZombie", "FootballZombie"],
"inevitable_zombie_list":{"20":["ScreenDoorZombie"], "30":["FootballZombie"]},
"num_flags":4,
"grade_graves":2
}

View File

@ -1,8 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie"],
"num_flags":2
}

View File

@ -1,9 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "SnorkelZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"], "30":["SnorkelZombie"]},
"num_flags":3
}

View File

@ -1,9 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "Zomboni"],
"inevitable_zombie_list":{"30":["Zomboni"]},
"num_flags":3
}

View File

@ -1,12 +0,0 @@
{
"background_type":6,
"choosebar_type":2,
"shovel":0,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "NewspaperZombie", "PoleVaultingZombie"],
"num_flags":3,
"inevitable_zombie_list":{"20":["BucketheadZombie"]},
"card_pool":{ "WallNutBowling":300,
"RedWallNutBowling":100
}
}

View File

@ -1,17 +0,0 @@
{
"background_type":0,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":3,
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "PoleVaultingZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"]},
"card_pool":{ "Peashooter":200,
"SnowPea":200,
"WallNut":100,
"CherryBomb":100,
"RepeaterPea":200,
"Chomper":100,
"PotatoMine":100
}
}

View File

@ -1,20 +0,0 @@
{
"background_type":1,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":3,
"included_zombies":["Zombie", "ConeheadZombie",
"BucketheadZombie", "NewspaperZombie",
"FootballZombie", "ScreenDoorZombie"],
"inevitable_zombie_list":{"30":["FootballZombie"]},
"card_pool":{ "PuffShroom":100,
"ScaredyShroom":100,
"IceShroom":100,
"HypnoShroom":100,
"DoomShroom":100,
"GraveBuster":100,
"FumeShroom":200
},
"grade_graves":3
}

View File

@ -1,20 +0,0 @@
{
"background_type":2,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":4,
"included_zombies":["Zombie", "ConeheadZombie",
"BucketheadZombie", "SnorkelZombie",
"Zomboni"],
"inevitable_zombie_list":{"30":["BucketheadZombie"]},
"card_pool":{ "LilyPad":300,
"TorchWood":100,
"TallNut":100,
"TangleKlep":100,
"Spikeweed":100,
"Squash":100,
"Jalapeno":100,
"Threepeater":400
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Some files were not shown because too many files have changed in this diff Show More