Compare commits

...

687 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
星外之神
e1d464039a 修改进度条颜色 2022-07-28 12:02:33 +08:00
wszqkzqk
26cc7a083c 更改关卡进程进度条位置 2022-07-28 07:14:23 +08:00
wszqkzqk
283cf636c4 跟进注释 2022-07-28 05:53:32 +08:00
wszqkzqk
f2d1f22e7c 修复海蘑菇阳光错误 2022-07-28 05:50:18 +08:00
wszqkzqk
f447111406 修改字体样式移除大蒜卡片原图中的阳光 2022-07-28 05:48:23 +08:00
wszqkzqk
14d4775360 将卡片阳光显示改为自动 2022-07-28 05:40:56 +08:00
wszqkzqk
96c8069001 更改首关初始阳光值 2022-07-28 00:01:15 +08:00
wszqkzqk
111065c4a7 增加开发计划 2022-07-27 23:34:15 +08:00
wszqkzqk
f49cc4e12d 修复权限问题 2022-07-27 23:22:42 +08:00
wszqkzqk
14326d8194 预加入中文显示支持 2022-07-27 23:17:19 +08:00
wszqkzqk
d227a28452 修复从游戏中返回主菜单时闪退的bug 2022-07-27 19:50:04 +08:00
wszqkzqk
17b91b2ae2 微调金银向日葵位置 2022-07-27 19:42:53 +08:00
wszqkzqk
fbe05066f3 补充 2022-07-27 19:24:40 +08:00
wszqkzqk
be1ebbc661 添加截屏 2022-07-27 19:22:20 +08:00
wszqkzqk
e839af9df4 成就加入说明跟进 2022-07-27 19:19:25 +08:00
wszqkzqk
94701fe413 加入金银向日葵 2022-07-27 19:13:54 +08:00
wszqkzqk
ead7826d80 完善存档容错机制 2022-07-27 17:11:27 +08:00
wszqkzqk
5df1997efe 对存档说明 2022-07-27 17:05:57 +08:00
wszqkzqk
9ed30689c4 更新关于游戏速度倍率调节的说明 2022-07-27 17:00:16 +08:00
wszqkzqk
64f2fa52c0 支持Windows下单文件封装模式调节游戏速度倍率 2022-07-27 16:50:20 +08:00
星外之神
95d72c55cd 移除过时说明 2022-07-27 11:17:29 +08:00
星外之神
64ae521cd6 减少波数 2022-07-27 11:03:39 +08:00
星外之神
bf2e74d808 更改生成僵尸类型 2022-07-27 11:03:22 +08:00
星外之神
a37cd228bd 重命名可执行文件 2022-07-27 10:53:28 +08:00
星外之神
4dc62269dd 删除调试模式不需要的功能 2022-07-27 10:47:32 +08:00
星外之神
a0a5677f6c 恢复关卡导入容错设计 2022-07-27 10:37:06 +08:00
星外之神
7c706ea3a3 修复关卡胜利界面异常的bug 2022-07-27 10:10:23 +08:00
星外之神
327c9c3a20 增加pyinstaller构建参考 2022-07-27 09:50:08 +08:00
星外之神
88d2e734a4 增大睡莲权重 2022-07-27 09:37:22 +08:00
星外之神
793cbea586 修复有存档时导入字典未创建的bug 2022-07-27 09:21:29 +08:00
星外之神
04f4b65d42 修复无存档时没有初始化game_info的bug 2022-07-27 09:18:13 +08:00
星外之神
b4a3fa993d 将初始存档直接保存到常数文件 2022-07-27 09:09:33 +08:00
星外之神
edf1898b8c 更改通关提示 2022-07-27 09:00:50 +08:00
wszqkzqk
7568c91744 移除不再使用的常数 2022-07-26 23:35:24 +08:00
wszqkzqk
410cf2cca1 科学放置音乐播放代码位置 2022-07-26 23:28:48 +08:00
wszqkzqk
82cebe8288 整理注释 2022-07-26 23:20:16 +08:00
wszqkzqk
f3d664b263 加入选项菜单 2022-07-26 23:10:46 +08:00
wszqkzqk
ee8de23bd5 优化音乐播放代码位置 2022-07-26 22:45:52 +08:00
wszqkzqk
7aee0662a5 显示选项按钮 2022-07-26 22:40:41 +08:00
wszqkzqk
d7c9fb07a5 加入部分按钮 2022-07-25 07:21:44 +08:00
wszqkzqk
c16d6dc70f Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-07-24 22:00:15 +08:00
wszqkzqk
a0edb3caef 取消Linux构建 2022-07-24 21:57:51 +08:00
星外之神
cfbd4951d2 阻止pr发布release 2022-07-24 17:55:28 +08:00
wszqkzqk
4671f2ffa0 日志文件说明 2022-07-24 17:32:53 +08:00
wszqkzqk
98fe2325d9 更改命令 2022-07-24 16:52:36 +08:00
wszqkzqk
11f6be9a99 更改命令 2022-07-24 16:48:53 +08:00
wszqkzqk
96faf23a12 更改命令 2022-07-24 16:40:41 +08:00
wszqkzqk
3b8a0fb309 更改构建方式 2022-07-24 16:32:10 +08:00
wszqkzqk
9b79db8de4 移除不需要的文件 2022-07-24 16:17:10 +08:00
wszqkzqk
87da04c9a1 取消appimage,改用tar打包 2022-07-24 16:11:41 +08:00
wszqkzqk
c0963931b8 适配appimage 2022-07-24 15:57:45 +08:00
wszqkzqk
a6ced8d6f3 更改工作流系统版本 2022-07-24 15:50:29 +08:00
wszqkzqk
10de70d0b9 重写连接符号 2022-07-24 15:46:59 +08:00
wszqkzqk
0a609f7c42 更改工作流配置 2022-07-24 15:40:02 +08:00
wszqkzqk
169e7d8419 增加Linux云编译 2022-07-24 15:36:31 +08:00
wszqkzqk
e985c8660b 优化关卡进度显示 2022-07-24 15:17:55 +08:00
星外之神
f5daeae93a 调整readme 2022-07-24 13:45:33 +08:00
星外之神
38c7713c85 调整readme 2022-07-24 13:45:08 +08:00
星外之神
ca0280db28 调整readme 2022-07-24 13:44:13 +08:00
星外之神
b47ffc705e 删除冗余引用 2022-07-24 13:36:50 +08:00
星外之神
4f2c8cf4da 删除部分无效外部引用 2022-07-24 13:30:25 +08:00
星外之神
d696cc3c54 关于添加日志的说明 2022-07-24 12:59:02 +08:00
星外之神
2e5651a9db 优化控制台日志显示 2022-07-24 12:49:02 +08:00
星外之神
efb5db0c69 启用高级日志功能 2022-07-24 12:46:59 +08:00
星外之神
8d6526bd66 加入日志功能 2022-07-24 11:40:57 +08:00
星外之神
b574c82ebb 修复受损坚果图片显示bug 2022-07-24 10:39:50 +08:00
星外之神
2b9d5d21ae 增加关卡数显示;修复通关后无法进入的bug 2022-07-24 10:13:36 +08:00
星外之神
e7caf339c5 增加毁灭菇传送带卡片 2022-07-24 10:08:33 +08:00
星外之神
798a9698ef 修正胆小菇卡片名称 2022-07-24 10:08:13 +08:00
星外之神
5dfab2cada 修复睡莲卡片命名错误 2022-07-24 10:07:40 +08:00
星外之神
1c982c723c 平衡夜晚关卡难度 2022-07-24 10:07:14 +08:00
wszqkzqk
1fb0df6369 更新列表 2022-07-24 08:16:38 +08:00
wszqkzqk
6512853932 更改南瓜头动作间隔 2022-07-24 00:36:59 +08:00
wszqkzqk
ef7ab50fb2 更改南瓜头是否能种植的判断机制 2022-07-24 00:31:20 +08:00
wszqkzqk
d3f569cee7 实现了一个较为劣质的南瓜头 2022-07-24 00:07:42 +08:00
星外之神
ddabaf4c64 编译命令说明 2022-07-23 22:36:48 +08:00
星外之神
a0e70ce8a7 标点 2022-07-23 22:27:23 +08:00
星外之神
ac9d566b62 更改表述 2022-07-23 20:05:22 +08:00
wszqkzqk
f25dde09ad 关卡重设 2022-07-23 16:26:54 +08:00
wszqkzqk
48a21ace11 关卡说明 2022-07-23 16:18:19 +08:00
星外之神
4dc5024ed4 存档说明 2022-07-23 15:59:40 +08:00
星外之神
8740048e6b 自定义说明 2022-07-23 15:56:46 +08:00
星外之神
97e2ac7edf 加入引导模式 2022-07-23 15:38:00 +08:00
星外之神
a64d95f988 更新依赖表述 2022-07-23 15:31:01 +08:00
星外之神
434635dbe3 路径说明 2022-07-23 15:28:27 +08:00
星外之神
60221c6226 暂时恢复if实现以便编译;更改坚果保龄球旗帜数 2022-07-23 15:18:26 +08:00
星外之神
19a8ea59f0
Merge pull request #5 from wszqkzqk/filesave
增加进度保存功能
2022-07-23 14:55:49 +08:00
wszqkzqk
52c2266b9b 添加说明 2022-07-23 14:53:51 +08:00
wszqkzqk
a323c38ba0 适配Windows路径 2022-07-23 14:49:54 +08:00
wszqkzqk
bcb015660a 添加数据存储支持 2022-07-23 14:27:43 +08:00
wszqkzqk
29c8824d1f 增加传送带关卡卡片生成权重机制 2022-07-23 09:38:59 +08:00
星外之神
f5b19894e6 恢复match-case实现 2022-07-20 22:27:56 +08:00
星外之神
9fa2521396 To compile with Nuitka bug of match-case 2022-07-20 14:12:30 +08:00
星外之神
42e67c0d26 删除透明部分颜色残余 2022-07-20 14:04:03 +08:00
星外之神
008626de17 修复大蒜显示 2022-07-20 13:52:57 +08:00
星外之神
f70c4e5598 补充 2022-06-18 12:38:56 +08:00
星外之神
9e82f15981 增加测试构建命令 2022-06-18 12:30:54 +08:00
星外之神
aa5caa2549 更新构建说明及临时文件名称 2022-06-18 12:19:05 +08:00
星外之神
7527fca972 安全打开文件 2022-06-17 11:45:00 +08:00
wszqkzqk
c041894f97 修复bgm导入失败 2022-06-14 01:00:39 +08:00
wszqkzqk
5422c371ff 修复未导入地图的bug 2022-06-14 00:58:45 +08:00
星外之神
6a22c51231 设计说明 2022-06-12 17:36:04 +08:00
星外之神
82b24951b1 更改任务名称 2022-06-12 16:33:18 +08:00
星外之神
ff5387c3f5 将pr构建与commit构建分开 2022-06-12 16:32:21 +08:00
星外之神
2af6371a10 修复僵尸啃食的bug 2022-06-12 16:11:16 +08:00
星外之神
c3dc470dae 升级到python 3.10 2022-06-12 15:57:04 +08:00
星外之神
54e40df6c4 修复变量名错误 2022-06-12 13:47:13 +08:00
星外之神
8d06608e14 优化点击位置输出显示 2022-06-11 19:12:32 +08:00
星外之神
cbc1cbd97f 优化输出显示 2022-06-11 19:09:52 +08:00
星外之神
ecd511495d 整理 2022-06-09 11:06:39 +08:00
星外之神
c967c56c54 恢复inf原设定 2022-06-08 11:04:25 +08:00
星外之神
da7c3ce908 更改infbi 2022-06-08 10:55:22 +08:00
星外之神
5bc2a15db8 更改地图初始化函数 2022-06-08 10:22:12 +08:00
星外之神
dd623e1c71 编译开启LTO 2022-06-07 21:53:00 +08:00
星外之神
d9a49ff1a1 修复坚果保龄球闪退bug 2022-06-07 14:59:49 +08:00
星外之神
87d5d4a890 完善补充 2022-06-07 14:47:52 +08:00
星外之神
4b19f7f851 优化地图生成性能 2022-06-07 14:38:57 +08:00
星外之神
1a54844ffe 优化 2022-06-07 14:06:01 +08:00
星外之神
80fdac7220 优化毁灭菇种植判断 2022-06-07 13:26:16 +08:00
星外之神
ae58d15e18 重构 2022-06-05 15:53:44 +08:00
星外之神
0345119d34 重构 2022-06-04 21:59:51 +08:00
星外之神
0db90ba8c8 更改飞出屏幕对象的杀死条件 2022-06-04 21:31:09 +08:00
星外之神
1ff2d1a6f6 修复大蒜的大量bug 2022-06-04 19:26:04 +08:00
星外之神
1e86ad16ea 使杨桃向后发射的子弹可以忽略二类防具 2022-06-04 16:27:48 +08:00
星外之神
e2d211036d 减慢换行动画 2022-06-04 15:48:02 +08:00
星外之神
dd7c81f45f 统一形式 2022-06-04 14:07:33 +08:00
星外之神
1df7d937f4 更新备注 2022-06-04 13:51:58 +08:00
星外之神
1d1f6558ce readme中加入大蒜 2022-06-03 23:37:02 +08:00
星外之神
5e44207c51 删除现在没什么用的内容 2022-06-03 23:19:02 +08:00
星外之神
4fb64964da 修复初始关卡问题 2022-06-03 22:58:10 +08:00
星外之神
0eba0a9210 分行呈现编译命令 2022-06-03 22:54:54 +08:00
星外之神
9f1ffd532f 修复卡片信息被重新定义的bug‘ 2022-06-03 22:40:46 +08:00
星外之神
f1117a862f Merge branch 'garlic' 2022-06-03 22:36:13 +08:00
星外之神
954210264f 大蒜基本可用 2022-06-03 22:31:57 +08:00
星外之神
06ce13b0ac 正常化游戏 2022-06-03 21:32:04 +08:00
星外之神
783e0743ba Squashed commit of the following:
commit b6799a240bb2674f6b835b8402da609e22059030
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 20:03:55 2022 +0800

    修改异常处理方式

