KOFLive Postmortem

为期两个月的团队项目完成了,我们的游戏也已经发布。在这个名叫KOFLive的小游戏里,我们集成了五个真人角色,每个角色有拳脚基本招数以及三个小招、一个大招,硬值、防御、集气、双人对战、人机对战、练习模式等格斗游戏的Feature基本上全部实现,并且做出了比较炫目的特效。无论从目前的下载量还是用户反馈来看,游戏的效果都达到了我们的预期,也算不枉这几个月的一番心血吧J除了这些,整个项目的教训也是显然的。如果说阅读《梦断代码》使我们对"软件难做"有了感性认识,自己亲自参与到一个软件工程项目中才让我们对这一点有了切身体会——不过,只要群策群力规划得当,一个软件项目总归不是难于登天的。我们愿意把我们做这个项目的经验教训与大家分享,希望对软件开发人员能有一些小小的帮助。

  1. 项目的选择

    一个好的项目方案是成功的关键——它不仅能让你的团队得到更多的用户,更能让队员们在开发过程中充满动力——试想,没人愿意为一个"Hello World"工程付出太大精力,同样也没人愿意做一个根本不可能实现的功能:这中间的平衡需要好好掌握。另外,在选择项目时你提出的第一第二乃至第三方案,都很有可能是别人已经做烂掉的东西,这就要求我们在选择项目时,要有足够的观察力,并做足够的市场调研。

    现在想想,我们的队伍在项目选择上,做的不够好:一是对项目的选择规划重视程度不够,表现在提出的备选方案太少,全队六个人仅仅提出了三个方案以供筛选,这是很不好的一点;二是最终选择的项目(链接请看这儿)最重要的Feature实现起来难度太大。整个开发流程中,我们对游戏的愿景可以说有三个阶段:

    1. 一开始,我们不想做太Trivial的项目,更不想基于别人已经做烂了的技术去完成项目。所以我们选择了在这个游戏里加入图像处理的部分:用户输入一张全身照片,我们程序做图像分割,再将分割出的身体各个部分拼接成人体拳打脚踢的各种动作。做的时候才发现,别说拼接,以现在的图像处理技术,自动识别人体胳膊、腿等具体部位都很难,何况在此基础上进行图像分割了;
    2. 之后调整计划,将目标锁定为识别人脸,即识别出人脸并将其加载到游戏内置的人物模型上。这个也比较不现实,因为游戏中大部分时间人物都是以侧脸呈现的,即使我们实现了人脸识别并分割的技术,将其加载到这样的一个模型里也比较难看,这一阶段的博客请看这儿;

     

    1. 这一阶段才是比较现实的:做一个真人角色的搏击游戏,当时我们定下的目标就是"在去除人脸识别的前提下,将游戏的手感做到最好"。事实证明,这是最合适的目标:可以吸引大量用户(我们的下载量和用户反馈证明了这一点),又有适当的难度,是我们努力拼搏四周可以达成的;

所以,"程序员是天生的乐天派"这个说法还是很符合实际情况的。另外我们组没有做过图像处理的组员,在MSRA我们也需要做实习工作,同时三名主力Dev还因为学分问题不得不选修清华姚班开的一门操作系统,在这么繁重的压力下去实现一个图像处理界都没有研究透彻的Feature,实在是不够现实。其实,在项目开始之前,我们不是没有就难度问题咨询过相关的专家,不过可能是不愿打击一群毛头小伙的满腔热情J 他们并没有直接告诉我们这个技术的可行性。所以,奉劝大家在选择项目时,一定要有足够好的市场观察力,肯花时间去好好调研,并要清晰认识自身能力、时间、优先度等客观条件,最好将每一步都仔细规划好,做到"大胆假设,小心求证"J

 

