20254112邓新锐 2025-2026-2 《Python程序设计》实验4报告
课程:《Python程序设计》
班级: 2541
姓名: 邓新锐
学号:20254112
实验教师:王志强
实验日期:2026年6月12日
必修/选修:专选课
一、实验内容
(一)实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现
(二)实验要求
(1)程序能运行,功能丰富(至少5个功能)。(需求提交源代码,并建议录制程序运行的视频)
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。
二、实验过程及结果
(一)一位三国杀爱好者的失败
作为资深三国杀玩家兼爱好者,不去尝试着设计一个三国杀游戏绝对是不纯粹的杀批。起初,我试图仿照“杀圈”著名的“无名杀”来制作一款简陋的三国杀1v1小游戏,作为大学生活解闷的调料。
我首先将三国杀1v1专用牌堆结构(包括牌的类型、各类牌的张数及对应花色点数)和基本规则集合喂给了kimi,然后下达武将选择局限在标准包的指令,历经半小时的搜索和AI辅助编写,终于完成了基础代码。


正常游戏运行截图如下,虽然页面简陋,但武将选择、出牌选择都正常,玩家2(即人机),也可正常受到伤害和相应牌。

但顽固的bug来了,针对三国杀牌堆中“火攻”这一张锦囊牌(效果为选择一名角色、令其展示一张手牌、然后可弃置与该牌花色相同的牌对其造成一点火焰伤害),使用“火攻”会使程序进入反复循环状态,无法使用,即“火攻”是一张废牌。

推测原因:
1️⃣“火攻”可指定任意一名角色,即可以指定自己,但在1v1中,除“火攻”外不存在既可以对对方使用又可以对自己使用的牌,代码存在疏漏;
2️⃣“火攻”要求的“展示”牌要求的随机性功能代码欠缺;
3️⃣“火攻”要求的“展示”与对方牌不可见的底层逻辑相抵触。
但在反复与AI沟通后,火攻仍无法正常使用。并且,我发现AI并未使用1v1标准武将包,而是使用的常规标准武将包,部分武将技能如貂蝉的“离间”、大乔的“流离”等需要场上至少三个角色才能触发,无法正常实现;且玩家2AI不会主动使用非锁定技……问题越来越多,在AI显示对话过长、请开启一段新对话后(kimi老师也燃尽了😭),我终于决定放弃该游戏的开发,不过,还是录制了一个视频(见压缩包),纪念那个失败的版本。
(二)一位三国爱好者得到救赎
1.设计思路和编写过程(含问题与解决方法)
说起三国题材的游戏,作为一名资深三国历史爱好者,我首先就想到家喻户晓、妇孺皆知、久经时间考验的三国群英传系列游戏。
为保障基本的游戏平衡和操作便捷性,我做了适当的简易化处理,输入了如下提示词

第一版成品无疑是粗糙的,如下图所示,战斗过长(在三国群英传游戏中打斗以动画形式呈现、打斗长是优点,但在小游戏里仅仅是看数字的跳动就显得枯燥乏味了),且易导致平局。


而且内政选择中的“征兵”“屯田”可无限制使用,那我直接第一回合赖皮内政养猪对面人机还玩啥啊(bushi)

而且即便作为一个小游戏而言,它的界面也太过寒碜了,所以我继续通过提示词打磨代码,修复bug,美化界面,最终取得了较为令人满意的v3版本:
如下图,操作菜单已较为完善,回合限制已明确,并新增“天下沙盘”功能。



但在试玩过程中,出现了一个意想不到的情况,金数、兵数到负之后竟然不会判定为输,还能带冥币和幽灵兵打仗🤦♂️,而且,由于“休养”的金数是基于原金数比例增加,甚至出现了金数经“休养”之后越来越负的情况:

而且,武将会出现重复被俘虏的情况;突发事件作为一个选项出现,也有违“突发”二字含义。
基于上述问题,继续改进、优化代码,得到了最终的v4版本“新三国群英传”,演示视频见压缩包。
2.最终代码关键部分展示
1️⃣核心数据架构基础:定义了 100 位武将(魏蜀吴各20,群雄40)、8 种阵法(含克制关系)、10 个副本(难度1-5星)、24 个历史事件(184-280年自动触发)。

2️⃣游戏主循环:整个游戏的主驱动引擎。每回合循环:显示面板 → 玩家操作 → 检查负数 → AI行动 → 推进时间 → 自动事件 → 胜负判定。

3️⃣战斗系统:无需回合制战斗,直接计算双方战力(武将属性 × 阵法加成 × 克制关系 × 随机波动),1.5秒出结果,包含伤亡、俘虏、占城、掠夺、升级等完整反馈。

4️⃣操作面板:所有信息+操作集成在一个屏幕,无需翻页。内政状态实时显示(绿色=可用,红色=已用),负数资源红色警告。