commit dcf925ca526e66166c5b19b0b8442a32120a332d
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 19:51:06 2022 +0800

    暂时放弃OpenGL

commit 2c0dc94c75d902aa356ee0b8350ea0aa02c84fdb
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 19:41:50 2022 +0800

    更改非Nuitka程序图标设定

commit 1dd0894adffdafd61bd696807a6eb9d2735d4d25
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 19:16:21 2022 +0800

    维护清理

commit b8a7fc0a66a22fae0ead9a9e4f88aa024276f078
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 14:43:51 2022 +0800

    修复传送带模式中点击到达传送带底部的卡片没有透明度变化的bug

commit 9303304e94aabd4f955c3c186ff73525057bb133
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 14:21:47 2022 +0800

    优化报纸僵尸设定

commit 0b9dbdc14513916dcb15dc717060faf380c1b681
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 14:17:26 2022 +0800

    微调报纸僵尸速度

commit 44e6ce77e77fba19ebec22d08cdccf6d07246905
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 13:58:31 2022 +0800

    清理

commit e00ed2f061ff148cbe0b38991a6ab585963ec9b3
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 13:58:05 2022 +0800

    修复潜水僵尸只能攻击一次的bug

commit 790bc0bc5eeb206ebe769d91a4f339d050e86100
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri Jun 3 10:15:33 2022 +0800

    更改构建命令

commit db86b3144ced0603c4db1e7220dbc47559b9dd87
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Thu Jun 2 19:03:13 2022 +0800

    更改模块调用方式

commit 885f9902af79b2e23590956626e6eabe17e71931
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Wed Jun 1 14:15:50 2022 +0800

    更新null值引用方式

commit d054ff498ba58356e9886064ae9c1a62fb0585a5
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Wed Jun 1 13:39:56 2022 +0800

    进一步将常数性内容汇总到constants.py中

commit c4a756756b922cba8f8224b247bce7e7e7838808
Author: 星外之神 <wszqkzqk@qq.com>
Date:   Fri May 27 15:23:52 2022 +0800

    说明