一个好的选题很重要,不过我们当时没有注意到这一点,做出选择不够慎重——这并不是说我们最终做出的项目没有吸引力,只是如果我们当时能够计划的好一些,开发过程中我们能少走很多弯路。从另一个角度来说,上软件工程这门课,最重要的是学会一整套正规的软件开发流程,而并不是说实现一个多难的技术,况且,一个很难的技术也不一定是用户欢迎的,对于一个学生团队,选择项目,不应当以"开发者"驱动,而应当以"用户市场"驱动。

 

  1. 项目的执行

    在Beta阶段开始的时候,PM给每位组员发了封整体进度安排邮件,邮件末尾说"希望软件工程结课时,我们能说出一句:"We're proud of each other"",现在快结课了,我们认为每个人都值得小组其他成员的这一句话: We're proud of youJ 项目执行的两个阶段,尤其是Beta阶段,无论是PM/Dev/Designer/Tester的紧密配合,还是目标改变后的紧急调整,以及发布之前的紧密测试和应急计划,我们都做到了一个良好软件开发团队应该做到的。

    1. 良好的设计架构和清晰的接口。我们的Dev们有着强大的单兵作战能力和丰富的工程经验,他们设计了一整套高效的游戏支持机制,整个工程有着清晰的层次架构:
      1. 最底层的游戏引擎负责图片的透明化、放大缩小、去锯齿、渲染、翻转等操作,并进行图片像素级的碰撞检测和音效支持。
      2. 中间一层是基于引擎的游戏运行逻辑层,在这一层我们进行人物招数和状态转换的设计和加载,实现攻防判定、血气管理、输入检测、AI机制、纠错机制等等。
      3. 最上一层负责整个游戏的流程判断:启动、终止界面的加载、用户选择流程的分支等。

                              2011031422272933.png2011031422275576.png

我们三个层次不同的功能模块之间定义好了完备清晰的借口,极大提高了Dev分工合作的效率以及Designer设计招数和特效的效率,并方便及时查错(要知道设计游戏时,游戏引擎在进行毫秒级的不断渲染,Debug是很难通过IDE 设置断点来实 现的J)如果可能,我们也乐于开放自己的源代码,供大家参考指正。

 

  1. 专业的招数设计和特效制作。我们的Designer中有拳皇游戏的骨灰级玩家,对每个人物的状态转换和招数设计有着很好的设计(这可是一个参数一个参数调试慢工出细活的过程^_^),同时也有精通PS特效制作、研究过用户界面的同学,制作出的效果十分炫目,不信,自己下载游戏看看吧J 大家分别发挥自己的特长,进行充分的合作,保证了游戏的质量和进度。
  2. 严密的发布前应急和测试。我们一直有一个理念:发布日期定在那里,我们要在此之前发布,并且应当对用户负责,不能让用户使用一个Bug很多的花架子。所以我们进行了清晰的进度规划,大到周,小到半天,应当完成的进度十分明了。同时我们进行了有效的发布前规划:
  1. AI机制在发布周之前都没有涉及,我们制定了应急机制:在目标上降低需求,做出一个让用户不能轻易打赢的AI版本即可, 在实现机制上我们提前设计好了随机性的AI贪心算法,并预留出了相关的接口。事实证明这套机制是行之有效的:我们的AI只用了周四一天的时间完成,经过相关测试,周五游戏就发布了。但AI效果非常好,电脑出招很犀利,(有的角色甚至让玩家惊呼"Bug" "Imba"J) 刚刚上手的玩家很难打赢,这无疑能刺激用户接着玩下去^_^
  2. 频繁的健壮性测试。每当有人要Check in一个新版本,我们都规定他自己要进行近乎变态的测试:长时间的乱序键盘输入检测。这一点在发布周执行地更频繁:每当有人Check in一个修改比较大的版本,我们都会组织两个人在电脑上打一打,疯狂的敲击键盘J。事实证明这也是非常有效的:我们大部分的Bug都是这样测试出来的,并且我们保证在发布之前这些Bug都被及时修正。在Test Report中,我们报出的"可以发布"的结果,是切实有效真正对用户负责的。
  3. 发布前整流:在临近发布前两天,我们兵分两路:PM和一个Dev进行发布的所有事项准备,Branch一个发布版本用于制作安装包、测试、撰写说明文档、确定下载站点及统计方式等,其他人员接着做之前的事情。这样保证我们发布时不会手忙脚乱,出现各种意外情况。

                这些措施的实施,使我们提前两天发布了游戏 ,并且到现在没有收到用户反馈的任何健壮性问题,我们保证了我们最一开始交付给用户的,即是一个健壮合格的产品

 

  1. 有效的时间管理。由于我们在确定实现的基本Feature时有过一些改变,所以真正开发起来时间显得很紧张,我们必须保证大家都能充分利用时间,为此我们有以下机制:
    1. 修改了Scrum的流程,如果一个Daily Scrum没有讨论出真正必要的东西,我们为什么又要花那么多时间呢?所以我们规定:每天的Scrum不一定必须大家聚在一块儿,只需由PM调查每个人的进度,并将每个人的进度通知其他人。PM应当对整个项目的进度有很好的了解,当PM认为有必要大家在一块儿商讨时,我们才会专门去会议室讨论清楚问题。在每次Scrum之前,我们都提前确定了本次需要汇报给其他人的进度以及需要讨论好的问题,确保会议时不会因为冷场而耽误整个组的时间。这样我们聚在一块儿的Scrum基本上两天一次。事实证明这是非常有效的沟通合作手段。
    2. 我们会充分考虑每个队员当前的时间安排:毕竟有队员会在某个时间段因为组里面有deadline而时间很紧张,我们会平衡每个人的负担,将他的任务适当转移给其他的队员,大家也都能做到互相体谅互相帮助

