2016年10月18日

脱单5个月

军团远征已开。
已经在Kabam上班3个月。
国庆长假已经过去。

还是感觉很幸福。

2016年5月18日

2016.5.17,脱单

ღ(๑╯◡╰๑ღ)

2016年4月28日

更新后的工作经历

2007.9.12 - 2012.4.27 Gameloft 智乐软件
2012.8.20 - 2012.9.6 Beyond Soft 博彦科技
2012.10.8 - 2013.4.24 Dreamingame 追梦创新
2013.6.26 - 2013.12.12 Renren Games 人人游戏
2013.12.16 - 2016.4.27 Glu mobile 格融科技

2016年4月23日

不知不觉,魔兽世界的第七个资料片也快来了

所以,又到了写副本杂谈的时候了么……

2015年12月17日

工作生涯中遇到的第五次裁员

似乎入了游戏这行,时不时就得遇上裁员。我在Glu第一份合同到期续签的时候,就正好赶上了。昨天早上公司9点多开了个全体会,很简单很直白的告诉大家,因为不景气,裁员了。

不过这也算早有前兆。半年多前腾讯入股Glu时,股价一度到过5刀多,而前段时间最低是2.8左右,几乎少了50%。股价基本是美国公司经营情况的晴雨表,结合行业的大行情,再加上工作室永恒战士4收入也不甚理想,裁员其实也不是那么意外。

游戏行业就是这样,永远不知道下一刻是什么情况。永恒战士4刚立项到做完,国内iOS已经变得面目全非,从以前的混战变成了网易腾讯联手占据前十。偏偏永恒战士4是个重度ARPG游戏,而且还是特意改成了面向中国市场的设计,玩法上却并没有很新颖突出的地方,结果也就是维持着一个能稍稍收回来成本的情况。所以从上线一直到今天,始终也没能改出出彩的玩法,于是今天就各自挥手再见了。

不过还好的是大家都看惯聚散离别,纷纷收拾东西的时候,留恋伤感却并没有什么难过和不舍。而且补偿也很丰厚,连带着年终的部分都给了,至少安心过年是不成问题了。

啊,忘了说,这次我也没有被裁。公司留下了一个小团队,计划把目前的项目做背水一战。所以,再过几个月,就能看看是不是要遇到人生中经历的第六次裁员了。

2015年7月13日

又踩了Python的一个小坑

今天因为不熟悉Python的(x for x in y if x is xxx)句式,把if条件写在前面,白白花了两个小时调试……好悲伤!

第一版里面写了个判断句式 if any(x is xxx for x in y),然后居然没报错,更神奇的是还通过了单元测试……于是在错误的道路上越走越远,第二个单元测试用例通不过的时候,怎么都没有怀疑到句式,以为是编码错误、句式不对或者导入有问题。最后重写了判断才一切正常。

好吧,新手多踩踩坑就好了,以后就没事了!

2015年6月25日

继续刷题,Merge two sorted lists这题,Python暴力排序和判断排序居然是一样的时间……

https://leetcode.com/problems/merge-two-sorted-lists/

先试了试判断排序:

def mergeTwoLists(self, l1, l2):
l = []

while l1 and l2:
if l1.val <= l2.val:
l.append(l1.val)
l1 = l1.next
else:
l.append(l2.val)
l2 = l2.next

while l1:
l.append(l1.val)
l1 = l1.next

while l2:
l.append(l2.val)
l2 = l2.next

return l

然后72ms

然后无聊想看看暴力读取然后排序:

def mergeTwoLists(self, l1, l2):
l = []

while l1:
l.append(l1.val)
l1 = l1.next

while l2:
l.append(l2.val)
l2 = l2.next

l.sort()

return l

居然还是72ms……

2015年6月17日

开始刷Leetcode,然后第一题就TLE了……

今天开始刷leetcode,第一题:Word Break

判断给定的一个字符串能否被拆成字典里的词。

一开始不知道怎么想的,试图用二分加递归做,然后就LTE了……然后发现自己实在是蛋疼,长字符串拆去单词后的部分根本没必要和词典做对比,完全是受了例子的误导。

然后接下来就容易多了,代码是这样的:


