张志松
记录工作点滴,留下人生轨迹。(zezese@163.com)
posts - 68,  comments - 11,  trackbacks - 0
http://blog.csdn.net/clever101/article/details/7102037
posted @ 2011-12-29 13:24 张志松 阅读(148) | 评论 (0)编辑 收藏
http://www.vckbase.com/document/viewdoc/?id=1446

posted @ 2011-12-28 14:08 张志松 阅读(384) | 评论 (0)编辑 收藏

 

对基础构思的完善和原型化

一款游戏从创意到开发,抽象来看可以分为两大阶段:基础构思的阶段,和迭代开发的阶段。任何游戏在最早的时候都只是一个或者一组零散而不确定的构想,策划人员将这组构想加以整理,抽取其中相互联系的规则组成核心规则集,这就是产品最初的框架。譬如说俄罗斯方块最初的规则可能包括:方块连成一行就消除并加分;头顶随机掉落新的方块;方块可旋转,等。

一般来说,在这个阶段,游戏开发者会寻求利用这组核心规则建立一个简单的DEMO,用来验证游戏本身的可玩性。这个DEMO往往是缺乏美术效果和友好的UI的,但是其遵循的游戏主循环一般来说与后来的商业版本并没有太大的不同。

譬如说如果你在做弹弹堂,你可能会先搞一个只有一种炮弹、一个怪一张地图的演示版,虽然内容简单,但是回合规则与弹道公式是与后来的版本基本上一致的。

对于一个前期的产品构思来说,究竟要花多少时间和精力来做DEMO?又要花费多久来测试这个DEMO?不同的公司和团队,对这个问题的回答往往大相径庭。

在这里就出现了一个很有争议性的问题:缜密的构思加上完善的策划文档,是否能够替代对于DEMO的开发和评估?答案是否定的。

为什么要做原型呢?既然原型的代码基本上不可能被用在商业化的成品里,既然这只是给一小部分人看的演示,跳过去有何不可?

核心原因在于,作为人,我们的能力和经验从本质上说,是有限且不完备的。而游戏又是一种体验性的产品,一款游戏的可玩性,无法通过逻辑和数理的方式来验证,而必须通过一部分人员通过实际的游戏过程,主观的去感受和评判。而这也就是为什么说游戏设计是一门艺术的理由所在。

很多游戏策划人员骨子里对市场和运营是持反感态度的,他们说,游戏是一种艺术,游戏性是我追求的灵魂,这比庸俗的充值要重要。在原型的设计和评估阶段,他们是对的。

对于原型的评判,一般来说,是要看游戏的核心规则是否清晰容易掌握,同时根据用户的操作又能够得到各种不同的选择结果,再就是技术角度的一些基础性验证。譬如说,一个游戏可能规则复杂变幻叵测,但是需要一个月的时间才能上手;又或者一个游戏3分钟即可掌握,但是玩来玩去每一次的流程都差不多。这些,都是需要在原型化过程中去分析和判断的问题。

如果一个原型做下来,大家不觉得这个东西好玩,接下来该怎么办?

很简单,放弃。扔掉一切,重新开始设计。这里有一个很大的误区,一方面把游戏性不佳归结于DEMO的内容量不足,指望着内容量增加之后可玩性变好;另一方面以DEMO早晚会放弃不应当投入太高成本为借口,认为“这么小的DEMO能达到这样的水准,如果……的话,游戏肯定不错”实际上这都是自己给自己挖坑跳的思想和行为。

一款游戏,小到俄罗斯方块泡泡龙,大到魔兽世界天龙八部,本质上都是有自己的核心玩法的,大型产品的核心玩法构成可能更复杂,甚至是由一组相互关联的子玩法相互配合所组成,但是无论大游戏小作品,都是由一个个独立的玩法模块搭建起来的,一个大型的MMO,可能其中很多玩法并不特别出色也能获得成功;但是一个玩法模块很多、但是每一个都不算出色的产品,是不可能仅仅凭借功能比别人多来赢得玩家的。