2022-06-03 21:29:45 +08:00
星外之神
b6799a240b 修改异常处理方式 2022-06-03 20:03:55 +08:00
星外之神
dcf925ca52 暂时放弃OpenGL 2022-06-03 19:51:06 +08:00
星外之神
2c0dc94c75 更改非Nuitka程序图标设定 2022-06-03 19:41:50 +08:00
星外之神
1dd0894adf 维护清理 2022-06-03 19:16:21 +08:00
星外之神
b8a7fc0a66 修复传送带模式中点击到达传送带底部的卡片没有透明度变化的bug 2022-06-03 14:43:51 +08:00
星外之神
9303304e94 优化报纸僵尸设定 2022-06-03 14:21:47 +08:00
星外之神
0b9dbdc145 微调报纸僵尸速度 2022-06-03 14:17:26 +08:00
星外之神
44e6ce77e7 清理 2022-06-03 13:58:31 +08:00
星外之神
e00ed2f061 修复潜水僵尸只能攻击一次的bug 2022-06-03 13:58:05 +08:00
星外之神
790bc0bc5e 更改构建命令 2022-06-03 10:15:33 +08:00
星外之神
db86b3144c 更改模块调用方式 2022-06-02 19:03:13 +08:00
星外之神
885f9902af 更新null值引用方式 2022-06-01 14:15:50 +08:00
星外之神
d054ff498b 进一步将常数性内容汇总到constants.py中 2022-06-01 13:39:56 +08:00
星外之神
c4a756756b 说明 2022-05-27 15:23:52 +08:00
星外之神
cdf992095e 大蒜测试 2022-05-27 15:09:53 +08:00
星外之神
08b1c19fa2 初步加入没有功能的大蒜 2022-05-27 13:41:04 +08:00
星外之神
762741d20d 删除冗余设计 2022-05-27 11:26:28 +08:00
星外之神
2e4b4bdacc 新增关卡设定说明 2022-05-27 01:31:34 +08:00
星外之神
7208c2eb5f 恢复起始关卡,设置卡片权重 2022-05-27 01:28:08 +08:00
星外之神
0c9d562cba 增加部分关卡素材 2022-05-27 00:53:50 +08:00
星外之神
b281094b44 实现潜水僵尸 2022-05-26 23:51:44 +08:00
星外之神
c1d0505fd9 补全潜水僵尸图片索引 2022-05-26 20:42:45 +08:00
星外之神
4bf7b16273 增加部分素材 2022-05-25 23:00:26 +08:00
星外之神
a8e93e75e0 增加部分素材 2022-05-25 23:00:13 +08:00
星外之神
d3e85340b7 将换行输入符号替换为Windows样式 2022-05-22 19:38:20 +08:00
星外之神
29d8584548 整理构建代码 2022-05-22 19:28:37 +08:00
wszqkzqk
452cc6531f 更改下载地址指向 2022-05-22 10:38:56 +08:00
星外之神
e1a56c5db0 更改下载地址 2022-05-21 21:53:40 +08:00
星外之神
18a36d72af 更新下载链接 2022-05-21 21:47:43 +08:00
星外之神
24384fd00d 更改异常处理 2022-05-21 21:03:26 +08:00
星外之神
82169e72f5 更新下载指引 2022-05-21 20:13:41 +08:00
星外之神
e841f178b2 更改下载地址 2022-05-21 19:54:52 +08:00
星外之神
11effc6f9e 保证Nuitka版本在最前面 2022-05-21 19:53:30 +08:00
星外之神
903eabf2bb 更改构建标签名 2022-05-21 19:34:44 +08:00
星外之神
ea44455186 自动构建发布 2022-05-21 19:30:58 +08:00
星外之神
c118caf021 整理构建代码 2022-05-21 19:18:34 +08:00
星外之神
c6689eca7e 自动构建发布 2022-05-21 19:06:06 +08:00
星外之神
2a294d0593 更改pyinstaller命令 2022-05-21 18:53:11 +08:00
星外之神
39c4cb2e6d 修改pyinstaller命令 2022-05-21 18:39:50 +08:00
星外之神
b9e56894d2 增加pyinstaller打包版本 2022-05-21 18:23:09 +08:00
星外之神
66a31cf97a 暂时不用python3.11构建 2022-05-21 14:12:00 +08:00
星外之神
3593bebf9e 更改构建命令 2022-05-21 14:09:46 +08:00
星外之神
3d70794b9d 自动构建遇到错误不再跳出 2022-05-21 13:19:35 +08:00
星外之神
2273eeab05 增加ordered-set编译优化依赖 2022-05-21 13:09:48 +08:00
星外之神
d6e02acf02 增加报纸僵尸疑惑时间;增加报纸撕裂音效;增加潜水僵尸部分素材 2022-05-21 12:59:21 +08:00
星外之神
598303ae16 更新链接 2022-05-20 22:57:12 +08:00
星外之神
55af6f17d6 增加readme中的链接 2022-05-20 22:36:38 +08:00
星外之神
3660801790 更新构建规则 2022-05-20 22:34:28 +08:00
星外之神
48317624c6 对已选中的卡片区别显示 2022-05-20 21:02:41 +08:00
星外之神
1e1c012850 优化上传内容 2022-05-20 19:36:10 +08:00
星外之神
71e9b64046 禁止多个构建任务同时进行 2022-05-20 19:24:49 +08:00
星外之神
c82bb47511 尝试artifact调用 2022-05-20 19:21:14 +08:00
星外之神
c899637b68 更新下载地址 2022-05-20 19:10:07 +08:00
星外之神
f5d6371eb8 更改标签名 2022-05-20 18:55:29 +08:00
星外之神
57974043d2 更改非法tag名称 2022-05-20 18:53:31 +08:00
星外之神
27d6236003 更新构建配置 2022-05-20 18:37:10 +08:00
星外之神
332b47ede1 更改构建配置 2022-05-20 18:20:14 +08:00
星外之神
e1fb2a6ecf 更改备注信息 2022-05-20 17:33:53 +08:00
星外之神
9434ee08d1 修复构建错误 2022-05-20 17:33:06 +08:00
星外之神
babeb1303b 修复构建错误 2022-05-20 17:22:10 +08:00
星外之神
e1e7dc9b27 尝试自动构建 2022-05-20 17:14:52 +08:00
星外之神
909b83ae3c 微调逻辑 2022-05-20 14:52:08 +08:00
星外之神
c68cc7c4d5 优化大嘴花设定,增加掉头僵尸可以吸引豌豆类植物攻击的功能 2022-05-20 14:50:13 +08:00
星外之神
cb23817b0d 修复樱桃炸弹爆炸闪退bug,修复撑杆跳触发土豆雷的bug 2022-05-20 11:43:12 +08:00
星外之神
0ad4597eef 更改僵尸被小推车杀死时的动画 2022-05-18 23:00:02 +08:00
星外之神
8ed01975dc 修复撑杆跳生成位置过分靠后的bug 2022-05-16 18:07:19 +08:00
星外之神
c37208bfb2 更改毁灭菇爆炸范围 2022-05-15 23:49:52 +08:00
星外之神
b2d62deaed 更改寒冰菇攻击范围 2022-05-15 22:52:53 +08:00
星外之神
e080fd04b3 更改植物高亮间隔 2022-05-15 22:46:51 +08:00
星外之神
7ca605afa0 修复撑杆跳显示bug 2022-05-15 22:17:08 +08:00
星外之神
3ba55a202e 修改僵尸生成位置判定方式 2022-05-15 21:30:32 +08:00
星外之神
0057d231be 坚果保龄球拟合铁门需要砸3次的设定 2022-05-15 20:32:40 +08:00
星外之神
8faf17edec 优化坚果保龄球对铁门的伤害形式,实现弹射碰撞铁门时秒杀 2022-05-15 20:15:24 +08:00
星外之神
47ec6367c8 整理代码 2022-05-15 19:49:07 +08:00
星外之神
bd59b16905 基本转移level.py文件中的常数信息到constants.py 2022-05-15 19:29:30 +08:00
星外之神
9db49f77ee 简化墓碑机制 2022-05-15 16:11:22 +08:00
星外之神
22a0b48820 微调睡莲图片 2022-05-15 15:58:14 +08:00
星外之神
2eff1506e9 删除冗余 2022-05-15 15:47:58 +08:00
星外之神
f8be222caf 统一变量名,更改大嘴花攻击实现本质 2022-05-15 15:46:14 +08:00
星外之神
c87f5b3dc8 维护清理 2022-05-15 14:32:43 +08:00
星外之神
9d56c8a73c 维护清理 2022-05-15 14:28:29 +08:00
星外之神
cd32e142e0 维护清理 2022-05-15 14:15:48 +08:00
星外之神
25bf28e4f4 修复撑杆跳被同一行的寒冰菇冻结后丢失杆的bug 2022-05-15 13:17:45 +08:00
星外之神
6f6594db9c 删除冗余 2022-05-15 09:30:19 +08:00
星外之神
6bc813ce8e 倭瓜改为双碰撞检测 2022-05-14 23:36:30 +08:00
星外之神
e17c16927f 倭瓜位置判断改为重叠20像素 2022-05-14 23:33:33 +08:00
星外之神
2c140577a1 更改倭瓜碰撞检测 2022-05-14 23:23:12 +08:00
星外之神
5bc89e1b81 加入倭瓜碾压音效 2022-05-14 23:11:55 +08:00
星外之神
f34e00c361 修复毁灭菇坑会遮住蘑菇云的bug 2022-05-14 22:40:37 +08:00
星外之神
1fe841dcb3 将爆炸伤害时间由爆炸结束时改为爆炸开始时 2022-05-14 21:31:32 +08:00
星外之神
3a53f772ce 将车改为按行绘制;豌豆通过火炬树桩继承之前的移动轨迹 2022-05-14 19:54:58 +08:00
星外之神
ada7d690eb 冰车被地刺杀死后不立刻爆炸 2022-05-14 19:08:08 +08:00
星外之神
92beb00dff 去除非植物类“死亡”时的音效 2022-05-14 16:34:09 +08:00
星外之神
9260c88e5a 增加冰车爆炸音效 2022-05-14 16:29:11 +08:00
星外之神
0bfb48ea7c 环境要求说明 2022-05-14 14:39:18 +08:00
星外之神
cae76df7d5 修复初始关卡错误 2022-05-14 13:50:30 +08:00
星外之神
245cc0fb4f 加入冰车僵尸生成音效 2022-05-14 13:47:01 +08:00
星外之神
625658202a 冰车僵尸可变速 2022-05-14 13:35:44 +08:00
星外之神
8eaf9e1fde 修复魅惑菇不能发挥作用的bug,修复大喷菇边缘不显示bug 2022-05-14 13:24:54 +08:00
星外之神
afe3a03d44 加入冰车僵尸 2022-05-14 13:03:30 +08:00
星外之神
5bb62383c5 更改冰道设定 2022-05-14 12:01:58 +08:00
星外之神
8a934ebbb1 初步增加冰车僵尸 2022-05-14 11:58:12 +08:00
星外之神
700ebaa7c4 更改小推车存活范围 2022-05-14 00:32:42 +08:00
星外之神
cc70ff46f7 更改杨桃子弹存在空间 2022-05-14 00:30:33 +08:00
星外之神
782a3a1a28 删除冗余 2022-05-13 22:58:14 +08:00
星外之神
5b7f00f9a2 更新子弹最远能到的范围 2022-05-13 00:16:47 +08:00
星外之神
445e6488d6 修复啃咬刷新判断bug 2022-05-12 22:55:04 +08:00
星外之神
e8f001629a 更改刷新啃咬的判断机制 2022-05-12 22:25:32 +08:00
星外之神
dea1c9a2d9 effect本身不是bool,默认值设置为None 2022-05-12 16:17:41 +08:00
星外之神
3d978a737f 墓碑中可以冒出路障僵尸 2022-05-11 23:36:11 +08:00
星外之神
8eb99747ef 更新失败后跳转指向 2022-05-11 23:06:45 +08:00
星外之神
abe10f33a5 调试信息 2022-05-11 20:46:00 +08:00
星外之神
ad985552cc 缩短卡片间隔 2022-05-11 20:34:56 +08:00
星外之神
911ab88c38 修改大嘴花能攻击的范围 2022-05-11 20:08:47 +08:00
星外之神
44a94e1ae3 在选卡时中加入菜单 2022-05-11 19:10:02 +08:00
星外之神
2d1ca899e3 更改大喷菇攻击动画 2022-05-11 17:52:43 +08:00
星外之神
dbcff71bc7 修复土豆雷不攻击的bug 2022-05-11 17:30:14 +08:00
星外之神
ee50c004b3 注释说明 2022-05-11 15:23:22 +08:00
星外之神
2ce597bd48 全面修改碰撞机制 2022-05-11 15:19:13 +08:00
星外之神
46780ee81e 修改土豆雷对撑杆跳的检查机制 2022-05-11 13:13:18 +08:00
星外之神
109265655b 修改掉头僵尸动画 2022-05-11 00:42:22 +08:00
星外之神
319610008e 更新撑杆跳僵尸生命值 2022-05-10 23:52:22 +08:00
星外之神
41538359d9 更改啃咬判断机制 2022-05-10 22:45:59 +08:00
星外之神
02edab3516 增加撑杆跳音效 2022-05-10 22:38:05 +08:00
星外之神
8d6d010933 在白天决战关中加入撑杆跳僵尸 2022-05-10 22:00:21 +08:00
星外之神
fc89acd3a1 用很粗略的方式实现撑杆跳僵尸 2022-05-10 21:58:21 +08:00
星外之神
235b467205 更改小推车设定 2022-05-10 21:20:26 +08:00
星外之神
44adb8f7fc 更新截图 2022-05-10 17:19:18 +08:00
星外之神
4990cf1c31 更新截图 2022-05-10 17:10:52 +08:00
星外之神
b5bdf1234c 修复缠绕水草被死亡僵尸误触的bug 2022-05-10 17:06:56 +08:00
星外之神
e2546e552d 进度说明 2022-05-10 16:59:35 +08:00
星外之神
f9ae8e77b5 修改大喷菇贴图 2022-05-10 16:58:34 +08:00
星外之神
0a98857526 实现大喷菇 2022-05-10 16:42:02 +08:00
星外之神
1d35afd649 增加植物初始攻击间隔,修复咖啡豆bug 2022-05-10 13:51:38 +08:00
星外之神
9cb27a7d86 完善部分大喷菇素材 2022-05-09 23:08:18 +08:00
星外之神
f508bd3976 增加部分图片 2022-05-09 18:09:48 +08:00
星外之神
85283b8242 增加大喷菇部分素材 2022-05-09 17:28:29 +08:00
星外之神
89c72f8db9 增加撑杆跳僵尸与冰车僵尸的部分素材 2022-05-09 16:33:29 +08:00
星外之神
560adeb0ce 改回起始关卡 2022-05-09 10:27:46 +08:00
星外之神
e36a0aeb68 说明 2022-05-09 10:26:22 +08:00
星外之神
2b5034cd6c 增加墓碑种类 2022-05-09 10:21:03 +08:00
星外之神
f69db323ab 更新截图 2022-05-09 09:43:00 +08:00
星外之神
167ed5a1f5 增加最后一大波新增一个墓碑的机制;优化 2022-05-09 09:36:46 +08:00
星外之神
653009c6be 完善植物列表 2022-05-09 00:07:49 +08:00
星外之神
384148af67 增加墓碑吞噬者音效 2022-05-08 23:19:44 +08:00
星外之神
13389bae23 含泳池的模式最后一波从水中生成3个僵尸 2022-05-08 22:59:39 +08:00
星外之神
7dbd6f0b77 增加墓碑在最后一波可以冒出僵尸的功能 2022-05-08 22:34:34 +08:00
星外之神
adad151a8e 加入墓碑和墓碑吞噬者 2022-05-08 21:55:58 +08:00
星外之神
d30eeb725e 去除无用传参 2022-05-08 20:02:40 +08:00
星外之神
a6d10a0972 更新进度完成状况 2022-05-08 18:04:02 +08:00
星外之神
4a527d1946 咖啡豆bug修复说明 2022-05-08 17:53:26 +08:00
星外之神
8656af0d59 新增植物说明 2022-05-08 17:15:55 +08:00
星外之神
24a548a94f 更改啃食豁免逻辑 2022-05-08 17:07:39 +08:00
星外之神
953e6305ac 更新水中的毁灭菇坑 2022-05-08 16:59:54 +08:00
星外之神
ba1e4776f4 加入毁灭菇 2022-05-08 16:51:54 +08:00
星外之神
82f60f3368 说明 2022-05-08 10:44:46 +08:00
星外之神
d96ccf5fa8 增加缠绕水草音效 2022-05-08 10:34:42 +08:00
星外之神
69d9020d3f 更正缠绕水草阳光 2022-05-08 01:28:07 +08:00
星外之神
7229ecf991 更正缠绕水草冷却时间 2022-05-08 01:27:01 +08:00
星外之神
22c946ffc9 修复缠绕水草的bug 2022-05-08 01:02:28 +08:00
星外之神
69848b39e3 加入缠绕水草 2022-05-08 00:46:04 +08:00
星外之神
f51424811b 修复高坚果种植闪退的错误 2022-05-07 23:32:03 +08:00
星外之神
9b020e1b57 加入高坚果 2022-05-07 23:28:15 +08:00
星外之神
4444ec2fa8 碰撞修改 2022-05-07 15:23:36 +08:00
星外之神
4cf625c3f4 说明 2022-05-07 15:14:06 +08:00
星外之神
aa1733526a 更改对random的调用 2022-05-06 23:19:08 +08:00
星外之神
1733a8ea0c 倭瓜改为碰撞检测 2022-05-06 19:19:26 +08:00
星外之神
0f723f43d4 整理掉奇怪的代码 2022-05-06 19:06:22 +08:00
星外之神
640059eb47 改用碰撞函数表示土豆雷攻击 2022-05-06 19:00:52 +08:00
星外之神
4df085cf4c 构建命令 2022-05-06 18:36:03 +08:00
星外之神
cc9a9d0ef3 更改土豆雷设定 2022-05-06 18:32:30 +08:00
星外之神
4f9df6de38 优化音效 2022-05-06 18:13:37 +08:00
星外之神
62976366c1 引入没有雾的浓雾模式 2022-05-06 14:52:27 +08:00
星外之神
3fc37066f4 加入没有雾的浓雾模式 2022-05-06 14:41:35 +08:00
星外之神
ba1788bf5c 修改土豆雷设定 2022-05-06 14:32:07 +08:00
星外之神
1165e083cc 说明 2022-05-06 14:28:53 +08:00
星外之神
3fc01d6a62 在坚果保龄球中加回报纸僵尸 2022-05-06 14:27:31 +08:00
星外之神
39a98e3848 修改音效播放设定,修改刷新设定,加入报纸僵尸暴走音效,优化游戏速度倍率设定 2022-05-06 14:25:39 +08:00
星外之神
1e28521f66 削弱土豆雷攻击范围 2022-05-06 13:32:08 +08:00
星外之神
05d7ad2adb 删除不需要的常数 2022-05-06 13:28:47 +08:00
星外之神
e222687474 更改植物死亡音效触发机制 2022-05-06 13:10:55 +08:00
星外之神
fda640ec30 优化代码结构 2022-05-06 13:04:31 +08:00
星外之神
3e996c103d 加入更多音效 2022-05-06 11:23:31 +08:00
星外之神
d1e1c3757c 更改倭瓜音效播放时间 2022-05-06 10:40:37 +08:00
星外之神
b96b3d9c11 计划内容更新 2022-05-05 23:50:12 +08:00
星外之神
d5080c194d 优化土豆雷音效 2022-05-05 23:23:55 +08:00
星外之神
9ea76dce22 修复部分音效的bug 2022-05-05 23:03:53 +08:00
星外之神
df3e649fd5 更新编译命令 2022-05-05 21:54:18 +08:00
星外之神
ccb1b7622b 说明 2022-05-05 20:48:20 +08:00
星外之神
bcad079977 备注更新 2022-05-05 20:46:42 +08:00
星外之神
a828fa085b 进一步说明 2022-05-05 20:32:31 +08:00
星外之神
c2a64c50cc 对齐 2022-05-05 20:31:32 +08:00
星外之神
9099e12302 大幅改进bgm设定 2022-05-05 20:18:30 +08:00
星外之神
8526d2ed1b 尝试加入音效 2022-05-05 19:18:50 +08:00
星外之神
89445251ec 更改音效时长 2022-05-05 18:36:11 +08:00
星外之神
0ace82ce01 增加部分音效素材 2022-05-05 17:31:44 +08:00
星外之神
c7ad44a840 更改冷却时间 2022-05-05 12:37:24 +08:00
星外之神
a4d778f5fc 加入铁门僵尸 2022-05-05 11:53:34 +08:00
星外之神
a0234e81c7 加入铁门僵尸部分素材 2022-05-05 11:25:32 +08:00
星外之神
a79b8cff71 进一步优化魅惑的僵尸在水池中的行为 2022-05-05 11:13:02 +08:00
星外之神
d1f5d798b4 优化被魅惑僵尸 2022-05-05 11:00:53 +08:00
星外之神
7fad9e1244 优化泳池被魅惑僵尸的行为 2022-05-05 10:50:40 +08:00
星外之神
dbd290357e 计划说明 2022-05-05 09:38:54 +08:00
星外之神
fd944f69af 变更计划 2022-05-05 09:34:10 +08:00
星外之神
f7d4606db4 计划说明 2022-05-05 09:32:24 +08:00
星外之神
bc44f69f55 新增植物说明 2022-05-05 09:26:55 +08:00
星外之神
1d72fc05a2 完善海蘑菇子弹 2022-05-05 09:17:08 +08:00
星外之神
110c5a47c4 加入海蘑菇 2022-05-05 08:55:06 +08:00
星外之神
72a47dfcdc 更改表述 2022-05-04 23:31:17 +08:00
星外之神
7049309d6b 更改胆小菇设定 2022-05-04 22:55:46 +08:00
星外之神
d545205b4e 更新植物列表 2022-05-04 22:50:57 +08:00
星外之神
f26c6071ce 修复魅惑菇bug 2022-05-04 22:46:34 +08:00
星外之神
b62f651f3f 优化代码结构 2022-05-04 22:22:55 +08:00
星外之神
d48260636a 减少变量名歧义 2022-05-04 22:21:24 +08:00
星外之神
33d10028ae 加入咖啡豆 2022-05-04 22:18:11 +08:00
星外之神
41b65c8635 修复水生僵尸浮在陆地上的bug 2022-05-04 19:41:34 +08:00
星外之神
77cfa8fbae 默认关闭调试 2022-05-04 19:07:23 +08:00
星外之神
c91adf2ef2 修复橄榄球等级过低的bug 2022-05-04 19:05:21 +08:00
星外之神
001e63fc56 优化水上生成僵尸方法 2022-05-04 18:30:07 +08:00
星外之神
8ba3c041b4 完整加入水生僵尸 2022-05-04 18:21:47 +08:00
星外之神
b7b26d7597 水上可生成僵尸 2022-05-04 14:25:33 +08:00
星外之神
0b7a969ac6 鸭子救生圈路障 2022-05-04 13:32:32 +08:00
星外之神
bf6a81885e 基本实现鸭子救生圈僵尸 2022-05-04 12:53:17 +08:00
星外之神
94f8329803 加入部分咖啡豆素材 2022-05-04 11:28:49 +08:00
星外之神
4245080c9d 更改bmg判断机制 2022-05-04 10:28:27 +08:00
星外之神
66c6eed456 更改变量名防止歧义 2022-05-04 09:59:19 +08:00
星外之神
03e21550ad 更改变量名防止歧义 2022-05-04 09:57:54 +08:00
星外之神
f99c8cadc4 加入部分鸭子救生圈僵尸的素材 2022-05-03 14:45:43 +08:00
星外之神
5276e90d72 为保证攻击时常平衡,取消时间缩短 2022-05-03 14:25:19 +08:00
星外之神
cf6aab5cda 适当缩短首次攻击间隔的延迟时间 2022-05-03 14:20:09 +08:00
星外之神
90d9aa72df 平衡僵尸攻击力 2022-05-03 14:15:59 +08:00
wszqkzqk
e66f2307cf 增加僵尸啃咬连续性 2022-05-03 14:10:27 +08:00
星外之神
8fd178cf47 微调攻击范围 2022-05-03 13:30:19 +08:00
星外之神
0b45d46fdb 微调攻击范围 2022-05-03 13:15:47 +08:00
星外之神
dfcbff5228 微调攻击范围 2022-05-03 13:12:53 +08:00
星外之神
0a5ce37a73 更新运行条件 2022-05-03 10:32:48 +08:00
星外之神
16b78f4c42 更改执行条件 2022-05-03 10:06:09 +08:00
星外之神
a907076c04 更改模式传递实现方式 2022-05-03 09:53:13 +08:00
星外之神
4a38a0f225 更新述图 2022-05-02 23:13:37 +08:00
星外之神
db2e25e6d2 修改细节和调试功能 2022-05-02 22:57:39 +08:00
星外之神
363a39e6ea 区分输出 2022-05-02 22:20:19 +08:00
星外之神
3871f2f1f4 恢复鼠标指针信息输出 2022-05-02 22:18:22 +08:00
星外之神
66d1aae6b9 删除部分调试内容 2022-05-02 22:17:18 +08:00
星外之神
1939f8b93b 修复体验了小游戏关卡之后冒险博士关卡进度传递失败的bug 2022-05-02 22:16:13 +08:00
星外之神
217c3b608c 平衡难度 2022-05-02 21:49:20 +08:00
星外之神
7746db315d 修复平衡难度过程中的脑残错误 2022-05-02 21:47:28 +08:00
星外之神
830cb79c03 平衡难度 2022-05-02 21:46:57 +08:00
星外之神
9aff1d6b2d 调整数据,使旗帜升起时间与一大波时间对应 2022-05-02 21:09:11 +08:00
星外之神
fc0ac1a54d 微调数据 2022-05-02 19:43:16 +08:00
星外之神
17d399216b 修复数据错误 2022-05-02 19:39:52 +08:00
星外之神
5028f86b03 拟合僵尸出生点 2022-05-02 19:39:01 +08:00
星外之神
4e4a33f066 微调位置 2022-05-02 19:23:11 +08:00
星外之神
f41adb62da 微调位置 2022-05-02 18:56:04 +08:00
星外之神
92a98087c4 微调数据 2022-05-02 18:49:32 +08:00
星外之神
da32c290a1 关卡进程旗帜在达到后可自动升起 2022-05-02 18:45:24 +08:00
星外之神
f402a328bd 增加关卡进程图片 2022-05-02 17:32:04 +08:00
星外之神
dc2d839bea 引入旗帜 2022-05-02 16:51:54 +08:00
星外之神
fa4004ea48 增加关卡进程素材:僵尸头和旗帜 2022-05-02 09:41:19 +08:00
星外之神
70b07098f8 增加关卡进程图片 2022-05-02 09:17:45 +08:00
星外之神
309a6dfbf0 加入部分大喷菇的素材 2022-05-01 22:37:22 +08:00
星外之神
1cb119555d 修复红字提示bug 2022-05-01 22:16:27 +08:00
星外之神
e0f05cda8a 修复判断的逻辑bug 2022-05-01 21:43:24 +08:00
星外之神
c14283d818 一大波僵尸来袭时增加提示 2022-05-01 21:25:57 +08:00
星外之神
4afe2f5d3e 平衡传送带关难度 2022-05-01 11:10:48 +08:00
星外之神
37e3550af6 移除冗余 2022-04-30 14:11:19 +08:00
星外之神
992aae306e 大波先生成旗帜僵尸 2022-04-30 11:57:23 +08:00
星外之神
b72186c8a2 增加指定波数生成僵尸的功能 2022-04-30 11:47:46 +08:00
星外之神
721fb85827
Merge pull request #1 from wszqkzqk/0.5.0
0.5.0
2022-04-30 11:35:18 +08:00
星外之神
3e239141ef 基本实现自动化生成僵尸 2022-04-30 11:33:00 +08:00
星外之神
e4768049ac 尝试引入新僵尸生成机制 2022-04-29 17:39:34 +08:00
星外之神
f09eb5e5ec 缩短播放间隔 2022-04-28 21:16:11 +08:00
星外之神
3792870cf3 修复僵尸贴图显示异常的bug 2022-04-28 13:31:59 +08:00
星外之神
32e57c4136 部分新僵尸生成机制 2022-04-27 20:54:18 +08:00
星外之神
13213ee162 在关卡中加入橄榄球 2022-04-27 12:55:43 +08:00
星外之神
169bef4baa 修复杨桃子弹穿过火炬树时闪退的bug 2022-04-27 12:54:43 +08:00
星外之神
cddf7e1ecb 实现橄榄球僵尸 2022-04-26 23:18:31 +08:00
星外之神
a927fc02fb 加入橄榄球僵尸资源 2022-04-26 22:12:56 +08:00
星外之神
077dd54e0f 加入橄榄球僵尸资源 2022-04-26 22:12:40 +08:00
星外之神
947f31a351 最大阳光数限制 2022-04-25 08:09:22 +08:00
星外之神
97d9b98200 更新截图 2022-04-24 23:56:57 +08:00
星外之神
a0c7bb5bab readme 2022-04-24 22:53:57 +08:00
星外之神
05d106a368 修改杨桃设定 2022-04-24 22:45:47 +08:00
星外之神
dca79c68d1 更新杨桃检测机制 2022-04-24 22:12:15 +08:00
星外之神
9b91d881d0 更改杨桃设定 2022-04-24 18:47:34 +08:00
星外之神
c140a376ba 优化杨桃子弹 2022-04-24 15:17:09 +08:00
星外之神
4c9fd6506f 修复杨桃子弹向后打中僵尸闪退的bug 2022-04-24 13:41:33 +08:00
星外之神
ecbb70d134 合并预览与点击的检查方式 2022-04-24 13:31:59 +08:00
星外之神
d054279e3f 修复图片未显示全的bug 2022-04-24 13:24:37 +08:00
星外之神
a630ca79e4 更改动画播放间隔 2022-04-24 13:17:59 +08:00
星外之神
836999c889 增加点按钮前的动画效果 2022-04-24 13:17:01 +08:00
星外之神
3507eb5972 冰豌豆爆炸时使用独立图片 2022-04-24 00:45:48 +08:00
星外之神
cbfa280893 写了个有一堆bug的杨桃 2022-04-24 00:23:36 +08:00
星外之神
6a218c042e 修改火炬树贴图 2022-04-23 22:18:13 +08:00
星外之神
26ed451083 再写一点杨桃 2022-04-23 20:59:07 +08:00
星外之神
01be40c044 修复三线射手豌豆位置显示bug 2022-04-23 18:57:52 +08:00
星外之神
127bbda80a 为单行、三行草皮加入做好准备 2022-04-23 11:03:25 +08:00
星外之神
0bc71ab340 特性更改:按照原版设定土豆雷也不能在睡莲上种植 2022-04-22 23:20:02 +08:00
星外之神
021ed42f7c 更改不可种植区域的设定 2022-04-22 23:13:19 +08:00
星外之神
8866ac7050 完善注释 2022-04-22 23:04:55 +08:00
星外之神
58bc563578 删除图片冗余部分 2022-04-22 22:37:32 +08:00
星外之神
9305a347d1 将植物在选择菜单种的顺序改为与原版相同 2022-04-22 22:22:27 +08:00
星外之神
bb9dbe3604 避开color_key 2022-04-22 19:32:47 +08:00
星外之神
f4bac801c8 增加卡槽数 2022-04-22 19:18:51 +08:00
星外之神
416c6239b1 更新截图 2022-04-22 16:11:17 +08:00
星外之神
064ed3569e 修复拼写错误带来的笑话 2022-04-22 16:07:03 +08:00
星外之神
3bcd43137a 修复拼写错误带来的笑话 2022-04-22 16:05:32 +08:00
星外之神
5d444371da 修复火炬树不耗阳光的bug 2022-04-22 15:52:21 +08:00
星外之神
8344c2e121 修复睡莲贴图靠上的bug 2022-04-22 15:42:09 +08:00
星外之神
b78e97b2b1 修复僵尸会在上面有植物时把睡莲啃掉的bug 2022-04-22 14:40:48 +08:00
星外之神
ccbfda85b5 铲子优先对睡莲上的植物而非睡莲生效 2022-04-22 14:30:08 +08:00
星外之神
7acbb320d2 汇总更新内容 2022-04-21 21:45:36 +08:00
星外之神
5398442bc0 新增植物:火炬树桩 2022-04-21 21:40:42 +08:00
星外之神
6447727b2f 增加部分素材 2022-04-21 09:27:30 +08:00
星外之神
d2bc785f8e 修复倭瓜生效后不能在原种植位置种植植物的bug 2022-04-21 00:15:41 +08:00
星外之神
ced6b55b2b 增加部分素材 2022-04-20 23:24:42 +08:00
星外之神
64587b8bff 区别透明度 2022-04-20 22:46:13 +08:00
星外之神
369bdcf747 更改卡片间隔 2022-04-20 22:29:24 +08:00
星外之神
4d4403a023 修复传送带模式图片过大的bug 2022-04-20 16:34:15 +08:00
星外之神
be176ed345 顺序修改 2022-04-20 16:28:15 +08:00
星外之神
7846003b22 初步实现睡莲 2022-04-20 16:21:51 +08:00
星外之神
9f3d2eae91 加入睡莲 2022-04-20 14:37:23 +08:00
星外之神
008fe52c9e 压缩体积 2022-04-19 19:52:54 +08:00
星外之神
e9460229fe 更改透明度设定,压缩音乐体积 2022-04-19 18:59:03 +08:00
星外之神
b1941820c6 铲子指向多个植物时只高亮将移除的那一个 2022-04-19 00:47:56 +08:00
星外之神
8d513fab5d 截图更新 2022-04-18 09:33:47 +08:00
星外之神
26e49297e5 修复报纸被非灰烬植物秒杀后会触发加速的bug 2022-04-18 09:23:35 +08:00
星外之神
81c8d3d3a5 更改坚果保龄球伤害 2022-04-17 21:36:32 +08:00
星外之神
f057771c60 掉头僵尸假攻击不再触发植物高亮 2022-04-17 21:23:06 +08:00
星外之神
45ff017943 更新说明 2022-04-17 21:05:24 +08:00
星外之神
5556852ba6 修复闪退bug 2022-04-17 20:57:45 +08:00
星外之神
88c09f6a9d 更改检查是否可以种植的机制 2022-04-17 20:36:58 +08:00
星外之神
fdc86eb0c3 修复水中可以直接种普通植物的bug 2022-04-17 19:34:26 +08:00
星外之神
2532f8e325 初步加入泳池模式 2022-04-17 18:43:08 +08:00
星外之神
5117d01d66 避免黑色显示透明 2022-04-17 13:03:09 +08:00
星外之神
bb6f9a8b10 更改卡片间距 2022-04-17 11:22:39 +08:00
星外之神
124ccc0e15 默认选卡数=最大选卡数才能进入下一关 2022-04-16 10:03:39 +08:00
星外之神
02d3bb467f 备注 2022-04-16 02:27:15 +08:00
星外之神
caa64b42f6 画饼 2022-04-14 09:30:40 +08:00
星外之神
729668e7fa 更新截图 2022-04-14 09:27:40 +08:00
星外之神
b1e5a6fc26 修复小游戏完成后不能进入冒险模式的bug 2022-04-14 08:58:52 +08:00
星外之神
62c5733817 更新计划说明 2022-04-14 00:22:53 +08:00
星外之神
d495aef2f9 修复僵尸状态检查bug;更改贴图位置;改变僵尸动画帧率;增加铲子导入检查;修复喷菇子弹有冰冻的bug 2022-04-13 23:16:19 +08:00
星外之神
fa58f317cc 说明更新 2022-04-13 19:57:22 +08:00
星外之神
567541beae 统一透明度 2022-04-13 19:48:23 +08:00
星外之神
7c807acb4e 铲子接近植物时会高亮提示 2022-04-13 19:42:05 +08:00
星外之神
236685e832 注释序号修改 2022-04-13 19:08:59 +08:00
星外之神
11e8eb8e6e 优化:寒冰射手无法减速持有二类防具的僵尸
新增:坚果保龄球单独的攻击模式
修改:读报僵尸、旗帜僵尸生命值、移动速度恢复原版设定
2022-04-13 19:03:13 +08:00
星外之神
05d34c3a7b 更新已完成进度 2022-04-13 17:00:20 +08:00
星外之神
2333f47416 修复没有防具时不受范围伤害的bug 2022-04-13 16:50:38 +08:00
星外之神
c41f1349ce 修复变量名错误 2022-04-13 16:46:36 +08:00
星外之神
c82b1e3b92 增加fallback 2022-04-13 16:40:34 +08:00
星外之神
ffba6b71f1 注释完善 2022-04-13 16:34:37 +08:00
星外之神
e329e60487 完善攻击处理 2022-04-13 16:33:21 +08:00
星外之神
97223185de 修复一般子弹的攻击类型问题 2022-04-13 16:07:08 +08:00
星外之神
67708efa32 从理论上实现僵尸本体和防具的区别 2022-04-13 16:03:51 +08:00
星外之神
96271fbfe1 修复土豆雷使用闪退的bug 2022-04-13 14:36:22 +08:00
星外之神
03558a6899 更新贴图 2022-04-13 14:18:29 +08:00
星外之神
36af33c562 更改贴图位置 2022-04-13 14:01:34 +08:00
星外之神
846d39d695 删除冗余文件 2022-04-13 01:03:14 +08:00
星外之神
698a172c07 缩小体积 2022-04-13 00:54:15 +08:00
星外之神
2e61f3e4b4 增加素材 2022-04-13 00:50:36 +08:00
星外之神
dc259579ce 修复模式切换bug 2022-04-12 23:31:45 +08:00
星外之神
5911f10f1b 实现小游戏与冒险模式分开计数关卡 2022-04-12 23:20:07 +08:00
星外之神
0f699394a4 更改冰冻 2022-04-12 22:42:41 +08:00
星外之神
d5a8f9c124 按照原版设定,不隐藏鼠标 2022-04-12 22:38:07 +08:00
星外之神
764e9b7eef 按照原版设定,不隐藏鼠标 2022-04-12 22:36:41 +08:00
星外之神
66e2b9e47e 铲子移除植物不触发植物功能 2022-04-12 22:29:11 +08:00
星外之神
7bacfef07e 真正修复pvz炸弹爆炸的时候僵尸贴图透明的bug 2022-04-12 22:03:53 +08:00
星外之神
19fc29009d 修复爆炸后僵尸黑色不显示 2022-04-12 00:15:44 +08:00
星外之神
9dc66c1b7a 缩小双发射手两发之间的间隔 2022-04-10 21:12:57 +08:00
星外之神
de88801e24 加快子弹移动速度 2022-04-10 20:54:21 +08:00
星外之神
9fdd050a66 地刺改进 2022-04-09 22:24:29 +08:00
星外之神
31968ea817 bug汇总 2022-04-09 17:08:00 +08:00
星外之神
ffa2f497f5 修复点阳光时误触到其他按钮的bug 2022-04-09 15:43:12 +08:00
星外之神
3e47fbd633 将小推车晚于其他渲染 2022-04-09 12:43:06 +08:00
星外之神
1f42c0271f 修改小推车实现方式 2022-04-09 12:02:46 +08:00
星外之神
96a6a019b6 更改土豆雷触发机制,更改小推车碰撞范围 2022-04-09 11:27:37 +08:00
星外之神
585f898113 修改辣椒攻击范围 2022-04-09 00:48:07 +08:00
星外之神
cd2e2b66d8 去除废弃数据 2022-04-08 23:07:38 +08:00
星外之神
1f3181a3c1 使用原版模式进行濒死僵尸处理 2022-04-08 22:55:04 +08:00
星外之神
fcd6714389 画饼 2022-04-08 19:37:32 +08:00
星外之神
c97ef49a8c 画饼 2022-04-08 19:11:18 +08:00
星外之神
56c7c10ae6 更改阳光掉落机制 2022-04-08 19:04:55 +08:00
星外之神
b7d1aabe0e 注释 2022-04-08 18:48:21 +08:00
星外之神
8a195208d4 注释画饼 2022-04-08 18:45:20 +08:00
星外之神
b74ebbc2cf 注释 2022-04-08 18:42:22 +08:00
星外之神
6fd5607235 注释 2022-04-08 18:17:55 +08:00
星外之神
e41165170a 已知bug更新 2022-04-08 16:50:00 +08:00
星外之神
07bc480d5f 计划 2022-04-08 16:29:57 +08:00
星外之神
8c53b32010 汇总bug 2022-04-08 16:09:09 +08:00
星外之神
29d4a39fd0 画饼 2022-04-08 16:06:56 +08:00
星外之神
916f3bcb8f 为画的饼做准备:优化僵尸y坐标生成 2022-04-08 15:56:03 +08:00
星外之神
6dfd5a4a17 更改双发射手的实现逻辑,更改子弹起始位置 2022-04-08 15:40:59 +08:00
星外之神
7aa5c8265e 改进动画 2022-04-08 15:16:10 +08:00
星外之神
3e4663a26d 优化动画效果 2022-04-08 15:00:35 +08:00
星外之神
dc02965354 实现僵尸坐标随机生成 2022-04-08 13:22:06 +08:00
星外之神
e64762dc35 改进混乱的变量名 2022-04-08 02:40:14 +08:00
星外之神
42b9d505c4 修复暂停游戏时僵尸与阳光的生成仍在计时的bug 2022-04-07 23:26:02 +08:00
星外之神
e29a1a2567 修复暂停了但是没有完全暂停的bug 2022-04-07 23:22:39 +08:00
星外之神
ada477c5a5 添加注释 2022-04-07 22:59:45 +08:00
星外之神
4ed1f0a7ef 修复僵尸在用铲子移除植物后还在原位啃食的bug 2022-04-07 13:20:15 +08:00
星外之神
b6e0961d2b 将炸弹伤害改为1800,为巨人作准备 2022-04-07 13:03:19 +08:00
星外之神
21b0611b22 更改地刺、倭瓜攻击范围 2022-04-07 12:55:28 +08:00
星外之神
bcae34ba1a 避免版权问题 2022-04-07 00:14:21 +08:00
星外之神
54abf8d5a1 说明 2022-04-07 00:11:13 +08:00
星外之神
e7b5e88ad9 说明 2022-04-07 00:10:00 +08:00
1737 changed files with 7579 additions and 2169 deletions

