暑假一周总结:其二
随着几天时间过去,项目的进行也即将完成,准备面对老师的考核。
而关于项目的最终进行总结
项目完成情况
经过多轮迭代开发,系统已实现以下核心功能模块:存档管理系统(新建、载入、删除)、地图网格系统(20×20基础区域+可扩展)、28种建筑类型(涵盖商业、公共设施、居住、工业、交通、基础六大类)、NPC居民系统(8项能力值+性格+天赋+心情评价体系)、随机事件系统(33种事件类型,其中7种支持多选项处理)、资源系统(7种资源的生产、消耗和维护链)、科技树系统(16个节点,4个分支,3种解锁方式)、探险派遣系统(NPC组队外出获取资源)、建筑协同系统(相邻加成和冲突惩罚)、评分系统(6维度周期性评估)、道路建造系统、以及完整的快捷键和交互优化。
数据库层面,系统包含7张数据表,共约110个字段,通过外键建立了完整的关联约束。API层面,提供14个RESTful端点,覆盖所有游戏操作。
技术实现要点
在技术实现中,有几个值得记录的关键决策:
心情系统的设计演变:最初的心情系统采用每时段累加随机值的方式,导致NPC心情无限漂移至0或100。经过重新设计,改为"目标趋近制"——根据当前社区条件计算目标心情值,实际心情以惯性系数(0.85/0.15)缓慢趋近目标。这使得心情成为一个稳定的"评价指标"而非简单的累积值,更符合现实逻辑。
资源系统的引入:独立于核心数值(满意度/经济/环境/人口)之外,加入了7种流通资源。每种建筑具有产出、消耗和维护三组资源配置。这为建筑选择增加了策略深度——采集站产出基础材料但无消耗,适合前期;发电站产出大量能源但消耗材料且污染环境,需要搭配垃圾处理站使用。
数据一致性的教训:在开发过程中,曾因遗漏db.session.commit()导致所有写操作(建造建筑、分配NPC、处理事件)在HTTP请求结束后自动回滚。这个问题困擾了多个版本的调试,直到系统性地审查了所有API端点的数据库操作才定位到根因。此后形成了"所有写操作必须在返回前commit"的铁律。
项目心得
本次课程设计让我对"全栈开发"有了切身体会。一个看似简单的Web游戏,涉及前端交互设计(地图点击、拖拽、缩放、快捷键)、后端业务逻辑(数值计算、概率判定、状态同步)、数据库设计(关系建模、索引优化、事务管理)三个层面的协同。任何一个层面的疏忽都会导致用户体验的断裂。
我也深刻认识到"配置化"的重要性。建筑数据在Python后端和JavaScript前端各有一份拷贝,任何数值调整都需要两处同步修改——这在后期成为了最大的维护负担。理想的做法是将游戏配置抽取为独立的JSON文件,由前后端共同读取,彻底消除数据重复。
最后,游戏系统的"平衡性"是一门艺术而非科学。建筑产出太高会导致经济膨胀,太低则前期无法推进;事件频率太高让玩家疲于应对,太低则缺乏挑战。这些参数的调试占据了开发时间的相当比例,也让我理解了为什么商业游戏需要专门的数值策划岗位。
总结
本项目从最初的基础雏形(简单的建筑+数值系统)逐步演化为包含科技树、资源链、NPC天赋、建筑协同、探险派遣等丰富机制的完整游戏系统。每一轮迭代都在原有基础上叠加新的复杂度,同时通过重构保持代码的可维护性。虽然距离商业游戏的标准仍有差距,但作为数据库课程设计,它充分体现了数据库技术在非传统业务场景中的应用价值。
浙公网安备 33010602011771号