就是说,成功的游戏不见得每一个玩法都精彩,但是没有至少一个比较精彩的玩法的游戏,一定会失败,无论多久、无论成本多高、无论程序美术策划多努力。实际上这是1和1后面的0的关系,没有1,则再多的0加起来也是0。

我讲过一个简单的理论:游戏的核心玩法是一款游戏的纵轴,而内容的增加是一款游戏的横轴,一个好的纵轴,可以支撑很广阔的横轴,就像弹弹堂或者疯狂的小鸟,基于自己的核心玩法,可以不断设计推出新的地图;而如果纵轴不够强大,横向的扩展越多,产品死亡的速度就会越快。这就像盖房子没有把房梁搭好就往上放砖,建的越快就塌陷越快。

所以,在游戏的初期,对于核心玩法和DEMO的反复修改不断锤炼,是决定了这个产品能走多远的基础和地基,打个比方你能设计出疯狂的小鸟或者植物大战僵尸的核心玩法规则,那接下来要做的无非是找一堆美术和关卡外包干活罢了。这在网页游戏和社交产品领域同样是成立的,就像傲视天地的推图和战斗系统,都应该是在早期就开始勾勒并且贯穿了整个产品开发始终的东西。

 

 

迭代式开发的核心思想与理念
好了,接下来,把艺术的感性收起来,我们要进入迭代式开发的阶段了。
何为迭代?盛大以前有一句很形象的形容,叫做小步快跑。

以下文本来自百度:迭代式开发。在软件开发的早期阶段就想完全、准确的捕获用户的需求几乎是不可能的。实际上,我们经常遇到的问题是需求在整个软件开发工程中经常会改变。迭代式开发允许在每次迭代过程中需求可能有变化,通过不断细化来加深对问题的理解。迭代式开发不仅可以降低项目的风险,而且每个迭代过程以可以执行版本结束,可以鼓舞开发人员。

其实中国还有一句老话,叫做走一步看一步。本质上,迭代式开发承认开发者当前对于用户需求的了解和把握是欠完备的,开发者并不追求对产品需求进行一次性、全局的理解和把握,而是针对每一个产品细节,收集用户行为和反馈,提出可能的解决方案,加以实现并验证是否解决了问题,然后再迈向下一步的一种循环。

可以这么说,迭代式开发的起点,是从一个版本的发布开始:版本发布,通过数据统计和分析,以及直接的用户调查和问询,得到用户行为的直接反馈;基于反馈分析原因并提出可能的解决方案及验证方法,开发完成这一解决方案,观察用户的行为是否有所改善。如果没有得到改善,那就去尝试另一个解决方案,重复这个循环;如果经过证实得以改善,那就继续接下来的开发流程。

一个典型的迭代式开发过程中,有三个关键原则:尽可能短的迭代周期、明确的效果验证方法、低成本的修正方案。

在不对用户和运营产生过大困扰的情况下,迭代周期越短越好。这就要求把一个比较大的版本规划切分成若干个小版本,分别针对某个特定的问题。本质上每一次的迭代循环,相当于开发人员与用户/市场之间的一个对话周期,而对话进行的越频繁,对市场的了解和把握就越深入。一对每年只通话一次的朋友,关系一定比不上每个礼拜都一起吃饭的朋友亲密,而开发者和市场之间关系越疏离,距离成功的道路就越遥远而不可见。

明确的效果验证方法。这是绝大多数产品开发过程中会犯的错,就是有意无意的省略了对效果的验证。发现产品中的一个问题,譬如某个高流失率环节,讨论,提出了某个改善方案,制作完成上线。然后……没了。