3.功能介绍
1️⃣集成控制面板
将天下大势、内政状态、势力详情、副本冷却、近期事件、操作菜单等全部信息集成于单屏显示。玩家无需翻页即可掌握全局,通过 [1]-[7] 数字键快速执行出征、讨伐、内政、招降、查看武将、调整阵法、查看沙盘等操作,实现"一眼观天下,一键定乾坤"的流畅体验。
2️⃣快速战斗结算系统
出征或讨伐时,系统自动选取双方最强5名武将,基于"武力×阵法攻击加成 + 智力×阵法防御加成×0.5 + 兵力/50"公式计算战力,叠加阵法克制关系(如"鱼鳞阵克锋矢阵")与随机波动系数(0.8~1.2),1.5秒内直接输出胜负结果。战斗涵盖伤亡判定、俘虏机制、城池占领、资源掠夺、武将升级等完整反馈,彻底告别冗长的回合制拉锯。
3️⃣数值为负即判负机制
游戏引入硬性的生存红线:当玩家势力的金钱低于0(国库空虚)、粮草低于0(军无粮自乱)、或可用武将归零时,立即触发Game Over,无需等待敌方进攻。该机制迫使玩家必须审慎经营内政,平衡收支,避免因过度扩张或管理不善导致瞬间崩盘。
4️⃣自动突发事件系统
每经过 3~6 个回合(随机间隔),系统自动强制触发突发事件,无需玩家选择。事件库包含14种情景,其中75%为有利事件(如"天降横财+12000金""名将顿悟全属性+1""城池主动归附"),25%为不利事件(如"蝗灾-粮草""瘟疫-兵力")。事件基于当前势力数值动态计算收益/亏损,既增加游戏不确定性,又通过高概率正向事件保障玩家成长节奏。
5️⃣副本讨伐与阵法克制
游戏设有 10 个难度递增的副本(从"黄巾余党"到"天公将军张角"),玩家可挑选最多5名武将组队挑战。副本设有 3~8 回合冷却时间,高难度副本通关后随机提升武将属性。同时,8 种阵法(鱼鳞、锋矢、锥形等)之间存在明确的克制链条,正确选择阵法可在战斗中获得5%~15%的战力加成,为策略深度提供支撑。
6️⃣历史事件时间轴
游戏内置 24 个真实历史节点(184年黄巾起义至280年晋灭吴),按年月自动推进触发。关键事件如"赤壁之战"会强制削减曹操势力30%兵力,"关羽败走麦城"直接判定其阵亡,"刘备白帝城托孤"触发君主更替。历史事件与玩家操作相互交织,既还原三国时代感,又动态改变势力格局。
4.优劣势分析
优势:
1️⃣控制面板信息密度高。 天下大势、内政状态、势力详情、副本冷却、近期事件、操作菜单全部集成于单屏显示,玩家无需翻页即可掌握全局,实现了"一眼观天下"的流畅体验。
2️⃣战斗结算节奏明快。 摒弃传统回合制拉锯,采用"战力公式 + 阵法克制 + 随机波动"的直接计算模式,1.5秒内输出完整结果(伤亡、俘虏、占城、掠夺、升级),避免了冗长战斗导致的疲劳感。
3️⃣输入验证体系完善。 17处用户输入点均配备 try-except 异常捕获与范围检查,从君主选择到武将编号、从出征目标到副本挑选,均有防崩溃机制,程序鲁棒性较强。
4️⃣历史事件沉浸感足。 24个真实历史节点按184-280年时间轴自动触发,赤壁之战强制削减曹操30%兵力、关羽败走麦城直接判定阵亡等设计,让游戏进程与三国史实交织,增强了代入感。
5️⃣防刷机制设计合理。 内政每回合限1次、副本3-8回合冷却、武将不可重复俘虏,三道枷锁有效防止了玩家通过无限重复操作破坏游戏平衡。
劣势:
1️⃣God Class 过于臃肿。 GameEngine 类独自承担了初始化、选择势力、控制面板、历史事件、突发事件、内政、招降、出征、讨伐、AI行动、胜负判定等45个方法,严重违反单一职责原则,导致代码可读性和可维护性急剧下降。
2️⃣数据完全硬编码,扩展困难。 100位武将、8种阵法、10个副本、24个历史事件、14个突发事件全部写死于源码,新增内容必须直接修改代码,无法实现配置化热更新。
3️⃣无存档读档功能。 游戏进程完全依赖内存存储,退出即丢失,玩家无法保存进度或加载历史存档,长周期游戏体验大打折扣。
4️⃣零设计模式应用。 阵法效果本可用策略模式封装、武将状态本可用状态模式管理、事件触发本可用观察者模式解耦,但实际全部采用过程式编程,代码复用率低,扩展性差。
战斗算法过于简化。 仅比较双方总战力乘以随机数,未体现武将搭配组合、兵种相克关系、地形天气影响等策略深度,高武力武将几乎必胜,策略性不足。
5️⃣AI 逻辑简陋。 敌方势力仅执行"随机征兵 + 随机攻击"两种行为,无目标优先级判断、无联盟合纵连横、无劣势撤退机制,智能化程度低。
6️⃣核心代码重复度高。 出征战斗与讨伐副本的结算逻辑(战力计算、胜负判定、伤亡处理、经验分配)高度重复,未提取公共方法,违反 DRY 原则。
三、实验感悟与课程总结
(一)实验感悟
本次实验最使我受益的,或许不是
浙公网安备 33010602011771号