239
社区成员




这个作业属于哪个课程 | 24秋-软件工程&实践-W班 |
---|---|
这个作业要求在哪里 | 软件工程实践第一次作业-CSDN社区 |
这个作业的目标 | 学习Markdown语法,学习使用CodeArts + Git。对过去进行反思,总结当下,并对未来做出规划。 |
其他参考文献 | 《构建之法》 |
仓库地址:222200414 - Repo (huaweicloud.com)
从小就有开发游戏的兴趣,从四年级开始自学编程,对软件工程抱有纯粹的热爱情感,因而选择了这个匹配自己特长和爱好的专业。同时,我认为选择这个专业可以帮助我在这条职业道路上不断发展前行,最终达成目标。
在此之前虽然有多年自学编程的经验,但一直没有一套专业的理论体系。和专业的人交流起来总感到有些障碍,不少专业名词、理论说不出来,难以理解。所以期待这个专业可以填上我这一块的空缺,有了更多、更好的理论知识的支撑,我觉得我可以再向上发展一个高度。同时期待能带给我更多的机会接触前沿技术,扩展我的知识面。
我希望在进入专业学习后,多参与相关的竞赛,尝试更多的技术,制作更多类型的游戏。为此,阅读了一些书籍、文档和开源项目代码。曾经立下flag要公开发布一款独立制作的游戏。
个人信息 | |
---|---|
姓名 | 陈志琰 |
兴趣爱好 | 游戏开发,写文 |
专业水平 | |
专业能力 |
熟悉 Unity C# 跨平台客户端开发,了解前端基础知识,了解一些图形API,了解一些 Win32 API。
熟悉 UniTask、DoTween、TextMeshPro 等插件的使用。 熟悉 独立游戏 研发、测试、发行 等的流程。 |
代码量 | 10万+ |
Milthm - 主策划/客户端主程序(2023.2.15 - 至今)
一款音乐节奏类游戏,同时跨越移动端和PC端。使用 Unity 进行研发,为其研发了关卡播放器、可视化关卡设计器、局域网关卡实机测试、游戏界面框架、声画同步系统、视觉小说脚本解释器等,利用动态剔除等技术实现大量游戏物体的状态更新,使用云端CI完成 iOS 版本的构建和推送。
全球首次安装量超过 100 万,下载量(含更新下载)超过 500 万,日平均活跃用户量达1万人。Milthm 曾登顶 TapTap 的预约榜和新品榜榜首,自公测以来,大部分时间位居音乐游戏分区 TOP 5。TapTap 游戏评分达到 9.5 / 10(高分游戏)、Steam 游戏评分达到 “特别好评” 。同时面向海外发布,游戏内设置多国语言。
Milease - 主程序(2023.5 - 至今)
用于 Unity 的 UI 开发解决方案。用于快速创建带有丰富缓动效果的动画,可对大部分的成员生成动画控制代码,封装了UI状态机,实现近似于css的设计体验,同时提供其他 UI 开发辅助工具,例如 无限列表、更好的 ContentSizeFitter 等。
该项目已用于另一个游戏 Milthm 并得到广泛实践。Github 获得 30+ Star。
把水还给水 - 主程序(2023.1)
以翻转地图重力为特色玩法的平台跳跃游戏。负责主要程序架构以及游戏主体内容的代码编写。实现主要的关卡机关、特色玩法、移动端输入控制、小地图等。
该作品为网易MiniGame 2023挑战赛的决赛作品,决赛采用Gamejam 72小时开发的形式进行,最终获得了决赛三等奖。
鱼传尺素 - 主程序(2022.9)
负责主要程序架构以及客户端与服务端主体内容的代码编写。运用网易云信SDK,并利用 UDP 协议自研 适用于 双人在线 客户场景 的 以 指令 为单元的客户端-服务端-客户端 式 的游戏通信架构,并实现游戏位置的实时同步。采用委托回调的方式、并开发全局动画状态机提高关卡设计效率。
该作品为网易MiniGame 2023挑战赛的初赛作品,最终晋级。
DreamY - 程序/策划(2020-2022)
基于Mirai和CQBridge实现的QQ游戏机器人,负责了包括人物、装备、宠物养成,玩家间的虚拟交易,每周玩家PVP活动、组队副本活动,抽卡玩法和隐藏彩蛋任务等的功能实现。
运营期间曾有注册玩家约3000,平均日活100+,平均日操作数1万+。
MyChat - 程序(2021)
一款用于课堂的师生互动软件。通过自研的Emerald框架实现UI,并参与实现客户端与服务端的指令通信、消息转发、文件传输等功能。结合百度云AI人脸识别技术,利用 win32 编程实现课堂违纪窗口的检查和拦截,实现从外部载入vbs脚本实现APP内的“机器人”功能。
该项目曾获得全国青少年科技创新大赛省级二等奖。
Emerald - 主程序(2019 - 2020)
独自研发的适用于UI实现和游戏实现的多功能框架,运用GDI、GDI+ 图形接口 以及双缓冲技术 进行画面绘制,集成Bass音频库,并设计了场景管理器、场景切换的自动过渡动画、动画脚本解释器、输入消息处理器、开发调试工具等。用户可以通过右键资源管理器菜单,一键构建包含框架的空白工程,并能管理框架的版本,一键制作安装包等。
该项目曾为我个人开发游戏提供了不少便利,后用于参加全国青少年科技创新大赛、中小学电脑制作活动,分别获得了 省级三等奖 与 省级一等奖。
我认为需要考虑很多因素,比如功能点、团队的历史数据、甚至是工程师的个人经验。不能光看代码量,还得算上设计、测试这些环节,“一个人写1万行代码,10个人就能写10万行”的想法是错误的。我认为可以使用“基于历史数据的估算法”,参考团队过去完成类似任务的历史数据,推算当前任务所需时间。但是这个方法也有一定的局限性,需要有丰富的历史数据做支撑,且历史项目与当前项目需具备一定相似性。同时,我认为风险管理也非常重要。也就是一定要在估算时为不可预见的困难和障碍留出一定的缓冲时间。这是项目延误时的一道防线,帮助团队应对突发情况。
单元测试的一个关键特性是可重复性。如果测试用例中使用了随机数,每次运行测试时,可能会得到不同的结果,这会导致测试结果不稳定。测试应该是确定的,能够在相同的条件下多次运行得出相同的结果。当测试失败时,使用随机数的测试会增加调试的难度。由于随机性,可能很难重现失败的场景,找到问题的根源也就变得更加困难。而且,使用随机数可能导致测试只覆盖到部分可能的输入情况,未能全面覆盖所有可能的边界条件或异常情况。设计良好的测试用例应该覆盖所有边界情况,以确保代码的健壮性。
这里分享一个 Unity 的 iOS 端的自动化开发流程。众所周知,Unity Editor 只能导出 XCode 工程,稍后还需要在 MacOS 上执行编译,非常繁琐。而且大部分的开发者的开发环境还是 Windows 操作系统。这对我们这样的独立游戏开发者来说,是个挺麻烦的事情。可以使用一些代码托管平台的自动化服务,比如 Github 的 Actions。这里推荐 GameCI 的 Action:Getting started | GameCI,配合 Fastlane 使用。这样,在你推送代码至仓库以后,再设定特定的 Action 触发条件,就会自动在云端导出工程、编译、并推送至 TestFlight,简化我们的开发流程。
变量命名时确实应该有描述性,这是编写清晰、可维护代码的一个重要原则。合适的变量名能显著提升代码的可读性和理解性。我认为变量名应该清楚地表达变量的用途和所存储的数据。例如,currentLevel
比 level
更能明确其用途。同时还应该保持命名风格一致。例如,可以使用驼峰式(camelCase
)或蛇形(snake_case
)等风格。虽然变量名需要描述性,但也要避免过长,以免影响代码的可读性。找到一个平衡点,使变量名既有描述性又不过于冗长。
在一个不够完善成熟的团队中,PM的设置是否会将团队的不完善性不成熟性放大?
如果团队内部沟通不畅,PM的角色可能暴露出这些沟通问题。PM需要协调不同成员的工作,处理各种问题,如果团队成员之间的沟通和协作机制不完善,PM的工作会变得更加困难,可能会导致项目的进展受到影响。PM通常负责设定项目目标、时间表和资源分配。如果团队的能力和实际情况与PM设定的期望有较大差距,可能会导致期望与现实之间的冲突,这种差距会显得更加明显,尤其在团队尚未成熟时。同时,在一个不成熟的团队中,责任划分可能不够清晰。如果PM不能有效地管理和协调这些责任,团队的不足之处可能会变得更加明显,尤其是在遇到问题时。
学习更多的游戏开发相关的技术。例如一些 3D 游戏的开发,热更新的实践、Shader 的编写等等。
并尝试制作更多类型的游戏,积攒更多的项目经验。
我认为软件工程实践课程的核心在于将课堂上学到的理论知识(如需求分析、设计模式、测试方法等)与实际项目开发结合起来。通过实际的项目经验,让我们更好地理解和掌握软件工程的基本原理和方法。
我希望能够在软件工程实践课程中,提升我的团队合作能力和项目管理技能。
优秀的专业技术,丰富的项目经历。希望你可以坚定自己的目标并为之不断努力,加油!