实际上我一直在强调,迭代式开发的潜台词就是承认我们对用户和市场的无知。只有经过了验证的方法,才能称为一种“经验”,而这种经验的积累,代表了游戏团队水平和竞争力的提升。仅仅满足于提出或者完成某种改善方案,这本身没有任何特别的意义。因为你压根不知道,这个改善方案到底是对的,还是错的?

我们往往以成本和工期为理由,用自己或者领导的想当然,来替代繁杂但却可靠的运营数据和用户行为分析,并且振振有词说这就是我的水平,其实这只导致了一个结果,就是曾经犯下的错误,必然在未来某个时间点重复再犯一次。工期越长、时间越久,这种差距就越来越大。就像同样是成立5年的公司,zynga真正比我们强悍的地方,其实在于每过一年,他们做一个新产品的时候所需要犯的错误就少一些,而我们5年前犯的错和今天做一个产品犯的错有可能是一样多的。

低成本的解决方案设计。这意味着当我们发现某个环节有待改善时,应当首先评估那些实施成本最低的方案。因为每一次方案的提出和实施都是一次风险投资,在目标明确的前提下,投入越少,性价比越高。低成本的方案往往也意味着更迅速的开发时间和更短的迭代周期。有趣的是,虽然理智上我们很容易支持这一点,但是许多时候这样的要求,和作为开发者本身的人性是相违背的。

作为产品的创造者,我们经常会在发现产品的种种不足之处时,提出一个“全新的、更好的、一揽子的”解决方案,并且认为那就是完美的答案。这可以称之为一种“创新冲动”,但也可以叫做“创新性的陷阱”。实践证明,这种看起来很完美的方案,经常只是因为其细节没有被考虑充分罢了。大多数时候,在现有的方案上稍加调整,就可以解决问题的90%,这时候优先选择的一定是成本更低的解决方式。

有人会问为什么不投入更大的精力,追求产品的完美?这经常是一种很有冲击性的提问方式,就好像我们是在裹着裹脚布走路的小老太太,被五四青年当街质问一般。

其实答案很简单,因为你我这一刻所认为的完美方案,往往一点都不完美。人经常陷入一个思维误区,就是对某个特定方式的非理性推崇和崇拜。进而认为所有不同意这个方式的人都是品味或者能力有问题。然而一两个礼拜之后,就发现其实全然不是如此这般。之前的完美方案之所以看起来如此诱人,只是因为我们只是一厢情愿的看到了其优点,而不愿意面对其不足。

当一个方案真的在各方面都远胜从前的时候,我们自然应当勇往直前将其付诸实施,据我的经验,这种情况一般来说只占十分之一的比例。一段时间的沉淀、替代方案的讨论以及广泛听取周围人的意见,有助于我们去判断哪些东西是真金,哪些东西是空包弹。

一句话:为解决问题而提出、并且经过了事实的验证被证明有用的创新,才是有效性的创新,而一系列有效性的创新的累加,就是一款成功的商业化产品。

所以总体上,当我们面对一堆版本反馈和数据的时候:1、首先要做的,是提取其中对产品的进一步改善有显著标示性的片段;2、针对这些片段,提出关于其原因的假设和潜在的修改方案;3、通过逻辑性和既往经验,去掉部分可能性和可实施性较低的方案;4、然后,针对剩下来的方案,设计对其调整的有效性的验证方法;5、在成本允许的情况下,尽可能尝试所有的方案,寻找效果最好的一种,固定下来。

相对于拍脑袋,这是个辛苦得多的过程。而这个辛苦的过程所带来的,就是我们和真正一流的研发公司之间的巨大鸿沟。