class Solution:
    # @param s, a string
    # @param wordDict, a set
    # @return a boolean
    def wordBreak(self, s, wordDict):
        if not s or not wordDict:
            return False
       
        flags = [False for i in range(len(s) + 1)]
        flags[0] = True
       
        for s_len in range(1, len(s) + 1):
            for i in range(s_len):
                if flags[i] and s[i:s_len] in wordDict:
                    flags[s_len] = True
       
        return flags[len(s)]


当然,漏了flags[0] = True这句导致失败好几次我是不会随便乱说的……

2015年6月16日

用Python穷举魔兽世界队伍的构成(续)

终于,今天改了改,写出了一个能计算10人团队的代码,但是,一但超过15人,立扑……数量级还是增长得太快。

妈蛋代码格式太烂,删了……

2015年6月1日

用Python穷举魔兽世界队伍的构成

居然是2015第一篇……

起因是知乎游戏群里,有人出了道题,魔兽世界当前版本里,1坦1治疗3输出,能有多少种组合?前置条件是,只看职业组合,不分具体天赋。例如1德鲁依1武僧3法师,无论是德鲁依还是武僧做坦,都算作一种组合。

然后大家陷入了各种排列组合的陷阱中……各种答案都有,并且看上去都没错。于是最后我决定用代码暴力验算。最后几个人的验算结果一致得出结论,排列是2450种。

代码如下:

import itertools

WOW_classes = { "war": "Warrior",
    "dk": "Dark Knight",
    "pal": "Paladin",
    "ht": "Hunter",
    "sm": "Shaman",
    "dru": "Druid",
    "rog": "Rogue",
    "monk": "Monk",
    "mage": "Mage",
    "wl": "Warlock",
    "pri": "Priest"
    }

all_DPS = [WOW_classes[dps] for dps in WOW_classes]
T = ["war", "dk", "dru", "pal", "monk"]
all_T = [WOW_classes[t] for t in T]
H = ["pal", "sm", "dru", "monk", "pri"]
all_H = [WOW_classes[h] for h in H]

team_queue = [all_T] * 1 + [all_H] * 1 + [all_DPS] * 3

print("Generating possible teams...")
possible_team = list(itertools.product(*team_queue))
print("Generating possible teams are generated.")

all_team = []
print("Start sorting and removing duplicate team...")
for team in possible_team:
 if sorted(team) not in all_team:
  all_team.append(sorted(team))
print("Sorting and removing are done.")


print("Begin to write to file...")
file = open("team.txt", "w+")
for team in all_team:
 file.write(str(team) + '\n')
file.write(("\nTotal combination is %d!" % len(all_team)))
file.close()
print("Writing finished.")


然后,我们决定玩个更刺激的,算算25人团队副本里,2T6H17DPS的组合会有多少种。
我改完上面代码里的变量,开始运行后几秒,就华丽丽的黑屏了。内存用尽而亡……

代码尚未成功,仍需努力……

2014年12月31日

2014年终总结之随笔乱写

终于有机会乱写一气2014的年终总结了……

体重从历史最高的68公斤降到了63公斤,从每次做3组,1组15个俯卧撑变成了6组20个俯卧撑。

Python学得马马虎虎,距离自己搭个网站还有不少距离,倒是单元测试用例写得炉火纯青。

应该是进了目前为止自己最满意的公司了,收入也很满意目前到手的数似乎差不多和合同税前的数一样了。

股市大概有了6k的收益,但还没到手的算不上收益吧。

多了一只认识不久的喵星人和一个认识了一年多的师妹。

在美国亚马逊破戒后一发不可收拾,任性了好多次。

其他的,想到再慢慢写吧。

2014年12月23日

在Glu第一年的加班和休假记录



加了238.5小时班,休假208小时。

2014年11月25日

知乎上的回答:从游戏从业者的角度来说,魔兽世界作为 MMORPG 有何独到之处?

继续在知乎答题,原地址:

借用恋爱半年,女朋友觉得没有了开始时的新鲜感,怎么办? - 张桃紫的回答,魔兽世界的独到之处,在于能在同样的世界里体会未知的感觉,而其他游戏,只能在未知的世界里体会同样的感觉。

——————————————————大家都知道这是什么————————————————