总结:尽管降低了难度,但不借助外界引擎开发一个完整的游戏,毕竟还是很有难度的。队员们在四周的开发流程中圆满完成了开发的任务,交付给了用户一个负责任的产品。可以说,我们在项目选择、计划阶段有考虑不周的地方,但在真正的开发过程中,我们的个人努力和团队合作是高质量高效率的

回想这个KOFLive开发流程,我们经历过计划大改的阵痛、成员意见的冲突、通宵工作的劳累,也经历过目标实现的兴奋、初具雏形的喜悦、游戏发布的欣慰,不管最终结果怎么样,这样一个过程让我们真正了解了如何做软件,更重要的是如何与他人合作:说服他人以及被他人说服J 这是让我们感激彼此的重要原因。

最后,上张合影, We're proud of each other!

 2011031422283214.jpg

转载于:https://www.cnblogs.com/MSRA_SE_TEAM/archive/2011/03/14/1984271.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单调队列优化多重背包

就是按照 % 体积的余数来分组&#xff0c;每组单调队列优化。 直接上模板好了。 1 #include <bits/stdc.h>2 3 typedef long long LL;4 const int N 100010;5 6 int n, V, cnt[N], cost[N];7 LL f[2][N], val[N], p[N], top, head;8 9 inline void Max(LL &a, const…

2021年7月 虾皮、货拉拉、有赞等面经总结

大家好&#xff0c;我是若川&#xff0c;加我微信 ruochuan12 进源码交流群。今天分享一篇7月份新鲜出炉的面经&#xff0c;文章较长&#xff0c;可以收藏再看。学习源码系列、面试、年度总结、JS基础系列。本文来自作者几米阳光 投稿 原文链接&#xff1a;https://juejin.cn/p…

谷歌抽屉_Google(最终)会杀死导航抽屉吗?

谷歌抽屉A couple of months ago Google has celebrated with enthusiasm 15 years of Google Maps, one of the most used and appreciated services worldwide from the company.几个月前&#xff0c;Google热情地庆祝Google Maps诞生15周年&#xff0c;这是该公司在全球范围…

MySQL——安装

MySQL——安装 1. 下载源&#xff1a; http://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/mysql80-community-release-el7-2.noarch.rpm 该源目前为8.0版本&#xff0c;如果需要最新请退至根目录找。 1wget http://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_…

axure9控件树 rp_如何在Axure RP 9中创建分段控件

axure9控件树 rpSegmented controls are not very easy to tackle in prototyping. This is especially true when you have more than 2 segments. This article will show you how to create a segmented control with 3 segments in Axure in just 2 simple steps. The tech…

【送书-小姐姐配音】低代码平台的核心价值与优势

大家好&#xff0c;我是若川。记得点上方听小姐姐配音&#xff0c;识别下方二维码加我微信 ruochuan12&#xff0c;明天&#xff08;8月8日&#xff09;晚8点在朋友圈发动态。点赞抽3位小伙伴包邮送《实战低代码》&#xff0c;细则见动态。最近组织了源码共读活动&#xff0c;每…

sketch钢笔工具_设计工具(Sketch,Adobe XD,Figma和InVision Studio)中奇怪的一项功能

sketch钢笔工具When you build a new product that is very similar to the existing products in the market, the designers and product managers tend to do certain features different from others. Sometimes this brings a good change, sometimes worse.当您构建与市场…

Python进阶:如何将字符串常量转化为变量?

2019独角兽企业重金招聘Python工程师标准>>> 前几天&#xff0c;我们Python猫交流学习群 里的 M 同学提了个问题。这个问题挺有意思&#xff0c;经初次讨论&#xff0c;我们认为它无解。 然而&#xff0c;我认为它很有价值&#xff0c;应该继续思考怎么解决&#xf…

尤雨溪开发的 vue-devtools 如何安装,为何打开文件的功能鲜有人知?