另外一个很现实的问题是,当一款产品还没有推出到市场上的时候,应当如何实现有效的需求迭代?目前来看,有几个方法可以参考:首先,尽量压短前期开发时长,让产品可以更早的面向至少一部分的用户群;其次,在有限范围内寻找参与者,典型的譬如公司内的自发性组织和测试,也包括受控制的小范围封闭测试(这几乎是最常见的做法之一);最后,记住一件事:对于开发团队来说,真正的开发周期是从产品上线那天开始算起。这可说是一种超越了具体方法本身的价值观。
我认为,丰富的原始创意/敏锐的市场嗅觉、对既往成功产品(包括市场上的流行产品)成功做法的分析和总结/模板化、迭代化的开发思想/强大而迅速的执行能力,这若干项的合理组合,就是一家成功的游戏开发公司内在的基因所在。诚然,对今天的我们,这些要求很遥远也很难达到,但,这起码告诉了我们未来的方向。

 
一些哲学层面的提升

如果我们仔细研究人类的思维方式,你会发现,任何创新的点子在被酝酿出的一瞬间,都是基于一个特定的市场假设模型的。这个模型存在于我们的脑海里,且相互之间不可复制。譬如说我脑子里可能出现一个点子:加了芥末的酸辣黄瓜会大卖。这里的大卖,就是我基于我脑子里对顾客的理解和认知,模拟出来的一个餐饮市场的模型,我把自己的主意放到这个模型里,然后发现计算结果是“十分乐观”,接下来该怎么做?马上改行当厨子去?

且慢。首先我必须问自己一个问题,我了解餐饮业么?作为一个从来不做饭的人,我是否可以仅仅凭借自己脑子里的臆测,就认定一种产品会成功与否呢?

如果你仔细阅读了之前的文字,这里你就会明白,实际上我头脑中的市场模型并不完备。顺带你也可以懂得,其实没有任何人脑子里的模型,是与市场完全等价的。本质上,我们对于现实世界的了解,永远是局部、片面并且带有主观倾向的,这是一种常态。当然,经常去了解和分析市场的人,其模型的偏差程度,会比我这种外行要小,所以他们的判断相对更可靠一些;而我们基于对市场的不完备理解,所设计出来的解决方案,本质上也必然是有欠完美的。这是一种非常哲学化的思辨,但在产品开发过程里,这几乎可以当成警句来使用。

我们对用户的需求不够了解 >> 我们设计出来的方案充满缺陷 >> 缺陷的方案提交给不够了解的用户,必然会产生意料不到的偏差
这几乎是一种宿命的悲观论调。如果我们推演下去,不完备的方案进而会影响和改变用户原有的需求,那这基本上是乔治索罗斯著名的“反身性原理”的游戏开发版。

可是另一方面来说,正因为缺乏完美的解决方案,才导致了市场上各种游戏设计思路都有其机会,没有完美答案所以每个人都可以提出自己的方案,然后在市场中竞争并测试其有效性。生产钢材的完美方案只有一种或者几种,所以新的创业者基本上无法去开个炼钢厂。做出好游戏的思路千变万化,所以我们每个人就都有了自己的机会。


来自:http://www.z-index.cc/2011/10/13/238/

posted @ 2011-12-05 10:12 张志松 阅读(238) | 评论 (0)编辑 收藏
一、RtlSetProcessIsCritical

VB代码如下:

Option Explicit

Public Declare Function RtlAdjustPrivilege Lib "ntdll.dll" (ByVal Privilege As Long, ByVal Enable As Boolean, ByVal Client As Boolean, WasEnabled As Long) As Long
Public Declare Function RtlSetProcessIsCritical Lib "ntdll" (Optional ByVal NewValue As Boolean, Optional ByVal Value As Boolean, Optional ByVal WinLogon As Boolean = True)

Sub Main()
    RtlAdjustPrivilege 20, True, False, 0
    RtlSetProcessIsCritical False, False, True
    End
End Sub


VC代码参见:

http://www.codeproject.com/KB/winsdk/RtlSetProcessIsCritical.aspx

二、NtRaiseHardError

VB代码如下:

Option Explicit