142
.github/workflows/build-pr.yml vendored Normal file
View File

@ -0,0 +1,142 @@
name: "Build for PR"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
jobs:
windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
python_version:
- "3.12"
name: Windows Python ${{ matrix.python_version }}
steps:
- uses: actions/checkout@v2
- uses: ilammy/msvc-dev-cmd@v1
- name: Use Python ${{ matrix.python_version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python_version }}
- name: 🧳 Install dependencies
run: |
echo y | pip install --no-python-version-warning --disable-pip-version-check pyinstaller
echo y | pip install --no-python-version-warning --disable-pip-version-check nuitka
echo y | pip install --no-python-version-warning --disable-pip-version-check zstandard
echo y | pip install --no-python-version-warning --disable-pip-version-check pygame
echo y | pip install --no-python-version-warning --disable-pip-version-check ordered-set
# 使用pyinstaller构建
- name: Build pypvz with pyinstaller
run: |
pyinstaller -F pypvz.py `
-n pypvz-with-python${{ matrix.python_version }}-pyinstaller-x64.exe `
--distpath ./out `
--noconsole `
--add-data="resources;./resources" `
--add-data="pypvz-exec-logo.png;./pypvz-exec-logo.png" `
-i ./pypvz.ico
- name: Release the version built by pyinstaller
if: github.event.pull_request.head.repo.full_name == github.repository
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Dev.Version.Built.with.Pyinstaller
artifacts: ./out/*pyinstaller*.exe
token: ${{ secrets.GITHUB_TOKEN }}
# 使用Nuitka构建
- name: Show nuitka version
run: |
Get-ChildItem env:
python -m nuitka --version
- name: Build pypvz with Nuitka
run: |
echo y | python -m nuitka --standalone `
--onefile `
--show-progress `
--show-memory `
--output-dir=out `
--windows-icon-from-ico=pypvz.ico `
--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\libopusfile-0.dll=libopusfile-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libjpeg-9.dll=libjpeg-9.dll `
--include-data-dir=resources=resources `
--windows-disable-console `
-o pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
pypvz.py
- name: Release the version built by nuitka
if: github.event.pull_request.head.repo.full_name == github.repository
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Dev
artifacts: ./out/*nuitka*.exe
token: ${{ secrets.GITHUB_TOKEN }}
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python_version:
- "3.12"
name: Ubuntu Python ${{ matrix.python_version }}
steps:
- name: 🛎️ Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: 🐍 Use Python ${{ matrix.python_version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python_version }}
- name: 🧳 Install dependencies
run: |
sudo apt-get update
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 nuitka
python -m pip install --no-python-version-warning --disable-pip-version-check pygame
# 使用Nuitka构建
- name: Show nuitka version
run: |
env
python -m nuitka --version
- name: Build pypvz with Nuitka
run: |
yes | python -m nuitka \
--onefile \
--standalone \
--include-data-dir=resources=resources \
--linux-onefile-icon=pypvz.png \
--static-libpython=no \
--remove-output \
-o pypvz-with-python${{ matrix.python_version }}-linux-x86_64.bin \
pypvz.py
- name: Release the version built by nuitka
if: github.event.pull_request.head.repo.full_name == github.repository
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Dev
artifacts: ./pypvz*-x86_64.*
token: ${{ secrets.GITHUB_TOKEN }}

141
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,141 @@
name: Build
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches:
- master
jobs:
windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
python_version:
- "3.12"
name: Windows Python ${{ matrix.python_version }}
steps:
- uses: actions/checkout@v2
- uses: ilammy/msvc-dev-cmd@v1
- name: Use Python ${{ matrix.python_version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python_version }}
- name: 🧳 Install dependencies
run: |
echo y | pip install --no-python-version-warning --disable-pip-version-check pyinstaller
echo y | pip install --no-python-version-warning --disable-pip-version-check nuitka
echo y | pip install --no-python-version-warning --disable-pip-version-check zstandard
echo y | pip install --no-python-version-warning --disable-pip-version-check pygame
echo y | pip install --no-python-version-warning --disable-pip-version-check ordered-set
# 使用pyinstaller构建
- name: Build pypvz with pyinstaller
run: |
pyinstaller -F pypvz.py `
-n pypvz-with-python${{ matrix.python_version }}-pyinstaller-x64.exe `
--distpath ./out `
--noconsole `
--add-data="resources;./resources" `
--add-data="pypvz-exec-logo.png;./pypvz-exec-logo.png" `
-i ./pypvz.ico
- name: Release the version built by pyinstaller
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Current.Version.Built.with.Pyinstaller
artifacts: ./out/*pyinstaller*.exe
token: ${{ secrets.GITHUB_TOKEN }}
# 使用Nuitka构建
- name: Show nuitka version
run: |
Get-ChildItem env:
python -m nuitka --version
- name: Build pypvz with Nuitka
run: |
echo y | python -m nuitka --standalone `
--onefile `
--show-progress `
--show-memory `
--output-dir=out `
--windows-icon-from-ico=pypvz.ico `
--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\libopusfile-0.dll=libopusfile-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libjpeg-9.dll=libjpeg-9.dll `
--include-data-dir=resources=resources `
--windows-disable-console `
-o pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
pypvz.py
- name: Release the version built by nuitka
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Latest
artifacts: ./out/*nuitka*.exe
token: ${{ secrets.GITHUB_TOKEN }}
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python_version:
- "3.12"
name: Ubuntu Python ${{ matrix.python_version }}
steps:
- name: 🛎️ Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: 🐍 Use Python ${{ matrix.python_version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python_version }}
- name: 🧳 Install dependencies
run: |
sudo apt-get update
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 nuitka
python -m pip install --no-python-version-warning --disable-pip-version-check pygame
# 使用Nuitka构建
- name: Show nuitka version
run: |
env
python -m nuitka --version
- name: Build pypvz with Nuitka
run: |
yes | python -m nuitka \
--onefile \
--standalone \
--include-data-dir=resources=resources \
--linux-onefile-icon=pypvz.png \
--static-libpython=no \
--remove-output \
-o pypvz-with-python${{ matrix.python_version }}-linux-x86_64.bin \
pypvz.py
- name: Release the version built by nuitka
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Latest
artifacts: ./pypvz*-x86_64.*
token: ${{ secrets.GITHUB_TOKEN }}

14
.gitignore vendored
View File

@ -1,8 +1,14 @@
# ignore debug # 忽略构建内容
out/ out/
build/ test-build/
release/
# 忽略调试内容
.vscode/ .vscode/
# 忽略 Pycharm 项目文件
.idea/
__pycache__/ __pycache__/
*/__pycache__/ */__pycache__/
# ignore test # 忽略测试文件
test.py test*.py
# uv 管理的虚拟环境
.venv