1. 前言大家好&#xff0c;我是若川。最近组织了一次源码共读活动。每周读 200 行左右的源码。很多第一次读源码的小伙伴都感觉很有收获&#xff0c;感兴趣可以加我微信 ruochuan12&#xff0c;拉你进群学习。第一周读的是&#xff1a;据说 99% 的人不知道 vue-devtools 还能直…

sketch浮动布局_使用智能布局和调整大小在Sketch中创建更好的可重用符号

sketch浮动布局Sketch is a widely used tool for UI designs. It implemented the Sketch是用于UI设计的广泛使用的工具。 它实施了 atomic design methodology and made the workflow of UI design much more efficient. You can create a Symbol in Sketch and use it ever…

小姐姐笔记:我是如何学习简单源码拓展视野的

大家好&#xff0c;我是若川。这是我上周组织的源码共读纪年小姐姐的笔记&#xff0c;写得很好。所以分享给大家。欢迎加我微信 ruochuan12&#xff0c;进源码共读群。其他更多人的笔记可以阅读原文查看。川哥的源码解读文章&#xff1a;据说 99% 的人不知道 vue-devtools 还能…

保持危机感和紧迫感_什么是紧迫的:您需要知道的一切

保持危机感和紧迫感Putting the finishing touches on a graphic design project calls for a keen eye. But you already know this, because perfectionism is just a part of the job! You look at every nook and cranny of a project before you can consider it complete…

如何系统搭建现代 Web CI/CD

大家好&#xff0c;我是若川。今天分享一篇00后写的CI/CD直播文字稿。之前发过他的故事&#xff1a;一位00后前端2年经验的成长历程。我最近组织了源码共读活动&#xff0c;感兴趣的加我微信 ruochuan12。本次直播录播链接&#xff1a;https://live.juejin.cn/4354/595741[1]开…

sqlserver oracle 数据类型对应关系,SQLSERVER和ORACLE数据类型对应关系详解和对应表格整理...

Oracle SQLServer 比较 SQLServer 常见的 数据 库 类型 字符 数据 类型 CHAR CHAR :都是固定长度字符资料但oracle里面最大度为2kb&#xff0c;SQLServer里面最大长度为8kb 变长字符 数据 类型 VARCHAR2 VARCHAR :racle里面最大长度为4kb&#xff0c;SQLServer里面最大长度为8k…

ui边框设计图_UI设计形状和对象基础知识:填充和边框

ui边框设计图第2部分 (Part 2) Welcome to the second part of the UI Design shapes basics. This time we’ll cover two of the most essential properties of a shape — fills and borders. This is also a part of the free chapters from Designing User Interfaces.欢迎…

如何移除项目中无用的 console.log 代码

大家好&#xff0c;我是若川。早些天时&#xff0c;我看到一个后端公众号发《辞退了一个前端》&#xff0c;当时还想着现在后端公众号都开始吊打前端了嘛。其中有个理由就是线上还一堆console.log...我猜很多人都会移除项目中无用的console.log。可以复习一下。前言说起console…

远程连接 错误 内部错误_关于错误的性质和原因。 了解错误因素

远程连接 错误 内部错误Back in 2012, I was a young[er] product designer working in a small tech agency in Valencia, Spain. In parallel, I worked as a freelancer on several side projects for different clients. One day I was contacted by a new health services…

得到鹅厂最新前端开发手册一份

又逢金九银十&#xff0c;拿到大厂offer一直是程序员朋友的目标&#xff0c;但是去大厂就得拿出实力来。除了需要积累技术&#xff0c;了解并掌握面试的技巧&#xff0c;熟悉大厂面试流程&#xff0c;也必不可少。这里分享一份最新入职腾讯的前端社招面经&#xff0c;来看看鹅厂…

性能测试分析之带宽瓶颈的疑惑

第一部分&#xff0c; 测试执行 先看一图&#xff0c;再看下文 这个当然就是压力过程中带宽的使用率了&#xff0c;我们的带宽是1Gbps的&#xff0c;合计传输速率为128MB/s&#xff0c;也正因为这个就让我越来越疑惑了&#xff0c;不过通过压力过程中的各项数据我又不得不相信。…

figma下载_素描vs Figma困境

figma下载I distinctly remember how much hatred I had in my heart when I lived through my first UI update. The year was 2009; I had just gotten my braces off and I was ready to smash that ‘Like’ button on my high school crush’s status when I logged into …