Public Declare Function NtRaiseHardError Lib "ntdll.dll" (ByVal ErrorStatus As Long, ByVal NumberOfParameters As Long, ByVal UnicodeStringParameterMask As Long, ByRef Parameters As Any, ByVal ValidResponseOptions As Long, ByRef Response As Long) As Long
Public Declare Function RtlAdjustPrivilege Lib "ntdll.dll" (ByVal Privilege As Long, ByVal Enable As Boolean, ByVal Client As Boolean, WasEnabled As Long) As Long
Public Declare Sub RtlInitUnicodeString Lib "ntdll.dll" (DestinationString As UNICODE_STRING, ByVal SourceString As Long)
Public Type UNICODE_STRING
    Length                As Long
    MaximumLength         As Long
    Buffer                As Long
End Type

Sub Main()
    Dim u As UNICODE_STRING, p(3) As Long
    RtlAdjustPrivilege 19, True, False, 0
    RtlInitUnicodeString u, StrPtr("Session Manager")
    p(0) = VarPtr(u)
    p(1) = u.Length
    p(2) = VarPtr(u)
    p(3) = VarPtr(u)
    NtRaiseHardError &HC000021A, 4, 1, p(0), 6, 0
   
End Sub

VC代码参见:

http://blog.csdn.net/tyk5555/article/details/6523985

posted @ 2011-11-14 18:04 张志松 阅读(916) | 评论 (0)编辑 收藏
1.开发一个导出ServiceMain函数的DLL (假设名为MyService.dll)

函数原型为void WINAPI ServiceMain(int argc, wchar_t* argv[]),其他的就和开发普通的EXE服务一样。

2.在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下面建一个项 MyService,详细的子项如下图。



Parameters 下面有个可扩展字符串值(REG_EXPAND_SZ) ServiceDll,其值就是MyService.dll的完整路径。

3.在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost下面新建一个多行字符串值(REG_MULTI_SZ),
名为mysvcs,值为MyService。

为什么名为mysvcs呢?看下上图ImagePath最后面的那个参数就明白了,不一定要叫这个名字,只要这两个一样就行了。

在SvcHost下面的每一个多行字符串值,就代表一个SvcHost进程。

4.重启电脑生效。

posted @ 2011-11-07 22:04 张志松 阅读(3364) | 评论 (0)编辑 收藏
将需求的详细分析推迟到实现前夕来完成,这是敏捷需求分析的精华所在。
posted @ 2011-10-11 13:34 张志松 阅读(324) | 评论 (0)编辑 收藏

 IOleClientSite *pSite = NULL;
 GetClientSite(&pSite);

 if (pSite == NULL)
 {
  return;
 }

 CComPtr<IOleContainer> spContainer;
 pSite->GetContainer(&spContainer);

 if (spContainer == NULL)
 {
  return;
 }

 CComQIPtr<IHTMLDocument2> spDoc = spContainer;

 if (spDoc == NULL)
 {
  return;
 }

 CComPtr<IHTMLWindow2> spWin;
 spDoc->get_parentWindow(&spWin);

 if (spWin == NULL)
 {
  return;
 }

 _variant_t vRet;

 _bstr_t strJScript(L"JScript");

 CString strCode;

 strCode.Format(_T("OnMsg(%d,%s);"), wParam, lParam);

 _bstr_t bstrCode(strCode.GetString());

 HRESULT hr= spWin->execScript(bstrCode, strJScript, vRet.GetAddress());

posted @ 2011-09-27 14:26 张志松 阅读(351) | 评论 (0)编辑 收藏

         活动中分为四个小组,我们小组取名为“贱”队,队标为航空母舰,口号为蓝海舰队,“贱”者无敌。