WOW已经十年了。但几天前,我这个老玩家,熟练的输入账号和密码登入游戏,却没有什么陌生的感觉。除了重新把技能拖出来,其他时候都恍惚如十年前。但是仔细想想这十年来魔兽的变化,几乎已经对游戏的大部分做了很多修改,有些核心的功能,如天赋已经大修改了不止一次。这也许就是我在开头所说的,暴雪把变化和不变结合得很好,这是就是其独到之处。

暴雪的这个独到之处从属性值的变化上可以窥其一斑。最初的技能按武器伤害单次伤害的计算机制、百分比制的命中、暴击和闪避等次要属性、分别计算的法术强度和治疗效果、智力增加魔法上限的机制等等已经成为历史,武器熟练、破甲、法术穿透、精准、格挡、5秒回魔和物品属性上附加的攻击强度和法术强度等也随着版本更迭也一一退役。在现在最新的6.0版本里,力量、敏捷、耐力、智力、精神5个主属性还保留着,而命中、暴击、闪避、招架变成了几乎固定的值,此外还增加了护甲加成、溅射、全能这些新属性。另外,历经各个版本而通胀的属性数值也缩减到了一个相对正常的水准。属性的变化始终会给玩家学习和探索的新鲜感,而始终不变的五种主属性又可以给玩家最简明不变的判断标准,变化中的不变就是如此。

再例如天赋和专精系统,可以看魔兽世界档案馆:天赋专精系统的进化与演变,设计是怎么样从最原始的天赋树系统,逐渐强化衍生出更多内容,然后经历不断变化,最后又简化成为和原来几乎完全不同的“三选一”系统。其中一些被时间证明优秀的技能,被保留下来,例如第一个版本就存在的挑战怒吼,想必老玩家从天赋里将这个技能拖进技能栏里时,会体会到沧桑的历史气息吧(笑)。这些变化和不变构成的就是如今的天赋和专精系统。

魔兽世界的地图设计也是一样。大灾变资料片重构了整个艾泽拉斯大陆,但也保留了同样多的值得记忆的地方。改变和不变的典型的就是奥格瑞玛和暴风城两个中心,暴风城基本保留了原来的样子,而奥格瑞玛改变得几乎看不出原来的模样。大灾变里,如果你是老玩家,你可能会感叹贫瘠之地终于多了好几个飞行点,或者悲伤沼泽不再是需要从守望堡骑马跑过去的地方了;也会在遇到阿鲁高之子时感叹往昔的路霸只剩下这么一个了,或是故地重游痛扁霍格的时候觉得终于报了以前无数次拖尸体的仇。影牙城堡、死亡矿井、血色教堂、斯坦索姆、通灵学院等等这一系列被重改编的副本也是一样的感觉,相识却又陌生。这种交错的复杂的感觉或者在其他游戏里偶尔能遇到并怀念很久,但在魔兽世界里变成常态时,就不得不感叹确实是独到之处了。

所以就是这样,十年前,第一眼看见魔兽世界,只有惊艳。虽然她青涩,不解风情,但你就是喜欢。时间流逝,她慢慢成长,学会梳妆打扮,越发待人得体。你们时不时会小聚,她总在变化,隔一段时间会尝试新的发型、妆容或是衣服,展示给你看她从别人那学到的新技法,却又总留着几分上次的模样,也总记得上一次一起的愉快时光。而今她的生日到了,邀请你参加她的聚会,难道你不期待这次的相遇么?

2014年11月19日

魔兽世界,十年


闲着翻了翻水木的WOW版旧帖子,然后发现已经10年过去了。


现在,登录界面又变成了和十年前很像的样子。

再过20分钟就是WOD资料片的开启,好怀念,好想哭。

2014年8月22日

32,奖金,喵星人,扭伤的腰

大约差不多一个月前,32了,对于一个搞IT的人来说,这是个整数。

然后今天,第一次拿到了正式的奖金,15.3k,不是整个项目每人分点那种,而是正式的邮件通知你,公司上半年收入了多少多少,而按这个比例,你拿到的奖金是xxx,xx.xx

喵星人来这边一个多月了,感觉胖了好多。性情脾气确实是好,洗澡也不挠人,相处下来愈发喜欢。

某天早上打喷嚏扭伤了腰,持续到现在依然没有痊愈的样子。不过比一开始站和走都成问题,好了许多。伤筋动骨100天,看来我算伤了筋,即使不用3个月,60天也少不了吧。