1
.python-version Normal file
View File

@ -0,0 +1 @@
3.12

675
LICENSE
View File

@ -1,675 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

264
README.md
View File

@ -1,57 +1,120 @@
## Python版植物大战僵尸 ## Python版植物大战僵尸
植物大战僵尸游戏的Python实现基于[marblexu的项目进行创作](https://github.com/marblexu/PythonPlantsVsZombies) 植物大战僵尸游戏的Python实现基于[marblexu的项目进行创作](https://github.com/marblexu/PythonPlantsVsZombies),部分代码也整合自[callmebg的项目](https://github.com/callmebg/PythonPlantsVsZombies)
`本项目为个人python语言学习所用的练习项目,仅供个人学习和研究使用,不得用于其他用途。如果这个游戏侵犯了版权,请联系我删除` **本项目为个人python语言学习的练习项目,仅供个人学习和研究使用,不得用于其他用途。如果这个游戏侵犯了版权,请联系我删除**
* 已有的植物:向日葵,豌豆射手,坚果墙,寒冰射手,樱桃炸弹,三线射手,大嘴花,小喷菇,土豆雷,地刺,胆小菇,倭瓜,火爆辣椒,阳光菇,寒冰菇,魅惑菇 * 已有的植物:向日葵,豌豆射手,坚果墙,寒冰射手,樱桃炸弹,双发射手,三线射手,大嘴花,小喷菇,土豆雷,地刺,胆小菇,倭瓜,火爆辣椒,阳光菇,寒冰菇,魅惑菇,火炬树桩,睡莲,杨桃,咖啡豆,海蘑菇,高坚果,缠绕水草,毁灭菇,墓碑吞噬者,大喷菇,大蒜,南瓜头
* 已有的僵尸:普通僵尸,旗帜僵尸,路障僵尸,铁桶僵尸,读报僵尸 * 已有的僵尸:普通僵尸,旗帜僵尸,路障僵尸,铁桶僵尸,读报僵尸,橄榄球僵尸,鸭子救生圈僵尸,铁门僵尸,撑杆跳僵尸,冰车僵尸,潜水僵尸
* 使用 JSON 格式的文件存储进度数据 (例如僵尸出现的位置和时间,背景信息) * 使用JSON文件记录关卡信息数据
* 在0.8.18.0及以后直接用python记录关卡的不可变数据JSON目前仅用于用户存档
* 支持选择植物卡片 * 支持选择植物卡片
* 支持白昼模式,夜晚模式,传送带模式和坚果保龄球模式 * 支持白昼模式,夜晚模式,泳池模式,浓雾模式(暂时没有加入雾),传送带模式和坚果保龄球模式
* 支持背景音乐播放 * 支持背景音乐播放
* 支持调节音量
* 支持音效
* 支持与背景音乐一起调节音量
* 支持全屏模式 * 支持全屏模式
* 按`F`键进入全屏模式,按`U`键恢复至窗口模式 * 按`F`键进入全屏模式,按`U`键恢复至窗口模式
* 支持用小铲子移除植物 * 支持用小铲子移除植物
* 支持分波生成僵尸
* 支持“关卡进程”进度条显示
* 夜晚模式支持墓碑以及从墓碑生成僵尸
* 含有泳池的模式支持在最后一波时从泳池中自动冒出僵尸
* 支持保存进度
* Windows下默认进度文件的保存路径为`~\AppData\Roaming\pypvz\userdata.json`
* 其他操作系统为`~/.config/pypvz/userdata.json`
* 存档为JSON文件如果出现因存档损坏而造成程序无法启动可以手动编辑修复或者删除该文件重试
* 0.8.12.0版本后理论上不可能因为存档损坏而无法启动,如果有,请在[issues](https://github.com/wszqkzqk/pypvz/issues)中报告bug
* 仍然有可能因为升级后变量名不同而丢失存档的进度信息,这种情况手动编辑恢复即可
* 支持错误日志记录
* Windows下默认日志文件的保存路径为`~\AppData\Roaming\pypvz\run.log`
* 其他操作系统为`~/.config/pypvz/run.log`
* 支持自定义游戏速度倍率
* 保存在游戏存档文件中,可以通过修改`game rate`值更改速度倍率
* 游戏完成成就显示
* 任意一游戏模式全部完成显示银向日葵奖杯
* 所有模式全部完成显示金向日葵奖杯
* 光标移动到向日葵奖杯上是显示当前各个模式通关次数
* 含有游戏帮助界面 QwQ
## 环境要求 ## 环境安装
* `Python` >= 3.7 建议使用 [uv](https://docs.astral.sh/uv/) 安装依赖:
* `Python-Pygame` >= 1.9
```bash
git clone https://github.com/wszqkzqk/pypvz.git
cd pypvz
uv sync
```
或者参考:
* `Python3` (建议 >= 3.10,最好使用最新版)
* `Python-Pygame` (建议 >= 2.0,最好使用最新版)
## 开始游戏 ## 开始游戏
### 使用仓库源代码 ### 使用仓库源代码
先克隆仓库内容,再运行`main.py` 先克隆仓库内容,再运行`pypvz.py`
```shell ```shell
git clone https://github.com/wszqkzqk/pypvz.git git clone https://github.com/wszqkzqk/pypvz.git
cd pypvz cd pypvz
python main.py python pypvz.py
``` ```
### 使用Windows可执行文件 ### 使用Windows可执行文件
在本仓库的`Release`页面中下载`pypvz.exe`文件,双击运行即可 下载`pypvz.exe`文件,双击运行即可
- 可以在仓库的[`Releases`](https://github.com/wszqkzqk/pypvz/releases)页面中[下载最新版(点击跳转)](https://github.com/wszqkzqk/pypvz/releases/latest)(推荐):
- 使用GCC编译
- 程序包含名称、版本等信息
- 得到的验证最多
- 并非每次提交都会更新,更新可能不及时
- 也可以直接下载GitHub Workflow[自动利用Nuitka构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Latest)(推荐):
- 使用MSVC编译
- 每次合并提交到主分支时更新
- 得到的验证较多
- 服务器构建,编译环境更纯粹,冗余更少,体积更小
- 还可以下载GitHub Workflow[自动利用Pyinstaller构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Current.Version.Built.with.Pyinstaller)
- 在程序闪退时有报错窗口弹出
- 程序性能较差,不推荐
- 均仅支持64位操作系统
- 不依赖python、pygame等外部环境开箱即用
### 使用Linux可执行文件
由于Linux几乎都标配了Python环境因此本程序不太重视Linux下可执行的单文件的维护因此没有手动构建版只能下载自动构建的软件包。可以在仓库的[`Releases`](https://github.com/wszqkzqk/pypvz/releases)页面中[下载最新版(点击跳转)](https://github.com/wszqkzqk/pypvz/releases/latest)。
## 方法 ## 方法
* 使用鼠标收集阳光,种植植物 * 使用鼠标收集阳光,种植植物
* 你可以通过更改`source/constants.py`中的`START_LEVEL_NUM`的数值来更改起始关卡: * 对于已经存在存档的用户,可以在`~\AppData\Roaming\pypvz\userdata.json`Windows`~/.config/pypvz/userdata.json`(其他操作系统)中修改当前关卡:
* 冒险模式: * 冒险模式:
* 1 和 2白昼模式 * 白昼模式——单行草皮1
* 3夜晚模式 * 白昼模式——三行草皮2
* 白昼模式3~5
* 夜晚模式6~8
* 泳池模式9~11
* 浓雾模式暂时没有雾12
* 小游戏模式: * 小游戏模式:
* 1传送带模式 * 坚果保龄球1
* 2坚果保龄球模式 * 传送带模式白天2
* **注意:目前单文件发布版本不支持自定义调整关卡** * 传送带模式黑夜3
* 传送带模式泳池4
* 坚果保龄球(II)5
* 目前暂时按照以上设定,未与原版相符
* 可以通过修改存档JSON文件中的`game rate`值来调节游戏速度倍率
## Windows单文件封装 ## Windows单文件封装
### 使用Nuitka进行构建
编译依赖: 编译依赖:
- `Python` >= 3.7 - `Python3` (建议 >= 3.10,最好使用最新版)
- `Python-Pygame` >= 1.9 - `Python-Pygame` (建议 >= 2.0,最好使用最新版)
- `Nuitka` - `Nuitka`
- `MinGW-w64`或其他C编译器 - `MinGW-w64`或其他C编译器
- `ccache` - `ccache`
@ -64,44 +127,132 @@ python main.py
- 对于`mp3`编码,需要添加`libmpg123-0.dll` - 对于`mp3`编码,需要添加`libmpg123-0.dll`
- 对于`vorbis`编码,需要添加`libogg-0.dll``libvorbis-0.dll``libvorbisfile-3.dll` - 对于`vorbis`编码,需要添加`libogg-0.dll``libvorbis-0.dll``libvorbisfile-3.dll`
- 对于`opus`编码,需要添加`libogg-0.dll``libopus-0.dll``libopusfile-0.dll` - 对于`opus`编码,需要添加`libogg-0.dll``libopus-0.dll``libopusfile-0.dll`
- 以添加`opus`编码的背景音乐支持为例,编译需执行以下命令: - 以添加`opus``vorbis`编码的背景音乐支持为例,编译需执行以下命令:
``` cmd ``` cmd
git clone https://github.com/wszqkzqk/pypvz.git git clone https://github.com/wszqkzqk/pypvz.git
cd pypvz cd pypvz
nuitka --mingw --standalone --onefile --show-progress --show-memory --output-dir=out --windows-icon-from-ico=pypvz.ico --include-data-dir=resources=resources --include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libogg-0.dll=libogg-0.dll --include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libopus-0.dll=libopus-0.dll --include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll --windows-disable-console main.py nuitka --mingw64 --standalone `
--onefile `
--show-progress `
--show-memory `
--output-dir=release `
--windows-icon-from-ico=pypvz.ico `
--include-data-dir=resources=resources `
--include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libogg-0.dll=libogg-0.dll `
--include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libopus-0.dll=libopus-0.dll `
--include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll `
--include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libvorbisfile-3.dll=libvorbisfile-3.dll `
--include-data-file=C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\libvorbis-0.dll=libvorbis-0.dll `
--lto=yes `
--windows-disable-console `
--windows-product-name=pypvz `
--windows-company-name=wszqkzqk.dev `
--windows-file-description="pypvz" `
--windows-product-version=0.8.2.0 `
pypvz.py
``` ```
* 其中`C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\xxx.dll`应当替换为`xxx.dll`实际所在路径 * 其中`C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\xxx.dll`应当替换为`xxx.dll`实际所在路径,`--output-dir=`后应当跟实际需要输出的路径,绝对路径或者相对路径均可
* 由于仅复制了`opus`的解码器故要求所有背景音乐都要以opus编码 * 由于仅复制了`opus``vorbis`的解码器故要求所有背景音乐都要以opus或vorbis编码
* `--windows-product-version=`表示版本号信息,所跟内容格式必须为`x.x.x.x`
* 建议开启`--lto=yes`选项优化链接,如果编译失败可以关闭此选项
可执行文件生成路径为`./out/main.exe` 可执行文件生成路径为`./release/pypvz.exe`
如果只需要在本地生成编译文件测试,则只需要执行:
``` cmd
nuitka --mingw64 `
--follow-imports `
--show-progress `
--output-dir=test-build `
--windows-icon-from-ico=pypvz.ico `
--windows-product-name=pypvz `
--windows-company-name=wszqkzqk.dev `
--windows-file-description=pypvz `
--windows-disable-console `
--windows-product-version=0.8.2.0 `
pypvz.py
```
这样生成的程序只能在具有相同python环境的机器上运行
### 使用pyinstaller进行构建
- 由于pyinstaller构建的程序运行效率显著较nuitka构建的程序低下并且程序体积也往往比nuitka构建的程序大因此本项目并不推荐使用pyinstaller构建
- 但是因为pyinstaller直接封装了所导入的库中的全部内容使用pyinstaller构建时不需要手动添加媒体解码库
- pyinstaller并没有涉及python源代码优化、C源代码生成以及C源代码编译链接过程因此编译速度显著快于nuitka
编译依赖:
- `Python3` (建议 >= 3.10,最好使用最新版)
- `Python-Pygame` (建议 >= 2.0,最好使用最新版)
- `Pyinstaller`
编译参考命令:
``` cmd
pyinstaller -F pypvz.py `
--distpath ./release `
--noconsole `
--add-data="resources;./resources" `
--add-data="pypvz-exec-logo.png;./pypvz-exec-logo.png" `
-i ./pypvz.ico
```
可执行文件生成路径为`./release/pypvz.exe`
### 使用Github Workflow进行自动构建
直接复制本项目下的`.github/workflows`下的文件,进行少许改动即可满足大多数需求
## 已知bug ## 已知bug
以下问题囿于个人目前的能力与精力,没有修复: 以下问题囿于个人目前的能力与精力,没有修复:
* 冷冻的僵尸未用蓝色滤镜标识 * 冷冻的僵尸未用蓝色滤镜标识
* 这个想不到很好的实现方法,可能会想一种替代方案
* 魅惑的僵尸未用红色滤镜标识 * 魅惑的僵尸未用红色滤镜标识
* 暂停游戏时僵尸与阳光的生成仍在计时 * 这个可能会作为一种“特性”
* 南瓜头显示不正常
* 墓碑吞噬者吞噬墓碑过程中被吞噬的墓碑顶端不会消失
**欢迎提供[Pull requests](https://github.com/wszqkzqk/pypvz/pulls)或修复方法建议** **欢迎提供[Pull requests](https://github.com/wszqkzqk/pypvz/pulls)或修复方法建议也欢迎在这里反馈新的bug()**
## ~~画大饼~~计划(不保证实施) ## ~~画大饼~~计划(不保证实施)
* 增加关卡进程进度条
* 该功能自0.5.4已实现
* 增加保存数据文件以存储用户进度的功能 * 增加保存数据文件以存储用户进度的功能
* 该功能自0.8.0.0已实现
* 增加调整音量的功能
* `pg.mixer.music.set_volume()`
* 可以用`音量+``音量-`按钮实现
* 注意字体颜色渲染
* 该功能自0.8.14.0已实现
* 关卡开始前增加预览界面
* 增加解锁与选关功能
* 目前的设想与原版不同,在完成两轮冒险模式(初始冒险模式 + 戴夫选关的冒险模式)后可以自主选关~~(当然现在只是画饼)~~
* 更改僵尸生成方式 * 更改僵尸生成方式
* 使僵尸生成更随机化由JSON记录改为随机数生成 * 使僵尸生成更随机化由JSON记录改为随机数生成
* 该功能自0.5.0已经基本实现
* 使用原版设定每面旗帜出10波僵尸9个小波1个大波
* 采用手机版设定无尽模式没有红眼计数和变速设定每波红眼权重为1000平均分布
* 增加僵尸死亡后有概率掉落奖励的机制
* 增加更多植物、僵尸类型与游戏功能、模式,尽量符合原版基本设计 * 增加更多植物、僵尸类型与游戏功能、模式,尽量符合原版基本设计
* 细分伤害种类 * 细分伤害种类
* 实体 * 实体
* 一般子弹实体——普通伤害且无特殊效果 * 一般子弹实体——普通伤害且无特殊效果
* 豌豆 * 豌豆
* 已实现
* 孢子 * 孢子
* 已实现
* 星星 * 星星
* 已实现
* 尖刺 * 尖刺
* 特殊子弹实体——非普通伤害或有特殊效果 * 特殊子弹实体——非普通伤害或有特殊效果
* 冰豌豆(减速) * 冰豌豆(减速)
* 已实现
* 火豌豆2倍伤害、带有1x1溅射 * 火豌豆2倍伤害、带有1x1溅射
* 已实现
* 投掷 * 投掷
* 西瓜4倍伤害带有3x3溅射 * 西瓜4倍伤害带有3x3溅射
* 冰瓜4倍伤害带有3x3溅射伤害与减速 * 冰瓜4倍伤害带有3x3溅射伤害与减速
@ -110,43 +261,78 @@ nuitka --mingw --standalone --onefile --show-progress --show-memory --output-dir
* 卷心菜2倍伤害 * 卷心菜2倍伤害
* 烟雾 * 烟雾
* 线形范围烟雾 * 线形范围烟雾
* 自0.7.10.0起已实现
* 圆形范围烟雾 * 圆形范围烟雾
* 碾压 * 碾压
* 倭瓜 * 倭瓜
* 已实现
* 爆炸 * 爆炸
* 一般爆炸 * 一般爆炸
* 樱桃炸弹、爆炸坚果与玉米加农炮炮弹 * 樱桃炸弹、爆炸坚果与玉米加农炮炮弹
* 已实现
* 毁灭菇 * 毁灭菇
* 自0.7.6.0已实现
* 火焰爆炸 * 火焰爆炸
* 火爆辣椒 * 火爆辣椒
* 非灰烬类爆炸(在本项目中可以考虑与一般爆炸合并) * 已实现
* 非灰烬类爆炸
* 土豆雷 * 土豆雷
* 已实现
* 从地面刺伤 * 从地面刺伤
* 已实现
* 缠绕与拖拽 * 缠绕与拖拽
* 自0.7.5.0已实现
* 与原版有所区别,设定上秒杀任意僵尸
* 吞噬 * 吞噬
* 已实现
* 与原版有所区别,设定上秒杀任意僵尸
* 特殊 * 特殊
* 魅惑 * 魅惑
* 已实现
* 移除铁制防具 * 移除铁制防具
* 全场伤害与冰冻 * 全场伤害与冰冻
* 已实现
* 撞击 * 撞击
* 坚果保龄球撞击 * 坚果保龄球撞击
* 已实现
* 巨型坚果保龄球撞击 * 巨型坚果保龄球撞击
* 吹走 * 吹走
* 更改僵尸生命值机制
* 将防具和本体分开
* 对防具的破损状态予以展示
* 增加部分音效 * 增加部分音效
* 如爆炸、打击等 * 如爆炸、打击等
* 自0.6.9已部分实现
* 增加关卡前的本关僵尸预览
* 鼠标移动到植物上时显示部分信息,类似图鉴功能
## 截屏 ## 截屏
![截屏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](/screenshots/screenshot-7.webp)
![截屏8](/screenshots/screenshot-8.webp)
![截屏9](/screenshots/screenshot-9.webp)
![截屏10](/screenshots/screenshot-10.webp)
![截屏11](/screenshots/screenshot-11.webp)
![截屏12](/screenshots/screenshot-12.webp)
![截屏13](/screenshots/screenshot-13.webp)
![截屏14](/screenshots/screenshot-14.webp)
![截屏15](/screenshots/screenshot-15.webp)
![截屏16](/screenshots/screenshot-16.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)
## 开源协议 ## 关于日志与反馈
[![GPL v3](https://www.gnu.org/graphics/gplv3-127x51.png)](https://www.gnu.org/licenses/gpl-3.0.html) 对于闪退情况Linux用户与Windows下的python源代码运行用户可以直接在终端中复制出崩溃日志进行反馈。
Windows单文件封装版本无法通过终端显示日志需要在日志文件中寻找崩溃原因
* Windows默认日志文件路径为`~\AppData\Roaming\pypvz\run.log`
* 其他操作系统为`~/.config/pypvz/run.log`,但一般可以在终端中显示时用终端中的输出即可

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

View File

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

15
main.py
View File

@ -1,15 +0,0 @@
#!/usr/bin/env python
import pygame as pg
from source import tool
from source import constants as c
from source.state import mainmenu, screen, level
if __name__=='__main__':
# 控制状态机运行
game = tool.Control()
state_dict = {c.MAIN_MENU: mainmenu.Menu(),
c.GAME_VICTORY: screen.GameVictoryScreen(),
c.GAME_LOSE: screen.GameLoseScreen(),
c.LEVEL: level.Level()}
game.setup_states(state_dict, c.MAIN_MENU)
game.run()

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",
]

BIN
pypvz-exec-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

51
pypvz.py Executable file
View File

@ -0,0 +1,51 @@
#!/usr/bin/env python
import logging
import os
import traceback
from logging.handlers import RotatingFileHandler
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)):
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为644Windows为可读写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()}')

Binary file not shown.

View File

@ -1,90 +0,0 @@
<mxfile host="65bd71144e" modified="2020-11-30T06:16:32.395Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.51.1 Chrome/83.0.4103.122 Electron/9.3.3 Safari/537.36" etag="RC1RIFtEJiW45I55AWKe" version="13.6.5" pages="2">
<diagram id="FslXHE_8ykSBRjm2p2tr" name="第 1 页">
<mxGraphModel dx="724" dy="461" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="3300" pageHeight="4681" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="2" value="mainmenu" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="140" y="210" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="3" value="level" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="420" y="150" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="4" value="game over" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="680" y="210" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="5" value="little games" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="420" y="270" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="6" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="2" target="3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="580" y="360" as="sourcePoint"/>
<mxPoint x="630" y="310" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="7" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=1.025;exitY=0.867;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="2" target="5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="290" y="340" as="sourcePoint"/>
<mxPoint x="340" y="290" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="9" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="3" target="4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="580" y="200" as="sourcePoint"/>
<mxPoint x="630" y="150" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="10" value="" style="shape=flexArrow;endArrow=classic;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="5" target="4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="630" y="330" as="sourcePoint"/>
<mxPoint x="680" y="280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="11" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="4" target="2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="720" y="150" as="sourcePoint"/>
<mxPoint x="260" y="50" as="targetPoint"/>
<Array as="points">
<mxPoint x="530" y="70"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="1ls8mGlj3wdy2eXAvnXn-11" value="control" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="140" y="390" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="1ls8mGlj3wdy2eXAvnXn-12" value="" style="shape=flexArrow;endArrow=classic;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="1ls8mGlj3wdy2eXAvnXn-11" target="2">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="180" y="370" as="sourcePoint"/>
<mxPoint x="230" y="320" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="1ls8mGlj3wdy2eXAvnXn-13" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="80" y="470" as="sourcePoint"/>
<mxPoint x="815.3333740234375" y="470" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="1ls8mGlj3wdy2eXAvnXn-14" value="" style="shape=flexArrow;endArrow=classic;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="1ls8mGlj3wdy2eXAvnXn-11">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="200" y="560" as="sourcePoint"/>
<mxPoint x="200" y="500" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="1ls8mGlj3wdy2eXAvnXn-15" value="Actor" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
<mxGeometry x="260" y="550" width="30" height="60" as="geometry"/>
</mxCell>
<mxCell id="1ls8mGlj3wdy2eXAvnXn-16" value="input" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="220" y="510" width="40" height="20" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="CydbNID2VFdMlwzW122j" name="Page-2">
<mxGraphModel dx="724" dy="461" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="-akz3d4JWGbzF8o_4E1M-0"/>
<mxCell id="-akz3d4JWGbzF8o_4E1M-1" parent="-akz3d4JWGbzF8o_4E1M-0"/>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -1,14 +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},
"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,25 +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}
}
}

View File

@ -1,13 +0,0 @@
{
"background_type":1,
"init_sun_value":5000,
"shovel":1,
"zombie_list":[
{"time":1000, "map_y":2, "name":"BucketheadZombie"},
{"time":1000, "map_y":2, "name":"BucketheadZombie"},
{"time":1000, "map_y":2, "name":"Zombie"},
{"time":1000, "map_y":2, "name":"Zombie"},
{"time":1000, "map_y":2, "name":"Zombie"},
{"time":1000, "map_y":2, "name":"Zombie"}
]
}

View File

@ -1,20 +0,0 @@
{
"background_type": 0,
"init_sun_value": 50,
"shovel": 1,
"zombie_list": [
{ "time": 20000, "map_y": 0, "name": "Zombie" },
{ "time": 40000, "map_y": 2, "name": "FlagZombie" },
{ "time": 50000, "map_y": 4, "name": "Zombie" },
{ "time": 70000, "map_y": 3, "name": "Zombie" },
{ "time": 72000, "map_y": 1, "name": "FlagZombie" },
{ "time": 74000, "map_y": 2, "name": "Zombie" },
{ "time": 90000, "map_y": 0, "name": "Zombie" },
{ "time": 91000, "map_y": 1, "name": "FlagZombie" },
{ "time": 92000, "map_y": 2, "name": "Zombie" },
{ "time": 93000, "map_y": 3, "name": "FlagZombie" },
{ "time": 94000, "map_y": 0, "name": "Zombie" },
{ "time": 95000, "map_y": 4, "name": "FlagZombie" },
{ "time": 96000, "map_y": 1, "name": "Zombie" }
]
}

View File

@ -1,20 +0,0 @@
{
"background_type":0,
"init_sun_value":50,
"shovel":1,
"zombie_list":[
{"time":20000, "map_y":0, "name":"Zombie"},
{"time":40000, "map_y":2, "name":"FlagZombie"},
{"time":50000, "map_y":4, "name":"ConeheadZombie"},
{"time":70000, "map_y":3, "name":"ConeheadZombie"},
{"time":72000, "map_y":1, "name":"FlagZombie"},
{"time":74000, "map_y":2, "name":"ConeheadZombie"},
{"time":90000, "map_y":0, "name":"FlagZombie"},
{"time":91000, "map_y":1, "name":"ConeheadZombie"},
{"time":92000, "map_y":2, "name":"Zombie"},
{"time":93000, "map_y":3, "name":"ConeheadZombie"},
{"time":94000, "map_y":0, "name":"Zombie"},
{"time":95000, "map_y":4, "name":"FlagZombie"},
{"time":96000, "map_y":1, "name":"ConeheadZombie"}
]
}

View File

@ -1,21 +0,0 @@
{
"background_type":1,
"init_sun_value":50,
"shovel":1,
"zombie_list":[
{"time":20000, "map_y":0, "name":"Zombie"},
{"time":40000, "map_y":2, "name":"ConeheadZombie"},
{"time":50000, "map_y":4, "name":"BucketheadZombie"},
{"time":70000, "map_y":3, "name":"BucketheadZombie"},
{"time":72000, "map_y":1, "name":"FlagZombie"},
{"time":74000, "map_y":2, "name":"ConeheadZombie"},
{"time":90000, "map_y":0, "name":"BucketheadZombie"},
{"time":91000, "map_y":1, "name":"ConeheadZombie"},
{"time":92000, "map_y":2, "name":"Zombie"},
{"time":93000, "map_y":3, "name":"BucketheadZombie"},
{"time":94000, "map_y":0, "name":"Zombie"},
{"time":95000, "map_y":4, "name":"FlagZombie"},
{"time":96000, "map_y":1, "name":"BucketheadZombie"},
{"time":97000, "map_y":1, "name":"FlagZombie"}
]
}

View File

@ -1,42 +0,0 @@
{
"background_type":0,
"choosebar_type":1,
"shovel":1,
"card_pool":[
{"name":"Peashooter"},
{"name":"SnowPea"},
{"name":"WallNut"},
{"name":"CherryBomb"},
{"name":"RepeaterPea"},
{"name":"Chomper"},
{"name":"PotatoMine"}
],
"zombie_list":[
{"time": 1000, "map_y":1, "name":"Zombie"},
{"time": 6000, "map_y":3, "name":"FlagZombie"},
{"time":10000, "map_y":0, "name":"ConeheadZombie"},
{"time":14000, "map_y":2, "name":"NewspaperZombie"},
{"time":18000, "map_y":4, "name":"BucketheadZombie"},
{"time":22000, "map_y":0, "name":"Zombie"},
{"time":26000, "map_y":3, "name":"BucketheadZombie"},
{"time":30000, "map_y":4, "name":"Zombie"},
{"time":32000, "map_y":3, "name":"NewspaperZombie"},
{"time":34000, "map_y":1, "name":"FlagZombie"},
{"time":36000, "map_y":2, "name":"ConeheadZombie"},
{"time":38000, "map_y":0, "name":"BucketheadZombie"},
{"time":40000, "map_y":1, "name":"ConeheadZombie"},
{"time":42000, "map_y":1, "name":"NewspaperZombie"},
{"time":60000, "map_y":4, "name":"Zombie"},
{"time":61000, "map_y":3, "name":"NewspaperZombie"},
{"time":62000, "map_y":1, "name":"FlagZombie"},
{"time":63000, "map_y":2, "name":"Zombie"},
{"time":64000, "map_y":0, "name":"BucketheadZombie"},
{"time":65000, "map_y":1, "name":"ConeheadZombie"},
{"time":66000, "map_y":2, "name":"Zombie"},
{"time":67000, "map_y":4, "name":"BucketheadZombie"},
{"time":68000, "map_y":3, "name":"NewspaperZombie"},
{"time":69000, "map_y":1, "name":"FlagZombie"},
{"time":70000, "map_y":4, "name":"BucketheadZombie"},
{"time":71000, "map_y":0, "name":"FlagZombie"}
]
}

View File

@ -1,34 +0,0 @@
{
"background_type":4,
"choosebar_type":2,
"shovel":0,
"card_pool":[
{"name":"WallNutBowling"},
{"name":"RedWallNutBowling"}
],
"zombie_list":[
{"time": 1000, "map_y":1, "name":"Zombie"},
{"time":10000, "map_y":3, "name":"FlagZombie"},
{"time":12000, "map_y":0, "name":"ConeheadZombie"},
{"time":14000, "map_y":2, "name":"NewspaperZombie"},
{"time":18000, "map_y":4, "name":"BucketheadZombie"},
{"time":22000, "map_y":3, "name":"Zombie"},
{"time":26000, "map_y":1, "name":"BucketheadZombie"},
{"time":30000, "map_y":4, "name":"Zombie"},
{"time":32000, "map_y":3, "name":"NewspaperZombie"},
{"time":34000, "map_y":1, "name":"FlagZombie"},
{"time":36000, "map_y":2, "name":"ConeheadZombie"},
{"time":40000, "map_y":1, "name":"ConeheadZombie"},
{"time":42000, "map_y":1, "name":"NewspaperZombie"},
{"time":50000, "map_y":4, "name":"Zombie"},
{"time":54000, "map_y":3, "name":"NewspaperZombie"},
{"time":58000, "map_y":1, "name":"FlagZombie"},
{"time":62000, "map_y":2, "name":"Zombie"},
{"time":64000, "map_y":1, "name":"ConeheadZombie"},
{"time":66000, "map_y":2, "name":"Zombie"},
{"time":68000, "map_y":3, "name":"NewspaperZombie"},
{"time":70000, "map_y":1, "name":"FlagZombie"},
{"time":72000, "map_y":4, "name":"BucketheadZombie"},
{"time":74000, "map_y":0, "name":"FlagZombie"}
]
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 968 B

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

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