在中国古代,贱,指的是地位卑下,出身不好的意思。比如贱民,出身低贱等。在旧时,普通的老百姓都被称为贱民,但是正是这些所谓的“贱民”创造了社会、创造了历史,因为人民群众才是历史的创造者。我们的团队成员大多都出身不算很好,很多还是贫苦农民出身。在古代就是所谓的“贱民”,就算在现在这个社会中,我们在政府的眼中顶多也算是个外来务工者,连个小市民都算不上,也即是说连旧时的贱民都算不上。虽然命贱,但是我们的命运掌握在自己的手中,完全可以通过自己不懈的努力来改变自己的前途和命运。

贱的另外一个意思是指不要脸。中国人是很要面子的,在很多时候把面子看多很重很重。面子真的那么重要吗?面子到底值几个钱呢?在我看来,面子一钱不值。所谓面子,都是指别人对自己的看法。在乎面子,也就是在乎别人对你的看法,也就是为别人活着。为别人活着的人,能活出自己吗?能活得精彩吗?能活得幸福吗?

舍得

         在过去的生命中,我们经历过太多的事情,细细想来,其实有很多事情是没有太多意义的,浪费了很多时间和精力;也有很多外在的东西也是根本不需要的,浪费了很多金钱和空间。人生短短几十年,我们应该把时间和精力花在少数有意义的事情上面。该放弃东西就放弃东西,因为只有放弃,我们才有时间和精力去完成更有意义的事情,才能走得更高更远。放弃是为了更好地收获成功。

做企业也是一样,我们不可能把蓝海中的所有东西都收归囊中,必定要有所选择,有所放弃。任何企业的资源都是有限,都应该舍弃一些,集中所有力量往一处使,如果什么都想干,最终是什么都干不成的。

有舍有得,不舍不得,大舍大得,小舍小得,舍得是一种人生智慧和态度。舍得最难是如何把握这个度,若真正把握了舍与得的机理和尺度,便等于把握了人生的钥匙和成功的机遇。


坚持

         在周末的活动中,有个拔河比赛,我之前没想到拔河时那么辛苦的项目。在拔河的一开始,大家都使劲全力在比拼,慢慢的体力透支,都有产生放弃的念头,所以就看谁能坚持到最后了,坚持下来的就是胜利者。我们团队在两次拔河比赛中都坚持下来,最终获得冠军,可见坚持才是王道。

         是啊,在我们的人生中,不管是工作还是生活,谁都会遇到这样那样的困难,就看我们自己能不能坚持下来。不要抱怨社会不公,不要抱怨命运不好,不要抱怨人家不给你机会。一切的一切,都靠自己去争取,去坚持,不要轻言放弃。只要成功一次,你就会越来越自信,越来越敢于挑战,也就越来越接近成功。

posted @ 2011-09-18 18:12 张志松 阅读(242) | 评论 (0)编辑 收藏
不要一味的追求体验:

一是,让产品设计师更多的向产品靠拢,增加默契感,形成产品归属感,在做事情的时候便可以有效的规避不信任的细节争吵。

二是,改变不合理的“产品负责制和确认层级”机制,产品负责的归产品。这样才能在通篇考虑“市场、定位、时机、成本”的时候,做到相互信任和理解。只有让产品横空出世,整个产品组才能真正有所收获,而不只是通过一个设计作品来增强自己的满足感。实实在在的成功最重要。

面对需求,保持理性:
至于产品人,只能多犯错多磨练,让自己靠谱多一些。总之,在产品创意时不失感性,但在面对需求时应该保持理性。幸运的话,进入一个整体靠谱、左右权衡的经验团队,会让自己的成长方向更正确。
posted @ 2011-09-09 16:28 张志松 阅读(210) | 评论 (0)编辑 收藏
必要的系统架构和设计从来都是非常重要的。只是这里的分析设计有别于传统的开发模式,应该应用敏捷的思想,简单设计,持续重构,尽快反馈等。
posted @ 2011-09-08 10:27 张志松 阅读(179) | 评论 (0)编辑 收藏
仅列出标题
共7页: 1 2 3 4 5 6 7 

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

转载

搜索

  •  

最新评论

阅读排行榜

评论排行榜