简明现代魔法

  • 首页

  • 标签

  • 归档

  • 搜索

《流浪地球》观后感

发表于 2019-02-10 |

《流浪地球》观后感

本来打算年初一就去看《流浪地球》的,可惜被迫和孩子们去看了《小猪佩奇过大年》,整个影院都是大人带着小朋友们在看,乱糟糟的一片,孩子们大呼小叫的,有些难受。
至于质量嘛……坑小孩子的钱也不能一点也不走心啊,整部电影小孩子喜欢看的佩奇动画部分很少,大部分时间都是真人演员们在尬演,大人不喜欢看,小孩子也没多少兴趣。除此之外,电影原创部分也是少的可怜,除了最后一部分佩奇过年的动画之外其他全都是直接把TV中的内容拿来用的。对这部坑爹电影我要打个1分👎,还是小孩子的钱太好赚了。
初二的票比较紧张,于是直接定了初三上午的票,不过想不到人依旧挺多的,可见《流浪地球》在初三是真的火了,不在是中国科幻爱好者们在小圈子里的自嗨,而是彻底火出圈子了,就连这几天在用Kindle的时候,首页下面的也是《流浪地球》小说的推荐。目前猫眼上的票房预测已经超过了五十亿,甚至有希望超过《战狼二》的票房,夺取华语票房第一。
在影片出来之前对这部电影也没什么关注,一个原因是平时看电影就比较少,另一个原因则是对于国产电影并不抱多大的期望,这几年去电影院看的也大多是好莱坞的传统“大片”,就算是剧情稀烂,好歹也能看个特效回本,即便如此,国产电影中的一些烂片的鼎鼎大名也“如雷贯耳”,最让我有印象的应该是去年暑期档的《爱情公寓大电影》。
毫无演技的流量小鲜肉充斥在荧幕,资本参与下的水军们真真假假,病毒式的宣发,国产电影可谓是群魔乱舞,除了饭圈的小迷妹们,不喜欢吃屎的正常人自然会远离这个臭粪坑,好歹也去看点正常的电影作为消遣。
当然,游族买下《三体》版权后的折戟沉沙,让人失望的同时也生下警惕之心——都说“开启国产科幻电影元年”,可究竟哪一部才能够真正开启?
好在,在诸多质疑之下,《流浪地球》依旧用自己的品质打破了观众们的担忧,顺利完成了“开启国产科幻电影元年”的艰巨任务。除此之外,我们本来期望的是从零分到四十分的巨大突破,然后再从四十分提高到六十分七十分八十分,先实现“从无到有”的巨大突破,再实现“从有到好”的进步,谁知《流浪地球》直接从零分突破到了七十五分,带了了一个开门红。
先谈一谈《流浪地球》电影本身的质量(下文涉嫌剧透)。
《流浪地球》电影改编自刘慈欣发表在科幻世界2000年7月刊的同名短篇科幻小说,距今已有近20年的历史。全文大概有两万字,不算长,大概15~20分钟就能读完。
亚伯拉罕废物

并没有直接将原作搬到大荧幕,staff基于原作的进行了大量的改编,原作中地球在木星附近并没有发生意外,在科学家们的周密计算下,由行星发动机推进的地球顺利借助木星的引力加速逃离太阳系。电影中则是将这一情节大量改写,做出了“假如计算并不成功”的假设,在这个假设基础上续写故事。可以说,这部电影讲的就是原作中短短两页中发生的故事。

离开近日点后两个月,就能用肉眼看到木星了,它开始只是一个模糊的光点,但很快显出圆盘的形状,又过了一个月,木星在地球上空已有满月大小了,呈暗红色,能隐约看到上面的条纹。这时,15年来一直垂直的地球发动机光柱中有一些开始摆动,地球在做会合前最后的姿态调整。木星渐渐沉到了地平线下,以后的三个多月,木星一直处在地球的另一面,我们看不到它,但知道两颗行星正在交会之中。
有一天我们突然被告知东半球也能看到木星了,于是人们纷纷从地下城中来到地面。当我走出城市的密封门来到地面时,发现开了15年的地球发动机已经全部关闭了,我再次看到了星空,这表明同木星最后的交会正在进行。人们都在紧张地盯着西方的地平线,地平线上出现了一片暗红色的光,那光区渐渐扩大,伸延到整个地平线的宽度。我现在发现那暗红色的区域上方同漆黑的星空有一道整齐的边界,那边界呈弧形,那巨大的弧形从地平线的一端跨到了另一端,在缓缓升起,巨弧下的天空都变成了暗红色,仿佛一块同星空一样大小的暗红色幕布在把地球同整个宇宙隔开。当我回过神来时,不由倒吸一口冷气,那暗红色的幕布就是木星!我早就知道木星的体积是地球的1300倍,现在才真正感觉到它的巨大。这宇宙巨怪在整个地平线上升起时产生的那种恐惧和压抑感是难以用语言描述的,一名记者后来写道:“不知是我身处噩梦中,还是这整个宇宙都是一个造物主巨大而变态的头脑中的噩梦!”木星恐怖地上升着,渐渐占据了半个天空。这时,我们可以清楚地看到它云层中的风暴,那风暴把云层搅动成让人迷茫的混乱线条,我知道那厚厚的云层下是沸腾的液氢和液氦的大洋。著名的大红斑出现了,这个在木星表面维持了几十万年的大旋涡大得可以吞下整整三个地球。这时木星已占满了整个天空,地球仿佛是浮在木星沸腾的暗红色云海上的一只气球!而木星的大红斑就处在天空正中,如一只红色的巨眼盯着我们的世界,大地笼罩在它那阴森的红光中……这时,谁都无法相信小小的地球能逃出这巨大怪物的引力场,从地面上看,地球甚至连成为木星的卫星都不可能,我们就要掉进那无边云海覆盖着的地狱中去了!但领航工程师们的计算是精确的,暗红色的迷乱的天空在缓缓移动着,不知过了多长时间,西方的天边露出了黑色的一角,那黑色迅速扩大,其中有星星在闪烁,地球正在冲出木星的引力魔掌。这时警报尖叫起来,木星产生的引力潮汐正在向内陆推进,后来得知,这次大潮百多米高的巨浪再次横扫了整个大陆。在跑进地下城的密封门时,我最后看了一眼仍占据半个天空的木星,发现木星的云海中有一道明显的划痕,后来知道,那是地球引力作用在木星表面的痕迹,我们的星球也在木星表面拉起了如山的液氢和液氦的巨浪。这时,木星巨大的引力正在把地球加速甩向外太空。
离开木星时,地球已达到了逃逸速度,它不再需要返回潜藏着死亡的太阳,向广漠的外太空飞去,漫长的流浪时代开始了。

按照原作的时间划分的话,电影发生的故事为“逃逸时代”,因此如果有续集的话就能够接着制作“刹车时代”的前传以及“叛乱”的续作。从导演的访谈来看,拍续作几乎是板上钉钉的事情了,希望续作能够再接再厉。
《流浪地球》固然实现了国产科幻电影的大突破,但自然它本身也不是完美无缺的作品,从我的角度来看,《流浪地球》在剪辑和叙事、人物台词方面还有诸多的缺憾。
剪辑必须要为电影的一些缺憾所负责,据我所知,流浪地球是有着165分钟、145分钟以及125分钟(也就是我们看到的版本)着三个版本,为了对春节档期和票房等因素做出妥协,165分钟的导演剪辑版势必需要删改大量的内容,而这个删减工作从成片质量上来看并没有做到尽善尽美。
首先是造成了人物动机的突兀和叙事节奏的断层。导演剪辑版中韩朵朵到地面上是为了找到父母的遗体,上映版本中则变成了“想出去玩玩”,连口型都对不是;导演剪辑版中周倩之所以用枪打坏火石是因为在上一个镜头周倩看到了因为救援任务保护火石而冻僵的俄罗斯救援队,上映版本中因为剪了这一幕造成了角色动机的不明,说实话我在观看电影这一段情节的时候也感觉有些不对劲。此外还有一些因为剪辑造成的问题,如例如大幅削减韩朵朵和王磊之间的互动与交流、削减韩子昂的回忆等等就不细说了。
其次是造成了画面的混乱,这一点尤其是在第三幕中出现。只看过一遍电影,这方面有些细节记不清楚了,但我仍然能想起当时观看电影结尾部分时候的懵逼:什么鬼,王磊怎么一下子就出现在电梯里了,而且还马上领便当了?
剪辑造成的混乱不一而足。这是十分遗憾的,属于“本能够做的更好却没有做到的地方”,对原片的质量造成了相当大的伤害如今木已成舟,只希望staff在拍摄续作的时候吸取教训做的更好。
最后则是电影中关于“叛乱”这一条为续作而铺设的暗线也因此几乎荡然无存,只留下了草蛇灰线供观众们猜测,整体电影的架构也因此不完整。(这方面也有可能是遇到了审查方面的问题)
如果说剪辑的混乱是因为种种限制所引起,部分生硬的台词和叙事则是编剧和导演水平限制所致,这方面相信看过电影的都能够察觉到这一点。

“你听着亲爱的,我们必须抱有希望,这并不是因为希望真的存在,而是因为我们要做高贵的人。在前太阳时代,做一个高贵的人必须拥有金钱、权力或才能,而在今天只要拥有希望,希望是这个时代的黄金和宝石,不管活多长,我们都要拥有它!明天把这话告诉孩子。”

我很喜欢原作中的这一句话,不过当女主角在最后大声在广播中说出这句话的时候依然让我因为煽情过度而产生些许不适。总体而言,《流浪地球》电影的台词和细节还是需要仔细打磨的。
除了原创“因为计算的失误,地球即将因为木星毁灭”这一主要情节之外,事实上电影中的父子情也是电影和小说的不同之处。在小说之中“我”对于家人和妻子的感情并没有太多,冷漠到近乎冷酷。此外,“我”的父亲即使有了外遇,母亲也没有不满的反应,甚至到了最后“我”和妻子加代子因为政见不同而相行陌路——在原作中,家庭之间的亲情几乎消失不见,更何况是电影中着重突出的“父与子”。而作者刘慈欣也在小说之中给出了解释:

在这个时代,人们在看四个世纪以前的电影和小说时都莫名其妙,他们不明白,前太阳时代的人怎么会在不关生死的事情上倾注那么多的感情。当看到男女主人公为爱情而痛苦或哭泣时,他们的惊奇是难以言表的。在这个时代,死亡的威胁和逃生的欲望压倒了一切,除了当前太阳的状态和地球的位置,没有什么能真正引起他们的注意并打动他们了。这种注意力高度集中的关注,渐渐从本质上改变了人类的心理状态和精神生活,对于爱情这类东西,他们只是用余光瞥一下而已,就像赌徒在盯着轮盘的间隙抓住几秒钟喝口水一样。

我想这才是末世之中真正的残酷,对于生存的渴望远远超过了其他事情,以致于人与人之间的维系消失殆尽。
当然,我还是相当喜欢导演郭帆加入了对于亲情和家庭这条故事主线,原作固然写出了末世之中的残酷,但也因此缺少人与人之间感情的描绘——虽然电工一向是这个样子的ww。
对于参加新春档竞争的一部电影,加重对于亲情的描写和“回家”这一主题的呼应以引起观众的共鸣也是必不可少的。
除此之外,电影中一些“梗”也让人会心一笑,熟悉刘慈欣小说的观众将会看到大量在大刘的小说中出现的元素。影片当中的人工智能MOSS毫无疑问借鉴了科幻电影史中的神片《2001太空漫游》之中的AI “HAL 9000”,也很象是在《传送门》系列中出现的GLaDOS,在科幻作品中将这种AI作为反派应该是老梗了吧。
MOSS

结尾点燃木星的操作是在大刘的小说《全频带阻塞干扰》中已经出现过的,只不过是换成了“万年炎帝号”撞击太阳:

“万年炎帝”号的十台核聚变发动机全部打开,每台发动机的喷口都喷出了长达上百公里的等离子体射流,它在做最后在轨道和姿态修正。
在“万年炎帝”号的正前方,有一道巨大的美丽的日珥,那是从太阳表面盘旋而上的灼热的氢气气流,它象一条长长的轻纱,飘浮在太阳火的海洋上空,梦纪般地变幻着形状和姿态,它的两端都连着日球表面,形成了一座巨大的拱门。“万年炎帝”号从这高达四十万公里的凯旋门正中缓缓地、庄严地通过。前方又出现了几道日珥,它们只有一头同太阳相连,另一头伸进了太空深处。发动机闪着蓝光的“万年炎帝”号,象穿行在几棵大火树中的一只小小的荧火虫。后来,那蓝光渐渐熄灭,发动机停止了,“万年炎帝”号的轨道已精确设定,剩下的一切都将由万有引力定律来完成了。

刘培强说的“前进三”一些人可能会联想到《三体》中的“前进四”,不过在大刘开始连载《三体》之前的所写的短篇小说《山》中已经出现过了这个梗,可惜《三体》更加出名:

是的,是命运,为逃避山,冯帆来到太平洋中,而就在这距山最远的地方,出现了一座比珠穆朗玛峰还高二百米的水山,现在,它是地球上最高的山。
“左舵五,前进四!我们还是快逃命吧!”船长对大副说。

nmd,地球呢?

对电影本身的评论到此为止,除了电影本身之外,吴京在整部电影中所扮演的戏剧性角色也十分有趣,除了演员之外,吴京还在这个项目之中起到了投资人的角色,使得电影在万达撤资之后获得6000万元的资金得以完成,并且凭借自身的名气给电影带来了巨大的流量。
吴京在网上的评价是两极分化的,有喜欢他的人,更多的则是黑子。吴京在接受BBC采访中说出的“爱慕拆尼斯”成了网络上经久不衰的网络迷因,甚至有了“京学”这种常和homo文化、恶俗文化一起提及的恶臭不堪的糟粕(《假面骑士京骑》)。在逆向民族主义之下,网友们将吴京视作宣泄的对象,在各种社区中京图发的不亦乐乎,战狼PTSD在全国广泛传播。
我是不喜欢《战狼二》的,日后也并不打算去看,甚至偶尔也玩“爱慕拆尼斯”这个梗(没办法,太好玩了哈哈),但我仍然认为吴京是在这场逆向民族主义之下的受害者,他承担了太多无谓的诋毁与谩骂。
在我眼里,吴京是少有的知行合一的、具有大局观,并且真正希望为中国电影业做出贡献的人。从买房拍《战狼》开始,吴京便展现了他的这一特点,尤其是在这次《流浪地球》项目中展现的淋漓尽致。
在中国电影业这种环境下,吴京还能有勇气参与这种不成功便成仁的项目之中,并且在最后取得巨大成功。有人说这是说明吴京作为投资者的眼光毒辣,但我估计他也没有想到这么多,更多的是凭借着满腔的勇气而不是对于利益的敏锐嗅觉。
此外值得警惕的是,部分恨国党们已经把目标对准了大刘,目测未来几年会出现一个“电工PTSD”,比战狼PTSD更加难以治愈。
PTSD

由导演说中国烂片多是因为观众烂,事实证明,只是因为他们“拍不出好的作品”罢了。
吴京在如今的中国电影业起到拨乱反正的作用,凭借《战狼二》和《流浪地球》累计的一百多亿的票房成绩给那些将失败归咎于国情、归咎于审查、归咎于观众的资本、电影人和演员脸上甩了狠狠一巴掌。
资本是逐利的,是无利不起早的,它们本身并没有情怀,可以预见《流浪地球》的成功将会在未来带来大量的资本涌入中国科幻电影,到底是优秀的电影人借此开创更加优秀的作品,还是资本彻底弄垮这个类目,现在还不得而至。
作为一个喜欢中国科幻的普通读者,衷心地希望《流浪地球》只是一个良好的开始,而不是顶峰。
中国科幻文学在上世界末被打为“邪门歪道”,凭借着“儿童文学”的名号苟且偷生,并从本世纪初作为小众文学默默发展,直到《三体》获得雨果奖才在大众文化中留下重要的一笔,《流浪地球》电影无疑是中国科幻文学发展的重要一步。
中国不缺好的科幻小说,也不缺好的科幻作者,只缺将科幻文学带入大众视野的途径,电影无疑是最喜闻乐见的题材。以前拍不了,一方面是受众小,更重要的电影工业还达不到拍科幻大片的标准,而《流浪地球》的质量证明了中国也能拍能够达到好莱坞标准水平附近的作品。
以前的中国科幻可以说是空有宝山而无法开采,优秀的科幻小说又岂是只有《流浪地球》一部?光是刘慈欣的作品便不知能拍几部电影了,光《三体》三部小说全部拍成电影的话就能拍个十部以上。毫无疑问大刘是当代中国科幻第一人,其他科幻小说作者的名气加起来估计都没他大,但其他科幻小说家也不乏精彩的作品,王晋康、何夕、刘文扬、长铗、迟卉、夏笳、韩松、江波、张冉……这些中国科幻作家的作品依旧能够作为中国科幻电影取之不竭的宝库。
我在一个知乎一个标题为“中国有什么适合拍成电影的科幻小说”回答中发现一个有趣的现象:回答的作品,大多都是出现在2000年~2010年在《科幻世界》杂志上连载的作品,新的作家和作品没有几部,足以证明了《科幻世界》杂志或者说中国科幻文学虽然名气越来越大,优秀的作品却越来越少,这是由于《科幻世界》杂志管理不善、纸媒收到网媒冲击、网络小说的挤压多个因素下出现的问题,值得深思。
希望是本无所谓有,无所谓无的。这正如地上的路,其实地上本没有路,走的人多了,也便成了路。《流浪地球》让我看到了国产科幻的希望,无论是对于科幻电影还是位于产业链起点的科幻小说。
2019年,可能真的是“中国科幻电影元年”了。
道路千万条

最后用一首歌《古いSF映画》(《老SF电影》)结尾,感觉歌词里描写的情况和电影还是挺相符的。

昨日の夜遅くテレビで
昨天夜里
やっていた映画を見たんだ
看了电视台播出的电影
未来の世界を舞台にした
是一部讲述未来世界的
海外の古いSF
国外科幻老电影
すでに世界は汚染されて
世界已经被严重污染
マスクなしじゃ肺がただれて
不带防护面具肺就会糜烂
瓦礫の如きメトロポリス
城市犹如废墟
未開の惑星みたいな地球
地球就像未开垦的行星
逃げ込んだ先は地下室
人们逃入的地下室
ただしの80000km2の
深达80000km2
昔はシェルターと呼ばれていたが
之前被叫做避难所
今じゃ都市と呼んで差し支えない
现在称其为都市也无妨
人工太陽 人工植物
人工太阳 人工植物
そもそも人工じゃないものはない
一切都是人工的
ほぼ人間と変わらぬAI
宛若人类一样的AI
誰もそれに疑問は抱かない
无人对其产生质疑
殺人 略奪 治安維持も無く
杀人 掠夺 没有治安的维护
力は力でしか抗えない
只能自食其力
犯罪の5割はアンドロイド
5成的犯罪都是机器人所为
科学の飽和を憎む主人公
主角憎恨科学的饱和
前時代ののCGもほどほどに
老时代的CG画面穿插得当
徐々に核心に迫るミステリ
悬疑逐渐逼入核心
だが実は彼もアンドロイド
原来主角也不过是机器人
ってのがその映画のラストカット
这就是电影最后一幕
僕らが信じる真実は
我们坚信的真实
誰かの創作かもしれない
也许只是某人的创作
僕らが見てるこの世界は
我们眼中的世界
誰かの悪意かもしれない
也许只是某人的恶意
人が人である理由が
倘若“人为人”的理由
人の中にしかないのなら
只能由人而释的话
明け渡してはいけない場所
那绝不能交出的场所
それを心と呼ぶんでしょ
就叫做“心”了吧

完
2019.02.09

《STEINS;GATE0 观后感》

发表于 2018-09-29 |

《STEINS;GATE0 观后感》

TOP
2010.4.23~2018.9.27
跨越了八年多的时间,整个β世界线的故事最终在此日完结。
在这几年里陆陆续续把广播剧,β世界线小说三部曲,SG0游戏,官方设定集补完,在动画播放期间也看了一些STAFF和CAST的访谈,直到今天把动画看完,我觉得应该对这整个企划比较熟悉了(笑)。
虽然嘴上骂着“五流科幻”、“不带脑子看才行”,最终还是老老实实一集一集看完了(真香!)
这大概是整个SG系列最后一部动画作品了,其他周边作品的体量都太小,不足以作为动画出现;而且SG本身故事结构也不是能够新作一部一部出来骗钱的。
站在结尾回顾整部作品,逐渐理顺思路的同时,我想说下我自己的感想——SG0动画是一部相当可惜的作品,作为一部游戏改作品,它在某些方面非常出色,同时又由于一些不可忽视的缺陷拉低了整部作品的质量——远远不能忽视,用“瑕不掩瑜”来形容的缺陷。

首先谈一下SG0的缺陷:

大量的未回收伏笔。

我想当理解STAFF将原作巨大的剧情压缩到一部半年番的容量所做的努力,以及在这之中不得不对诸多内容进行取舍,甚至忍痛割爱,但是这东一笔西一笔,只挖坑不填坑让我十分不理解。
没有回收的伏笔等于败笔
要么做,要么不做,我不知道STAFF方面究竟是出了什么问题才会造成如此大的失误,从作品整体上看,大纲和剧本明显是经过长期的准备、完成度相当高的,但是在这些细节方面却如此草率,在这方面甚至让人感觉是做着后面的内容就忘记了前面的情节一般。
ep4中一闪而过的苏联相关情节在后面没有任何解释;石膏为何出现在东京机电大学也没有下文;新型脑炎这些情节后面也都没有作用;电视新闻中出现的动物实验、俄罗斯地震也毫无用处。。。。种种此类未回收的伏笔还有很多,就不再列举了。
尽管这些内容都能在游戏中得到答案,但动画没有很好的回收,无疑是极大的失误。而且从剧本的角度来看,这些伏笔回收也并不困难。
甚至抱着恶意一点的猜想,动画这样做的目的是为了刺激游戏的销量,毕竟5pb在《OCCLUTIC;NINE》中已经玩过这个套路了。

流石五流科幻:逻辑方面的大量崩坏

《STEINS;GATE》这部作品最大的魅力便是“由50%的严谨和50%的浪漫所构成”,高度自恰的世界观以及无懈可击的QA才使得这部作品如此不同,而大量的周边作品和追加设定又进一步完善了这个世界。
然而很遗憾的是,SG0在在逻辑方面却有诸多问题,远不及本篇的无懈可击。
举例来说的话一个比较明显的地方就是ep8中从贝塔世界线变动到α世界线的原因直到结尾也没有说明,直接糊弄过去了;ep23中如何避免“时间机器被炸毁”这个收束的解决办法也相当模糊而随意,感觉像是凭借那股气势直接混过去一样。其他还有一些小毛病,甚至连动画原创的“2011年7月7日时间机器会被炸毁”这件事被收束都有点讲不通的。
在ep8的时候很期待staff怎么把游戏里本来就存在的这个坑给圆上,然后才发现staff已经放弃思考了。
所以后来我也放弃思考了:(
以后再也不敢跟别人吹石头门逻辑严密了。
以上是我认为SG0在剧情上最严重的缺点,至于其他的一些问题,例如过多的jump scare、第17,18话烂到突破天际的分镜与作画、BGM滥用(典型例子是ep13一话中播了六遍logic theme,连换都不换),在这两个大问题前也就不怎么严重了。
当然,即便如此,我也是相当喜欢SG0这部作品的,SG0有很大的缺点,但同样也有许多不得不提的优点,作为一部粉丝向作品也极大地满足了粉丝。
和SG相比SG0或许有一定差距,但是SG0放在整体中看也是相当优秀的作品,将其评为庸作烂作,未免太不公平。
有几个地方让我十分喜欢SG0,也看到了STAFF的诚意。

SG0的优点:

出色的脚本重编排

首先需要说明的是,SG0相当难以动画化,难度和本篇相比不知道高到哪里去了。当然,这并不是说SG0故事更加复杂,而是游戏的锅了。
为了追求开发速度,5pb.在编写SG0游戏脚本的时候选择了三位脚本家同时开工,三人分别负责各自的路线,导致SG0虽然总文本量并不小,但各章节之间支离破碎,质量也参差不齐,再加上原来β世界线小说三部曲的剧情和原创剧情一锅炖,简直像是一部半成品。在这种情况下,动画的难度可想而知。
SG0-Route!
然而出乎意料的是,SG0动画重新编排剧本后,将非线性的内容改为一个完整的线性故事,整体上以《无限远点的Altair》路线为基础,中间穿插《盟誓的Renaissance》以及其他各个支线的情节,将整部作品的内容尽可能地加进动画里。可以说,这几乎等同于重新写剧本了,难度并不比原创动画低。
同时这也让我在追番的过程中保持了很高的热情,即使已经了解了原作的内容,这段情节要如何在动画中展现、这段伏笔要如何揭开也是很难预测到的。
整体上来说,我对SG0重新编排后的脚本还是十分满意的,即便信息量和原作相比相差很大,但由原作多个章节重新编排而成的线性脚本无论是在故事流畅度还是在感情渲染方面都比原作更强,观感也更好。

更加强大的主角群描绘、合乎情理的感情推进

在剧情逻辑与伏笔回收方面,SG0或许有诸多不足,但是在角色塑造方面,尤其是主角群整体的人物塑造与描绘,我个人感觉SG0是要优于SG的。
在本篇中,无论是在动画还是游戏中,主要描绘的角色也只有冈伦、助手、铃羽三人,LabMem中的其他角色的形象塑造十分单薄而功能性,即便是真由里和至这样的关键角色,着墨也十分稀少,更不用说其他的角色了。即便在本篇之后通过各种周边作品大大丰满了角色形象,也不能否认本篇在这方面的不足。
举个比较明显的例子就是至,在本篇中他的台词很多,但大多都是插科打诨来调节气氛的,尽管在剧情中发挥着重要的作用,对他的描写也相当浅薄化与工具化。
简单来说,SG中,大部分角色缺少高光时刻(角色令人深刻的表现)以及角色弧(角色在故事中不自觉的成长)。这是十分令人遗憾的。
但这也同样为SG0中出色的人物描绘埋下了空间。在SG0中,桥田至单薄的角色形象逐渐丰满。和铃羽的互动,逐渐建立起他身为“慈父”的一面;ep15中和由纪的关系发展,又让他意识到了身上所肩负的责任;直至ep16中感情的爆发,依靠声优关智一出色的演出,表现出了至在内心中掩埋的痛苦与压抑;更不用说在2036年相关剧情中发挥的重大作用。
daru
SG0中的桥田至,有着诸多高光时刻的出色表现,又有着从最初铃羽来到这个时代的迷茫到最终坚定自己信念改变未来命运的角色成长,不少人说“桥田至才是SG0真男主”的原因就在这里。
除了桥田至外,SG0对其他LabMem的描写有非常成功的,也有少部分很差的甚至几乎没有描写的。
我个人感觉相当成功的有:真由理、β世界线铃羽、萌郁;
描写较好,但有提升空间的有:Amadeus红莉栖、琉华子;
描写较差:真帆、篝;
基本毫无描写:留未橞;

真由理

毫无疑问,如果说SG中谁才是真正的β世界线女主角,那毫无疑问是真由理。整部SG0,某种意义上来说真由理的思念开花结果的过程。这个在最初的广播剧中担当第一人称视角的主角,在小说、游戏、动画中仍然担当着最主要的角色。
我相当喜欢在SG0中真由理所展现出的善良与勇气。 面对日渐消沉、悲伤抑郁的伦太郎,真由理暗中牵挂,无法熟视无睹,却并不知道如何去做,直至最后在ep16中忍无可忍,终于把话挑明,感情也就此决堤。
mayushii1
而之后也迎来了SG0的Endgame,可以说,16话之后全部的内容都是描写如何让真由理成功回到过去,唤醒如今这个失魂落魄的伦太郎。
从本篇中的被保护者身份中毕业,成长为SG0中勇敢踏上未知旅程、穿梭时间洪流的勇者,真由理的角色弧在这一刻也完善了起来。前几天翻译的CAST独白《催泪雨的Puddle》也把真由喜的感情和动机进一步丰满。
mayushii2

铃羽

我同样也非常喜欢动画对于β世界线打工战士形象的塑造。铃羽这个角色放到系列作品中看十分有意思,由于时间机器的关系,铃羽几乎和SG系列中出场的所有角色都有十分深厚的联系,范围从1970年~2036年:在α世界线中身为桥田玲博士,铃羽和中钵博士(助手的父亲)、菲利斯的父亲,是亦师亦友的关系,还对布朗有恩;在β世界线中是她带来了系列作品中年龄最小的篝。
suzuha1
α世界线和β世界线中的铃羽无论是出身环境、目标、还是性格都千差万别,几乎能够当成两个人来对待了。总体来说,我还是更加喜欢β世界线的铃羽,严肃而坚强的性格十分吸引人。
在第15话桥田一家中,staff再次描写了铃羽在未来生活中的悲惨命运,更加加深了她改变过去的决心和动机。相当喜欢这一话。
suzuha2

萌郁

萌郁在SG0原作中事实上并没有动画中出场这么多,而且并非一直是站在主角这一方的得力助手,在一些路线中还会作为rounder参与对助手笔记本的抢夺。
动画则是把这些负面描写全都删除,并且给萌郁加了很多戏,多次让她作为冈伦的助手和协作者出场,大大增加了在观众的好感。相信凭借萌郁在SG0中的表现足以获得No.005的身份。
比较可惜的是真帆和萌郁两人的友情由于动画删了真帆路线并没有体现多少,只是蜻蜓点水提了一点,原本看OP中真帆和萌郁在同一卡中还以为会有相关情节的。
萌郁的性格我觉得也没啥塑造了,忠犬属性满满,这点讲的的比较好的是γ世界线广播剧《暗黑次元的海德》。
moeka

Amadeus红莉栖

动画给Amadeus加了比较多的戏,不过这也是在预料之中,毕竟助手始终是系列作品中的Best Girl,摇钱树一般的存在。
从广播剧到小说到游戏到动画,Amadeus的戏份是越来越多。广播剧中还没出现,小说中只能在电脑上见面,游戏中特意新增加了一个Amadeus APP,让冈伦能在随时用手机吸AI。
有关Amadeus这部分的内容我比较喜欢22话中Amadeus在被删除前的独白。一直以来,无论是观众还是作者都将Amadeus当成是助手的替代品,而不是一个独立的“AI生命体”,22话中第一次出现了Amadeus从AI的角度谈及她对于这个世界的看法,而不是红莉栖的角度。
有关AI的这部分内容也十分可惜,一些比较核心的问题也没有涉及,真帆路线关于人工智能的讨论那一段谈话也被删除了,皮格马利翁之恋更是无从谈起。
amadeus
SG0虽然不如SG,但同样有其优秀的地方,而且这两部作品都是需要认真思考的作品(虽然SG0中仔细思考的话BUG比较多),我不愿意将SG0称为“狗尾续貂”。而且我也发现了SG0在台本方面略微晦涩,信息量很大又没有说清楚,不了解原作的话需要多加思考才能明白表达了什么,这点应该也算是一个不大不小的缺点吧。

尾声

谈完了作品方面,在这里谈一谈这几个月在SG0放送过程中遇到的人。
首先是YouTube上的Sarkkoth,他的个人的YouTube频道上几乎都是SG相关的内容,包括广播剧日语到英语的翻译、舞台剧翻译、单集的Quick Review等,为SG英文社区做出了重要的贡献,之前向他索要无字幕版的视频文件也很快发给我了,十分慷慨。除此之外,Sarkkoth的视频剪辑制作能力也十分强,一个人啥都能做,强到爆炸。
真是立派的石学家。
点击进入Sarkkoth的频道主页
然后是YouTube的漫评up主Chibi。Chibi小哥真是十分喜欢SG0,每周周四播出后都能很快看到他制作的单集点评,至今已经持续了23周。而且Chibi虽然没有玩过原作,但也对剧情的发展有一定的正确猜测,我每周都会看Chibi的点评,从另一个角度审视SG0。
点击进入Chibi的频道主页
23话的点评Chibi已经做出来了,并且声称SG0是他最喜欢的十部动画之一,尽管他知道SG0也有许多不足www。
接着是两位中文社区的,B站up主“咪啪的哈牛”,在这期间勤勤恳恳汉化了多部广播剧,十分感谢他的辛苦付出;百度SG吧吧友“_尾上士力架”写了很长时间的单集点评,非常精彩。
点击进入咪啪的哈牛的频道主页
最后推荐一下SG0的OST,里面有几首还是十分喜欢的,尤其是《まゆしの悲しみ》这首。
SG0是一部优秀的作品,却不是一部优秀的“命运石之门”正统续作。这是让我非常遗憾的。
不过能够再一次看到可爱的LabMem们活跃在屏幕之上,作为一名fanboy,我还是十分高兴的:P

宇宙(うちゅう)には始(はじ)まりはあるが、終(お)わりはない。無限(むげん)。
星(ほし)にはまた始(はじ)まりはあるが、自(みずか)らの力(ちから)をもって滅(ほろ)びゆく。有限(ゆうげん)。
英知を持つ者こそ最も愚かであるのは歴史からも読み取れ。
海に生ける魚は陸の世界を知らない。
彼らが英知を持てばそれもまた滅びゆく。
人間が光の速さを超えるのは、魚たちが陸で生活を始まるよりも滑稽。
これは抗える者たちに対する、神からの最後通告とも言えよう。
(これは、そんな神からの最後通告に抗った者たちによる——
執念のエピグラフ。)

2018.9.29

《Steins;Gate 线性拘束的Phenogram》通关感言

发表于 2018-05-16 |

《Steins;Gate 线性拘束的Phenogram》通关感言

不得不说SG0动画的开播重新燃起了我对系列作品的热情,于是打开了在硬盘中尘封已久的《Steins;Gate 线性拘束的Phenogram》(STEINS;GATE 线形拘束のフェノグラム,国内一般译作线性拘束的表征图/树状图,下文以“树状图代称”)
《STEINS;GATE 线形拘束のフェノグラム》是5pb.于2013年4月份发布在主机平台的Visul Novel类游戏,是石头门第二部Fan Disk类游戏,但和前一部FD《比翼连理的Darling》充满胡闹的恋爱喜剧氛围不同,《树状图》更接近于对于原作有补全性质的“正剧”,整部作品的基调也和原作压抑灰暗、轻微的精神猎奇相同,通篇完成后,个人还是十分推荐喜欢石头门以及科学ADV系列的玩家对该作进行补完的。
我是在13年入坑石头门的,本篇游戏以及动画补完后就不断地搜集衍生作品,第一次接触到《树状图》还是在14年,那时候网上只有录屏版而且根本没有任何形式汉化翻译,但幸好在YouTube上还有英美的爱好者上传了有英文翻译的录屏版本,而且所用的词汇还相当简单,就通过这个版本完成了一半的路线,后来感觉体验比较差,而且日文翻译成英文读起来总感觉怪怪的,就弃坑了。
顺便提一下,这位老哥把SG所有续作和FD都做成了英文字幕录屏版,看来是真爱粉无疑了(笑)。
zakobot_main_page
zakobot_play_list
自己真正体验这部作品则是在2017年6月份国内的汉化组合力将这一部主机平台移植到PC平台并汉化之后,然后总共11个篇章陆陆续续地玩了快一年总算补完了该作。
无关话就说到这里吧,下面还是谈一谈作品本身吧。
sgfd2_theme_picture

作画

本作的作画仍然由SG的原画、黑岩射手的创造者Huke担任,风格和质量与原作趋向一致,发挥稳定,比SG0崩坏严重作画不知道高到哪里去了,而且也有几张描绘名场景的CG让我十分喜欢。

音乐

BGM有一部分沿用了本篇,新的数目较少,不过质量还是很高的,下面说几首我比较喜欢的:

《GATE OF PHENOGRAM》:整部作品的Main-Theme,仍然是原作的Main-Theme《Gate of Steiner Main-Theme》的变调,开头部分很赞。
《Nervous》:回忆用BGM,曲调悲伤而忧郁,能够轻易调动玩家的感情。
《Hack -Gamma vision-》:《Hack》这首曲子的第三个版本,和α,β版本相比,γ版本要更加的偏向于沉重,使用了大量的重音和低音,如果有素质比较高的耳机的话听起来很爽。
《I’M MAD SCIENTIST》:燃曲,冈伦中二病发作重新振奋时的BGM,每次都会在剧情高潮,使用Dmail改变世界线的时候响起,和SG0中的《Re-Wake》作用大致相同。

除了BGM外,几首OP和ED质量也很高,OP《フェノグラム》的动画做的不错,值得观看;我比较偏爱的是第十一章Nae线的结局ED,《あの夏の日の想い出》,第一次以小动物的视角来体验整个故事,并且表达出了她在事件发生之时仅仅作为“旁观者”,毫无作为而产生的遗憾——“傍観者は嘆き 否定を繰り返した そして季節は過ぎ”,作为承接《Robotic;Notes》故事的一个篇章,Nae线为接下来在RN中出场的诸多元素埋下了一个伏笔。(虽然RN在12年就已经出了XD)

剧情

和本篇由林直孝一人作为脚本不同,《树状图》每个故事都由不同的脚本家所写,因此在风格、质量,以及想要表达的方面都大不相同。

章节名 视角 原标题 副标题 世界线变动率 作者
扫描线上的化身博士 冈部 走査線上のジキル Dr. Jekyll on lines α0.337199% 下倉バイオ
绚烂假想的蛇蝎美人 至 絢爛仮想のファムファタール Bird Singing in Cage δ3.019430% 林直孝
黄昏色的救世主 红莉栖 黄昏色のソーテール Vermilion Sooteer α0.328403% 三輪清宗
幽灵障害的会合 铃羽 幽霊障害のランデヴー Ghosting Rendezvous α0.337337% 新井輝
雨铃铃曲的消除 Mr.Brown 雨鈴鈴曲のスクレイパー A Strange Building Filled of Love δ3.386019% 坂本正吾
桃色幻都的黑猫 菲利斯 桃色幻都のシャ・ノワール Super hero Chat-noir δ3.030493% 气贺泽昌志
迷宫错综的雌雄共体 硫华 迷宮錯綜のヘルマフロディトス Hermaphroditus in Labyrinth α0.456923 安本亨
悠远不变的北极星 真由理 悠遠不変のポラリス Eternal Polaris α0.571046% and Ω-0.195284%. みかづき紅月
昏睡励起的量子 萌郁 昏睡励起のクアンタム Quantum excited in Coma α0.509736% 晓影二
三世因果的绑架 冈部 三世因果のアブダクシ Three Contrapasso About The Abduction ε4.456441, 4.456442, 4.493624, 4.493623, 4.530805, 4.530806% 打越刚太郎
月晕的彩虹桥 绹 月暈のビヴロスト Lunar Halo Bifröst α0.337161 林直孝

《正义联盟》观影吐槽

发表于 2017-11-18 | 更新于 2017-12-22 |

晚上看了今天首映的《正义联盟》,个人感觉还是比较失望的,DC粉或者星期天实在闲的没事的可以去看看,普通观众就算了吧,浪费时间。
整体上这部电影给我的感觉是越来越“漫威化”,许多地方可以看到DC在有意的模仿漫威,这种模仿体现在很多方面:
从大的方面来说,DC开始模仿漫威进行电影中DCEU的建立,包括多个超级英雄联动的电影,小的方面讲,例如充斥整篇电影的插科打诨,闪电侠和蝙蝠侠的组合也比较类似前段时间蜘蛛侠电影中小蜘蛛和钢铁侠(青年屌丝话痨和中年高富帅)的组合。整部电影唯一有亮点的台词也只有老爷那句“我的超能力是有钱啦”。
应该是吃了各个登场角色没有独立电影的亏,闪电侠、海王、钢骨这几个角色登场之前都有一段非常长的人物介绍,大大缩短了故事展开的时间,这里完全是没有规划好作品联动的后果。不得不说,有一个长远的规划真的很重要(
电影主线是喜闻乐见的超级英雄集合打boss模式,也算是多英雄电影的套路了,这点我没啥意见,不过有些情节就不得不吐嘈了:

  • 为啥每一个反派都想方设法毁灭地球,地球到底是哪里招惹您了啊。JL里的反派荒原狼毁灭地球的理由完全没法解释啊,把地球炸了对他也没啥好处吧。我反正是对这种莫名其妙脸谱化一样的反派烦透了。与这些脸谱化的反派相比,我更喜欢《蜘蛛侠归来》中的秃鹫,有血有肉。
  • 为啥蝙蝠侠在复活超人的时候为啥没有派人看守母盒?这可是凑齐三个就能召唤神龙,啊不对,毁灭地球的危险物品啊,您怎么让反派轻易拿到了啊,莫非你是地球人内奸,简称人奸?
  • 超人这复活后脑子不对劲啊,就算在BvS里和蝙蝠侠有着误会和冲突,看到好基友把自己又复活了也应该先问下发生了什么对吧,怎么上来就把好基友打了个半残,搞得我还以为超人黑化了呢。

和前面的MoS和BvS相比,JL简直走在另一个极端。
BvS过于沉重而晦涩,JL则是彻头彻尾的爆米花。BvS中扎导对于英雄概念的建立、基于“假如超人真实存在”前提所做的较为复杂的讨论在这部电影中都消失地无影无踪,只剩下一个漏洞百出的剧本,和僵硬的角色。剩下能看的,估计也就只有加朵的盛世美颜了。
比较不幸的是,我比较喜欢的BvS票房同样也比较惨,观众们不喜欢内容主题复杂的电影的。
当然,JL这种太过爆米花的同样也不会受到观众的喜爱。努力做到“雅俗共赏”,口碑票房双丰收才是坠吼滴。
顺便提一下,影片中的jump scare稍微有点多,这点就不怎么友好了。
希望DC能够在电影创作中找到自己的方向,毕竟,世界上只有一个漫威就够了。

《海猫鸣泣之时》通关感言

发表于 2017-10-25 | 更新于 2017-12-22 |

《寒蝉鸣泣之时》动画凭借优秀的剧情给笔者相当大的触动,“龙骑士07”这位脚本家也在笔者心中留下了深刻的印象。在“不如他其他的作品?”想法下,我下载了鸣泣之时(When They Cry)系列的第二部——《海猫鸣泣之时》,花费了大概40个小时把游戏的出题篇和解题篇总共8个ep通了。但可惜的是,这次的体验就没有《寒蝉》那么愉快了。


《海猫》是一部两极分化极为严重的作品,说实话这样的作品我还是第一次遇到。一般而言,作品是“神作”还是“烂作”是能够得到玩家/读者的普遍认同的,就算有部分玩家意见和大众不一,那也是极少数的一部分。
然而,玩过《海猫》的玩家,要么是对其甘之如饴,将其视为9分、10分的神作,要么是对其口诛笔伐,大骂坑爹烂作。这是一个相当有趣的现象,通完8个ep后我想也能对这种现象做出一些解释了。

首先说下我的观点:《海猫》是一部优点和缺点都非常突出的作品(这里仅指剧情),同时也是一部对玩家\读者相当不友好的作品,07在一些地方并没有给出玩家想要的东西。
《海猫》中最吸引人的莫过于世界观的设定,或者说是《海猫》的叙事方式。毫无疑问,《海猫》是一部MetaGame(元游戏),或者说是“后设作品”。“元游戏”在网上也有着比较详细的介绍,这里就不赘叙了。此外,《海猫》还有着常见的孤岛模式、洋馆杀人、杀人预告、密室等元素。
《海猫》在游戏中,是根据三条路线来叙述的,即棋盘世界、棋盘外世界、现实世界。作品的大背景是虚构的在1986年10月4日至10月5日期间,发生在无人小岛六轩岛上的右代宫一家被灭门惨案,此次之后右宫代家族仅剩三人存活(事件幸存两人,同时有一人未上岛)。
棋盘世界和棋盘外世界虚构的世界,棋盘世界中反复发生着10月4日与10月5日的案件,并且每一局棋盘中,发生的事件都不一样,棋盘外则是主角——右代宫战人,代表着玩家和科学一侧,与代表着魔幻一侧的魔女——黄金魔女贝阿朵莉切的对决。魔女可以设计事件的发生,或者说,魔女是出题者,在每一局棋盘中给有代宫战人出下难题,并悉知真相。战人则是需要通过观察棋盘世界,找出真正的凶手,但是在涉及到凶手杀人的一幕时,战人以及玩家观测到的杀人事件发生则被替换为“魔女杀人”。
也就是说,战人(玩家)观测到的棋盘世界情况,为了不泄露凶手以及作案手段,会将这一幕前后替换为魔法大战,这也是ep2~ep4中,到处都是法术对轰的原因。玩家需要清楚这一切都是假的,障眼法而已。
贝阿朵莉切可以提出“红字”宣告棋盘世界的真实,例如宣布“XX人死亡”,此人在这局棋盘对决中一定是死了,战人可以用“蓝字”进行推理,贝阿朵莉切需要用“红字”来否定战人的“蓝字”。假如在对局结束后,战人的“蓝字”有一处不被否认,则战人胜利,否则贝阿朵胜利。

关于ep1~ep4的棋盘世界,个人在通关后回顾还是相当有意思的,根据魔女的红字提示加上棋盘世界的台词,再加上在ep7出现的一个关键线索,是能够推理出来的。原作其实只是对答案做出了比较模糊的解释,并没有详细解释,倒是漫画里比较详细地解释了。然而龙骑士07这货挖坑不填坑,反而在ep8讽刺玩家是“不知思考,只知道等着真相的豺狼”。
然而在幻想世界中发生的一切,也无法对1998年的现实世界造成一丁点的影响。在1998年,右代宫一家仍然是死的只剩两个,这是个没有人得到拯救的故事。1986年的六轩岛是一个猫箱,既然没人知道发生了什么,那么无论在里面发生稀奇古怪的事情,都不足为奇。
ep8龙骑仍然不给出真相,满嘴“只有爱,才能看到”。我日啊,这货满嘴本格推理,最终反而连一个确定都给不了,我特么玩了三十多个小时连个真相都没法得到?
怪不得不少人骂装逼烂尾,ep8也因此变成一部批评空间地雷作。相反信息最多的ep7在系列中评分最高。
大概是感觉烂尾了不好意思,《海猫》的解题篇名字叫《散》而不是《解》。
07一方面鄙视着本格推理小说,一方面又拿本格推理来提高自己的逼格。什么“恶魔的证明”、“亨佩尔的乌鸦”、“诺克斯十诫”忽悠地人一愣一愣地。然而诺克斯十诫已经是多少年前地东西了,如今还把它奉作金科玉律,惊爆大象部落。
一方面宣传自己是本格推理,一方面在作品中狂水魔法战争,后来特么的这些内容比正片还多。刚开始还比较新鲜,后来完全是厌烦,ep6基本上是完全CTRL跳过去了,毕竟基本上全是魔法战争。
ep8,玩家不爽,然而07我估计巨爽,写的全是自己想写的能不爽么,真是可怜了几年来一直支持他的玩家。《海猫》动画巨烂,估计也和作品不被待见有关。
ep7中的三位一体,我算是无语了。明明三个立绘\CV\发色都不一样的角色,你非要说是一个人?写在小说里的话怕不是要被读者骂死。
《海猫》人物描写比较优秀,这是不能因为偏见而否认的,就连一个做饭的乡田俊朗这个小角色也能描绘的栩栩如生,其他的人物,也都突破了脸谱化的角色。每个人都不是坏人,但每个人也都有自己的难言之隐和作案动机,在黄金的激化之下,血案的发生在所难免。其中楼座和真理亚这对母女之间的悲剧让人唏嘘,楼座对于真理亚教育的失职导致了她的怪异和孤僻,而这同时也伤害着母亲楼座,两人的犹如想要互相靠近的刺猬,想要靠近取暖却又伤害了彼此。比起一些作品将错误全推在母亲身上,这种“两个人的错误”更加增强了悲剧感与宿命感。

然而,07可是宣称《海猫》是正统的本格推理呢,在推理方面做的一塌糊涂,反而在人物描写方面花了这么大的功夫,岂不是捡了芝麻丢了西瓜。
真女主贝阿朵莉切ep1——4刻画得比较成功,到后面就崩了,一如剧情。还是比较可惜的,毕竟浪费了这么优秀的人设,黑化和颜艺可是大萌点啊。(不要吐槽立绘)

反正我以后是看见龙骑士07是会绕着走了,太坑了,rbqrbq。
龙骑士07一直说着“没有爱就看不见”,那么我估计就是“没有爱”的玩家了。
最后,本作的音乐非常优秀,无论是游戏中的OP《うみねこのなく頃に》还是动画OP《片翼の鳥》,都为志方あきこ所唱,值得一听。
———来自一位被坑了三天假期的玩家
2017/10/9

《寒蝉鸣泣之时》无剧透观后感

发表于 2017-10-03 | 更新于 2017-12-22 |

想念那一个个消逝的夏天,想念那耀眼的阳光、温暖的风,以及…那一次次清脆悠曳的蝉鸣。
或多或少的牵挂,或悲或喜的命运,好似树上形状各异的叶;有些色泽鲜艳,有些枯黄暗淡,但却有着一样的经络分明,在树上缀满,在风中摇曳。叶的间隙,掩不住阳光,盖不过蝉鸣,更藏不住一次次熟悉的故事,熟悉的人、朋友…
你所能看到的,只是虚伪的居所
在那能看到的,只是空虚的眼神
我所能看到的,只是重演的悲剧 。
在这寒蝉鸣泣之时,你, 能相信吗?

趁着国庆假期的时间,把一直很想看的《寒蝉鸣泣之时》(ひぐらしのなく顷に)动画看了一遍,包括第一季、第二季,以及若干部OVA。整个过程还是相当愉快的,毕竟现在可以让我熬夜一口气看完的动画也的确不多。

比起这部作品原作的同人制作团队“07th Expansion”,其代表脚本家——“龟骑士07”,啊不对,“龙骑士07”的名字无疑是响亮的多。作为著名的脚本家,07在视觉小说玩家中相当出名,不少玩家在提及“顶级的脚本家”时,也往往将他和田中罗密欧、奈须茸、打越刚太郎等顶级脚本家\剧作家相提并论。07也和Type Moon、ZUN被誉为“三大同人奇迹”,当然,在这之中,《寒蝉》也功不可没。
在《寒蝉》之前,我对07的作品接触的还是很少的,唯一接触过的作品,也只是《Rewirite》中的此花露西婭路线。当然,由于整部作品中07只负责了一条路线的剧情,他的发挥空间无疑是小了许多,但在种种限制下,07仍然写出了一个有着自己强烈个人风格的、相当不错的篇章,表达出自己的思想,可以说在这时“龙骑士07”这个名字就已经给笔者留下了相当深刻的印象。
很巧的是,《寒蝉》这部作品,虽然没有正式接触过,但《寒蝉》在任天堂NDS上的移植作品《ひぐらしのなく顷に 絆》中的主题曲《プレイス・オブ・ピリオド》则是笔者最喜欢的歌曲之一,至今仍高高的排在黄易云歌曲播放次数列表的首位。(笑)。

回到正题,个人感觉《寒蝉》的动画改编还是相当完整的,正片48集的充实容量,让剧情最大限度原汁原味地保留了下来,对比《Rewirte》的两季24集和《Chaos;Child》更惨的12集,虽然原作都相当优秀,但动画可以说是有着天差地别了。
原作由于年代原因,以及同人制作的局限性,在作画和音乐上可能有不少的地方落后于时代,因此相当推荐直接补动画,当然,如果是日语熟手,同时也有着主机的话,可以游玩主机上的移植版本,比起PC版质量增加了不少。尤其是PS3\PSV上推出的《ひぐらしのなく顷に 粋》,不仅收录了《寒蝉》本篇完整的内容,还增添了通过漫画等其他形式推出的内容,总共有21个篇章(原作8个篇章),游戏时间超过100小时,全结局成就达成更需要150个小时以上,不少玩家玩了200个小时以上,甚至在所有的玩家之中,仅有11%的玩家将这个游戏通关。其中カケラ紡ぎ編有66个结局,听起来就相当恐怖。动画的所有内容不到《粹》的五分之一,出场人物也不到一半。据个人推测,《粹》的文本量应该在10mb以上,相当于正常好几部VN加起来的容量了。

和慢热的作品不同,《寒蝉》在一开始就将玩家带入到了猎奇而恐怖的氛围之中,从最开始就将玩家的胃口给高高吊起。各个章节分开发布的方式、夸张地“百分之一的正确率”同样也给作品带上了浓厚的迷雾。开局《隐杀篇》后,玩家本以为是故事的结束,然而本已死去的角色在第二章《绵流篇》中重新复活,重新上演新的故事。
这是一个不断循复往返的故事,玩家则在一次次的体验中接近隐藏的真相,雏见泽的往事、御神社作祟、大坝战争,真相在一次次的循环中逐渐接近。出题篇完结后,解题篇中轮回者登场,和玩家一起作为“解题人”将秘密一一揭露,并打破命运的束缚,迎来真正的明天。
不能否认,《寒蝉》中含有较多的恐怖与猎奇成分,“蝉在叫,人在坏”,吾史的球棒、蕾娜的柴刀、诗音的电击器、大石的空调更是被称为四大神器,蕾娜至今也被认为是病娇界的始祖,什么桂言叶、我妻由乃、曾根美雪都要靠边站。但是《寒蝉》却并非是依靠低劣的血腥与悲剧刺激玩家肾上腺的作品。有人评论说这部作品“致郁”,同时也“治愈”,笔者深表赞同。
个人认为,龙骑士07在作品中想要表达的,始终是一些人性中的美好以及最基本的价值观。很奇怪吧?一部以猎奇为卖点作品,想要传达的东西却正的不能再正了XD。
笔者个人感觉,07在作品中,始终是反对暴力这种行为的。在《寒蝉》中,多个悲剧都是因为当事人走投无路,认为只有暴力才能解决问题,然而在实施暴力后反而使得情况更加糟糕。这一点在崇杀篇与皆灭篇对比中体现地最为明显:为了拯救他人而实施暴力,反而造成了彼此都得不到拯救;众人通过正确的渠道交涉、斗争才摆脱了既定的命运。暴力是解决问题的方法之一,它是最直接地方法,但在多数情况下,它往往带来糟糕的后果。
同时,作者也始终强调“罪与罚与赎”之间的关系。俄国作家陀思妥耶夫斯基的著作《罪与罚》中,主角拉斯柯尔尼科夫因为杀人之罪而受到了无尽的惩罚,除了法律的处罚之外,更有着自己良心的惩罚。《寒蝉》中,主角彼此之间都身怀罪过,在一些“碎片”中,主角在种种内因外因的作用下,越陷越深,毁灭他人同时毁灭自己。目明篇中,“最亲爱的杀人鬼”的诞生就体现了这一点,主角在疯狂之下造成了杀戮之罪,最终自己也死去。在一些“碎片”中,通过伙伴之间彼此的信任与帮助,主角摆脱了自身的桎梏,从而得到了救赎。有罪必罚,有罪需赎,这是笔者所认为的作者想要表达的东西。

寒蝉着重描写的,同样也有着人与人之间沟通、协作的重要性。许多情况下,主角本能逃离命运的陷阱,但是因为和伙伴之间交流的缺乏,从而造成了摩擦的升级。就如同钻牛角尖一样,主角的偏执与误解逐渐被放大,最终造成悲剧。一个人解题是无法完成的,只有众人的协力,才能解开这个题目。剧中的轮回者在经历无尽的“碎片”后,方才明白这份信任的重要性。
“あなたは、信じられますか?”
你,能相信么?
关于合作与团结,07通过雏见泽村民彼此之间的团结,给我们表达了出来。

一人以石相击,二人以牙还牙;
二人以石相击,四人追而反之;
八人举棒而至,十六人血债血偿;
如若千人来袭,村中全体将挺身而战;

比较巧的是,龙骑士07在现实生活中同样也体会到了这一点。2009年,团队中的程序员、07重要的协作者BT桑因病去世,07的鸣泣之时系列的第二部《海猫鸣泣之时》剧情也因为缺少BT桑的监督走向暴走,甚至出现了作者与玩家彼此敌视与嘴仗的情况。在缺少最重要的同伴、读者的帮助下,07的海猫最终以失败收场。
当然,07想要借《寒蝉》想要表达的东西还有许多,例如对于二战的反思,对右翼的不满、对于学术研究参入政治斗争,政治左右学术的批判、对于既定命运的反抗……
一部作品之所以优秀,或许就体现在它无法简单的概括吧。
个人最喜欢的角色反而都不是主角组的,男性角色中比较喜欢大石蔵人这个中年警官的角色,冷静而可靠,同时也不失担当;女性角色中比较喜欢鹰野三四,听说在今年即将发售的鸣泣之时新作中将作为女主角出场,十分期待。
作品的OVA必看!一些OVA比较掉节操,但是我十分喜欢233,保志总一朗毕竟是配过智神的男人,配这种喜闻乐见的剧情也轻车熟路。另外古手梨花的CV是田村由加利,感觉大魔王非常喜欢配这种轮回系作品啊,类似《Steins;Gate》中的阿万音铃羽和《Island》中的御元凛音。

OVA《礼》中的《赛杀篇》可以认为是真结局,是对结局的升华,把整个作品也拔高了一个层次,推荐观看。
当然,《寒蝉》同样也有着自身的缺点。
首先是作为一部推理题材的作品本身的硬伤,主角自身会出现幻觉,看到这点一些推理小说爱好者恐怕是会痛骂作者的。07在对寒蝉的反思中也提到了这一点,这一点的确是比较偏离“本格派”推理作品的宗旨。
当然,07并非是推理作家,《寒蝉》也并非完全是推理作品,大可不必在意。
其次,是笔者个人对于世界观的不满。我偏向于科幻作品,因此对于《寒蝉》中一些偏向于现实的部分比较满意,包括剧中最重要的某个涉及到生物学的设定。但同时,《寒蝉》这部作品也充满了奇幻向的世界观设定,这对我来说无疑是类似于“火锅冰淇淋”这种奇怪的食品。冰淇淋好吃,火锅更好吃,但混到一起恐怕就不是那么容易接受了。
最后,是对于结尾中出现的都合主义和机械降神的不满。作为结局圆满解决问题自然是皆大欢喜,但是太过轻松和儿戏的话反而会显得前面所有的努力都比较可笑。如果说出题篇能打90分,解题篇结局前可以打85分的话,那么结尾我只能打70分了。简单来说就是,07没有填好坑。
好吧,关于《寒蝉鸣泣之时》的吐槽就到这里完了,全篇应该没有剧透,请放心食用。《寒蝉》是一部优秀的同人作品,它自身也担当者同人界大山一般的角色,让人提及便想起那个21世纪初火热的同人创作。
《寒蝉》适合什么样的观众呢?笔者个人认为是以下几种观众:

  • 喜欢猎奇与恐怖向作品
  • 喜欢推理作品,追求解开谜题的快感
  • 喜欢轮回系作品以及复杂的故事
  • ロリコン(误)

希望各位能够体验昭和58年6月悠闲的乡村。
最后,暗黑四天王参上!(滑稽)

完
2017.10.3

CHAOS;CHILD(伪)通关感言

发表于 2017-08-21 | 更新于 2017-12-22 |

Welcome to chaos world

今天早上4点,我终于把这个混账的游戏(伪)通关了,若有所失,如鲠在喉,不吐不快。

我得承认,我最开始决定玩本作的动机不纯,起因是在贴吧与一个CC吹撕逼。在门吧谈论科学ADV时,那个CC吹大肆吹捧CC并贬低SG,甚至说出“CC完爆SG”这种话语。身为门吧大水比,我自然是很看不惯这种行为,于是我将两部作品的销量做对比来嘲讽CC吹,试图给予其暴击,结果被对方的一句“销量不是一部作品的全部,没有玩过没资格评论”给噎住。于是,我带着挑刺的心态开始补这个混账游戏。

这里先说一点。科学ADV系列目前总共有4部,分别是CHAOS;HEAD(混沌头),Steins;Gate(石头门),ROBOTICS;NOTES(萝卜本),以及本作CHAOS;CHILD(熊孩子)。2009年SG问世,好评如潮,玩家对于科学ADV系列的续作期待度更高,然而SG后的下一部作品RN却反响平平,仅仅介于“平庸之作”和“佳作”之间,远没有SG的水准。自此,科学ADV系列的其他作品始终被SG压下一头,不少玩家甚至有疑问“科学ADV系列能够做出和SG水平相当、甚至超越SG的作品么?”,甚至有的人以为5PB江郎才尽,科学ADV系列只能依靠SG这一棵摇钱树赚钱了。然而,在2015年,5PB交上了一份完美的答卷,这便是本作——CHAOS;CHILD(混沌之子)。


不得不承认,尽管我是以挑刺为目的开始看的,但在不久以后我便改变了想法,开始投入其中了。现如今我可以明确的说——CC完全可以与我最喜欢的两部作品,E17和SG比肩,甚至在某些方面更好,但非要比个高低,吊打什么的是不可能的,CC吹也是言过其词了。三部作品各有千秋,很难分出高下。CC可以说是科学ADV系列破除固有框架的革命性作品,科学ADV系列不再是SG一家独大了。

接下来从固定的几个方面开始说吧。

科学ADV系列的联系

纵观科学ADV系列,虽然主题类型相差甚远。如CH与CC的妄想科学,SG的时间跳跃,RN的机器人,但这几部作品世界观相同,故事也发生在同一世界的不同时间点上。几部作品均是与幕后BOSS-300委员会,或者说是委员会的下属组织,如天成神光会,SERN作斗争。综合几部作品,委员会的研究方面无非是两个:

①脑科学
脑科学始终贯穿科学ADV系列,CH与CC不必多说,对于妄想的研究。SG系列助手本身就是脑科学专业的,发明的头盔和在SG0中出现的人工智能Amadeus均是脑科学成果,此外还有SG0中叫兽的洗脑术,RN中时间的相对静止等……这些均是委员会的研究成果,委员会试图通过脑科学建造“新世界”。

②狄拉克海
委员会另一个下功夫的地方就是如何利用狄拉克海。在CH与CC中是通过狄拉克海使得妄想具现,在SG中则是通过狄拉克海进行时间旅行,制造时间机器。
以上可以说是科学ADV系列在根本上的联系。

CV

本作的CV阵容称得上是豪华吧,CV均为年轻的实力派,如松冈祯丞,种田梨沙(种田大法好),政委(上坂堇),制作组在里面砸钱不少,而效果也非常出众,部分场景缺失CG,完全靠声优的发挥弥补了缺失的效果。值得一提的是松冈,在以前的印象中,我一直有他只是一个“偶像派”而称不上是“实力派”的偏见,原因自然是他配的角色多是无脑后宫番的男主(桐人什么的),出众的角色很少,在游戏进行之前我还担心这一点。但玩通游戏后我就被打脸了……宫代拓留,这个角色简直被他赋予了生命一样,矛盾的心里被完全演绎出来。尤其是在猎奇杀人事件中的惨叫和哀嚎非常考验声优,主角内心的恐惧被声优通过声音表达了出来。TE中拓留那种承担一切的淡然与微妙的寂寥也被声优很好的表达出来了。如今我已路转粉,声优果然是不能小看的~ 另一个值得一提的便是政委,士力架的在游戏的前中期和后期声线的转换简直太惊艳了,如果不是CV列表显示是一个人的话我还以为换CV了,声优都是怪物啊……其他人的表现也都可圈可点,这里就不一一赘叙了。

音乐

音乐方面一直都是5PB的强项,毕竟有阿保刚,志仓千代丸,村上纯等优秀的作曲家。本作中BGM都较好完成了职责,渲染了恐怖,诡异的氛围。个人比较喜欢的是《处刑曲》这首。XBOX版OP《非実在青少年》和PS版OP《シンギュラリティ》依旧是志仓作曲填词,伊藤大妈演唱。有玩家说这是5PB为了经费问题才请自家的作曲家和歌姬,不过在我看来这更像是一种传统吧,毕竟该系列一直都是这样做的。不得不说,伊藤大妈的声音有毒,这两首OP的质量都很高的,歌词一如既往的剧透,通关前听这两首歌和通关之后听这两首歌是两种不同的心境。OP动画含有大量剧透,尤其是OP2,几乎只要暂停就有新的发现。OP1中反复出现的“What do you gonna do?”“Welcome to chaos world”,OP2中出现的“爪を噛む少年が嗤い(有一个咬着指甲的少年发出一声嗤笑),新しい命が始まる( 一个全新的生命就此诞生)”在通关后再听到又是另一种滋味。

本作ED插入并不是在TE后,而是在故事即将结束之时。独自一人的士力架在魔方剧场抬头看向头顶的灯光,努力回想却毫无收获,泪眼朦胧,在这时ED《Silent wind bell》响起,故事仿佛戛然而止。《Silent wind bell》犹如拓留与士力架之间的对话,充满了温柔,给予玩家暴击,为结局时两人的分别做铺垫。最后满屏的力士贴纸破碎,后方蓝色的天空闪现,也是预示着脱离了chaos world,回到了真实的世界。这之后的故事跳至2016年的2月,迎来了ture end——“the silent sky”。个人认为这个ED处理方式堪比SG真结局的倒带处理。

(PS:以上音乐均能在黄易云音乐上找到,《silent wind bell》在B站还有翻唱,推荐去听一听三无版本的,av3131345)



游戏系统

本作采用“妄想开关”系统,在特定情节会触发妄想选项,选择蓝色或者是红色妄想。蓝色的妄想一般是福利向,比较有♂意♂思。红色的妄想一般是猎奇向的,比较惊悚。一周目强制进入“over sky end”,在二周目会根据选择的妄想进入4条个人线,四条个人线均体验过后才可进入TE,如此一来控制剧本的难度大大降低。这个系统还是很有意思的,许多妄想脑洞大开,有许多neta,比如有个妄想的星战梗,还有个妄想是neta了ACG界的无脑后宫番。在整个游戏黑暗压抑的氛围中,有趣的妄想无疑令玩家紧张的心得到了一定的放松。总体来说,“妄想分支”系统还是有亮点的。

作画

通关后总体感觉就是CG严重不足,部分重要场景全靠脑补,体验特别的差,其中有张CG由于重复利用,甚至与剧情冲突,你当玩家都是瞎子啊。最令我无语的是TE的最后一张CG竟然崩了……简直有一种喂屎的感觉,在重要的场景出现作画崩坏,实在是太不应该啊,本应做的更好的……好在CG和立绘的质量还是比较高的。虽然本作被评为R18级,但总感觉某些猎奇场景还是遮遮掩掩的,与CH相比狂气大降。(不要误会,CC是由于血腥才被评为R18的,并没有HSCENE,5PB是从来不涉黄的,顶多有点擦边球)。立绘还有动态效果,如张嘴和眨眼,这点比SG0好多了。立绘值得吐槽的是人物的脖子画的太细了,尤其是乃乃的脖子,让我每次看到都很不爽……总而言之,在作画方面CC的确有失水准,个人感觉应该可以做的更好的,比较遗憾。

6.世界观与设定


本作依旧沿用CH的世界观与相关设定,并且在游戏中只是稍加解释,因此造成了玩家的游戏难度大大增加。在熟知CH设定的玩家眼中,CC是科幻,而在对CH设定认知不强的玩家心中,CC则是“超能力大战”,这点就仁者见仁智者见智了。当然,不了解设定也几乎不影响体验,毕竟该作本身就是重剧情,轻设定的;熟知CH的话就能理解只有CH玩家才知道的“梗”。即便如此,建议对CH了解不多的玩家了解一下“妄想具现”、“Di-sword”、“妄想干涉”、“giga-lo-maniacs”、“real boot”、“Noha2”等重要设定,对游戏设定有一个最基本的了解,以便获得更好的体验。

整体而言,本作明显有明显“致敬”CH的几个地方

  • 本作男主-宫代拓留与CH男主-西条拓巳的昵称都是“taku”;
  • 留与世莉架的关系——将军和拓巳(或者是拓巳与将军,两种说法都没有错);
  • 第三起事件《回转DEAD》现场昏迷的雛絵,以及她奇特的打招呼方式——CH中处于现场的深梨及其招牌口癖;
  • CH一周目结局是“silent sky”,CC真结局是“silent sky end”
    ……等等

剧情概述

CC的剧情其实很简单,用以下几张游戏截图就能概括


嗯,简单来说就是一部温♂馨♂和♂蟹的校园后宫漫。那么问题来了,拓留王子究竟会选择哪一个公主作为人生伴侣,并拯救Gigaloman行星呢?敬请期待年度无脑后宫番——LOVE;CHILD~
(不管你信不信,我反正是信了XD)
本作的剧作家有多个,其中主线及ture end为梅原英司执笔。稍微百度了一下,这个编剧一直是做动画的,基本上没有做过ADV游戏,对这个人了解的真不多,但由CC可以看出此人的深厚功底。风格迥异,各具特色的四条个人路线由林直孝等5PB四个剧作家执笔,比较遗憾的是打越没有参加(一直将其看作原KID最杰出的编剧)。强大的剧作班底保证了高质量的剧情。由于是猎奇向的,为了渲染气氛游戏使用了大量重复,短句,散句,略显拖沓。本作文本量约为3MB,是石头门的1.5倍,算是长篇大作了。

一周目由第一场事件《别看这边》开场,同时埋下伏笔,并简略的提及第二起事件《漏音tan》,让玩家在开场便体验到了惊悚的猎奇事件。之后,视角转入主角这边,主角逐渐开始调查猎奇杀人事件,并在第三起事件《回转DEAD》时卷入现场,一个接一个主要角色渐渐出现。随着第四期事件《死亡致谢》出现,疑似凶手的“南泽泉理”这个谜一般的人物登场,故事加速发展,主角也逐渐发现了事件的关联——死者均为超能力者,这几次事件均为模仿六年前的“新世纪疯狂”而发生,具有超能力的主角一行人也有被袭击的危险。然而,“南泽泉理”这个人却在第五起事件《烤肉已经准备好了》中死亡,事件仿佛已经完全结束。正在主角松了口气之时,“南泽泉理”被发现也是真凶手下的亡魂,这场死亡GAME仍未结束……随着第六起事件“非实在青少女”的发生,事态急剧加速。在血与泪之后,等待着宫代拓留的是残酷的真相……


(未完待续……)
(最后吐槽一下,垃圾为之根本不支持增量同步,这也太蠢了,我修改一个字就把整个文章上传一遍,幸亏老子是VIP用户)
2016/2/12
感觉一个一个写人物分析太水了,自己也容易写不下去,这次只分析本作中的三个(或者说四个?)主要人物:宫代拓留、尾上世莉架、来栖乃乃。
注:本节含有大量剧透,会导致玩游戏或者看本作改编的动画时丧失90%的兴趣,慎入。

人物分析

前几篇也写过,本作一周目强制进入“OVER SKY END”,二周目根据“妄想扳机”系统分别进入四条个人线,均通过后会获得一个名字叫做“OK”的奖杯,从而进入Ture End。


为便于分析,只根据距离主线较为接近的“OVER SKY END”、“SLIENT SKY END”、“REAL SKY END”分析。
CC的故事,本质上主角只有宫代拓留和来栖乃乃。而且,CC是少见的主角群集体具有多面性的作品。

宫代拓留


本作男主,玩家视角的承载者,故事的核心。比起科学ADV系列其他男主,宫代拓留无疑是最复杂的一个,而这个复杂,主要体现在他的矛盾,或者说是“乱”之上。宫代拓留的“乱”体现在他的行动与心理上,令玩家琢磨不透,感觉“主角怎么这么奇怪”,甚至是感觉到窝囊,不可理喻。宫代拓留的在许多方面表现着自我矛盾之处。例如:

  • 自称“现充”却在房间中藏着“如何令女孩喜欢”、“从第一次约会到H”等过气杂志,交际困难,在陌生人面前连话都说地结结巴巴,朋友寥寥无几,根本不是“リア充”。
  • 自称“情报强者”(本作关键词),以成为“情强”而自傲,却在故事之中始终处于“情报弱者”的地位,直至最后才得知一切真像。对同班同学这群“情弱”从内心看不起,却又在内心深处渴望融入其中。
  • 由于父母的“放养式教育”对父母极其憎恶,却用父母的名字组合来命名士力架。
  • 一边对于猎奇杀人事件极度恐惧,一边却不停的查找真相。甚至在危机到来之时放弃抵抗听天由命侥幸逃生之后,仍然如同好了伤疤忘了痛一般去调查事件(作死)。堪称“作死小能手”。
  • 极度重视家人,甚至将家庭视作自己的全部,却因为乃乃的善意的欺骗而离家出走,始终与其有着隔阂。
  • 妹妹结衣死后坚定了追查真凶的心,在乃乃死后遗言劝说下放弃了追查案件(逃避),最终又勇敢的上前承担一切。

从以上几点来看,宫代拓留可以说是非常令玩家疑惑的一个角色,许多行为无从解释,包括我,也感受到了宫代拓留的矛盾之处。是多个编剧所造成的失败?还是角色塑造的混乱?
在游戏整个流程结束之后,我感觉可以说一些自己的看法。
首先需要明确下观点:
宫代拓留不是正常人。
每个人小时候经历的成长过程会在他的成长中留下痕迹。而对宫代拓留来说,他的小时候完全称不上幸福。游戏一周目里有相当一部分的大部分回忆都可以清晰地表明,他在小时候几乎没有接受到父母的关爱和教育,而由此,导致了他一系列的行为缺陷:在学校,想插进同学的话题,却被完全不被认可。虽然他在那个时候给出的忠告并没有错,但是他在那个时候的行为说白了完全就是ky,而他自己也不知道这么做是不对的(顺带一提我也干过类似的事- -)。在其他孩子眼里,宫代拓留完全就是一个奇怪的家伙,而他对这点也有明显的认知。但是,由于父母对他基本不管,他从父母那里无法得到任何的解答和教导,那么对于没有形成正确价值观的孩子来说,就会很简单的得出这么样的一个错误的结论:我没有错,是你们的错。在这个基础上,他的行为在没人纠正的情况下,必然会越来越脱离常人。
而另一方面,他又不断的以这种扭曲的方式寻求着其他人的认同,但是没有人会对他表示认同和接纳。父母不理睬他,而同学拒绝承认他,那么他的做法是什么?创造一个无条件认同自己的人。就这样,尾上世莉架这个概念在他的心中应运而生。(他在心里创造世莉架还是基于逃避现实这一心理因素,他“认为”有人能够接受他所做的事情,而“情报强者”这个自称也是同理)
那么,妄想朋友世莉架在他小时候的作用就已经明确了:代替父母和同学,来给他这些人给不了他的感情。而宫代拓留在有了这个妄想朋友作为后盾之后,行为开始变得肆无忌惮起来(因为“有人”对他的行为表示认可),甚至于大胆的去潜入医院的地下研究室。而他这一系列不正常的行为只能让父母和同学对他产生更加强烈的厌恶感,只会更加地疏离他。最后甚至于父母带着他进行了精神方面的检查。而这种行为,只能让本来受到父母冷漠对待的宫代拓留对父母产生更强烈的拒绝和疏远感,相对的,他对脑海中世莉架这个存在则会产生更进一步的依赖和信任感,对世莉架越发重视,同样也会投入更多的感情(随着世莉架在他脑海里的一步步的确立,世莉架也在逐渐的由他的妄想朋友转化为第二人格,这部分来自一周目第十章久野里澪对宫代拓留症状的分析)。
而对“世莉架”这个存在来说,每当宫代拓留产生逃避现实的想法时,她就会对他那些不正常的想法予以肯定,因此宫代拓留脑中的“世莉架”,在彻底成为他的第二人格的同时,也一并接受了他的那些不正常不合理的想法。在他的印象里,世莉架是这样的:
世莉架的话.一定会理解我…一直肯定我…任何时候都是我的同伴!
而宫代拓留那些不合理的想法,在被世莉架所肯定之后,就会越发坚信自己的正确性。在地震来临时,有相当程度的心理描写。地震时候的宫代拓留处在更加极端的状态之中。他仍旧正常、想要亲近大家的部分,和他一直以来认为“自己是情报强者、自己才是正确”的部分交织在一起让他无法行动,只能从“自己被正常人所排斥”这个现实中逃离。地震的悲惨状况,同龄人看着怪物一样的眼神,再加上最后在医院前自己父母作出的举动,成了压垮他心理防线的最后一根稻草。在这极端的环境下,他选择再一次向世莉架求助。当宫代拓留发觉自己和其他人相比不正常的时候,世莉架都会去肯定他。也就是说,世莉架肯定他的部分,完全就是他不正常的那部分。那么,对这个时候正式诞生的世莉架而言,由于宫代拓留小时候的不良影响,她会自然而然的去把宫代拓留之前那些需要她肯定的不正常的思维当成正常的思路(这就是世莉架对正常人的思维方式感到无法理解的原因)她的价值观就是宫代拓留小时候一样扭曲不正常的那部分价值观,而没有继承他正常的部分,一周目最后和久野里的电话也是“世莉架是和常人认识完全不同的精神病“的一个旁证。

整个事件的起因和宫代拓留地震后的心态分析:

地震之后的宫代拓留因为realboot出尾上世莉架的原因,昏迷了一年多。而在他醒来之后,在他身边的不是尾上世莉架,而是来栖乃乃这个自称“是他的家人”的人。当然,因为过去父母对他的做法,他一开始仍旧对乃乃极为排斥;但是乃乃却是真正的用对家人态度来对待他,慢慢的打开了他封闭的内心。同时乃乃的行为也在逐渐对他的心理产生影响。对宫代拓留来说,他确实得到了家人的爱,然而另一方面,由于父母过去对他所做的一切,他又对家人有所惧怕,他在意的不是家人对他的欺骗这个行为,而是害怕这些新的家人和他的父母一样对他弃之不顾,所以他经常会去做一些像孩子一样的行为,表面上是对家人的欺骗表示愤怒,实际上就相当于对对方说“你千万不要不管我”(其实就是个傲娇)。比如他从乃乃那里听到自己父母是被杀之后愤然离家出走(原本大家告诉他他的父母是在地震中事故死亡);比如他在得知乃乃身份之后的一系列举动,都很明显的表现出他那种偏执幼稚的心理。

现在让我们把目标重新转回世莉架身上。之前我说过了,世莉架对宫代拓留而言,是他在遭受外界压力时他的逃避之处,也就是说,他创造世莉架的目的是“使自己从现实压力中得以暂时解放出来”。之前也提到了,因为乃乃对他父母死因的隐瞒宫代拓留离家出走(实际上他希望乃乃能够追着他而不是抛弃他),所以宫代拓留必然会因为这种事产生心理压力。一方面他自己在试图排解,另一方面,这个时候的世莉架会怎么做呢?之前我们也提到了,现在的世莉架由于接受了那些不正常的想法思考方式,那么世莉架也就只能按照这种不正常的思路去“实现宫代拓留的愿望”。至此,才是世莉架开始谋划事件的真正动机。

在一周目的剧情上,我在此以“杯田理子袭击宫代拓留和有村雏绘”为一周目分割线,来分析整个游戏。一周目前半段的剧情,就如同宫代拓留这个人一样极其割裂。一面是诡异恐怖的猎奇杀人事件,另一面,则是家庭和学校里温馨快乐的日常生活。在这么一个矛盾的剧情当中,同时身处两种环境中的主角,在两个完全不同的方向上摇摆不定。一方面,他想要作为情报强者揭开事件,扬名立万;另一方面,他渴望家庭,渴望朋友,想要被人接受,想要被人认可。既对身边的同学轻蔑否认,又在受到感谢鼓励时心头感到快乐。即使第四事件发生在他们面前彻底打破了他们生活的平静,他那种矛盾心理仍然表露无遗。还记得第四事件刚结束他们去警局取证之前的话么?

宫代拓留:“文化祭什么的,怎么样都无所谓了……”
有村雏绘:“那句话,是谎话呢。”

而在第四事件之后回到青叶寮,当初在学校接到自己已经丢失的手机打来的电话,再加上和乃乃对话时由于自己的恐惧产生的消极妄想,再加上我之前说过的宫代拓留对家人的重视,促使他在“保护家人”这个想法下进一步的采取行动前往医院地下(乃乃当时阻止的原因现在看来是一目了然)。后面的剧情一方面为南泽泉理作铺垫,另一方面展示了游戏的设定和世界观。在一周目最后的剧情处有一个小插曲:宫代拓留做过一个乱七八糟的梦。在梦里,他那种“想要被认同”的心态完全的展露无遗(在梦中能力成功使用,获得大家的称赞,久野里都说要让他帮忙。)。这个梦即是“他想要被大家接受和认可”的一个具体体现。

一周目的前半部分,到这里基本告一段落。通过这部分对宫代拓留的刻画,我们可以很明显的对宫代拓留的性格有一个初步的了解(确实是初步的了解(笑))。而接下来的后半部分,才是真正的重头戏。后半部分的剧情发展,基本上和个人线的进展如出一辙。

首先,他们之前对案件做过明确的分析:

  • 案件的现场必然会有力士贴纸出现;
  • 案件的受害者都是能力者。

在这两个条件下,身为能力者的宫代拓留在看到大量的真力士贴纸之后,被吓得屁滚尿流,认为自己可能已经被凶手盯上了,在涉谷的大街上到处乱跑,之后经历了碰到有村、被杯田理子袭击、逃回青叶寮疗伤这一系列事件。在这些事件的连续打击下,心理压力的积累是必然的。而在有村和乃乃加入讨论案件之后,又有了一大段的日常,主要包括“绝对空域”那部分的妄想情节,还有在青叶寮里的家庭聚餐。这场家庭聚餐的提出者是乃乃(泉理),而家庭聚餐时有一个非常强烈的内心活动描写,那段话很明显的表现出宫代拓留当时有“自己正在逃避现实”这一自觉性。(这里逃避现实的不仅仅是宫代拓留,另一个人是发起这场家庭聚餐的南泽泉理。当时所有人的怀疑目标都指向了“南泽泉理”这个人,而南泽泉理此时又无法出面指出“凶手不是自己”,这时南泽泉理必然会积累同样的心理压力)也就是是,这场家庭聚餐不仅仅是一个日常的插入,事实上是和个人线如出一辙的”逃避现实的行为“。

而之后急转直下的第五和第六事件,第四事件之后,宫代拓留由于“事件可能会让自己变成受害者“这个原因,有了那种逃避现实的想法;而第五事件起初的推测又让宫代拓留彻底放松了下来,而尾上世莉架为了”让宫代拓留继续推测,在第六事件上选择了橘结衣,而这一行为给宫代拓留的压力,使得他不得不继续进行案件的追查。在和有村讨论过”要怀疑所有人“之后,已经到了确认凶手的时刻,而宫代拓留还在无意识地逃避现实(游戏里,他想找的是“三人不是凶手的证据”而不是“谁是凶手的证据”)
在11月4日那天,乃乃的死让宫代拓留在醒来后近乎发疯般的开始逃避现实(借口结人和山添还在青叶寮想要跑回去,跑不动之后被两个大学生殴打时直接表示自己想死),而在他读了乃乃的信之后,他彻底放弃了面对现实,只是一心想着不再追查事件(典型的逃避行为)。但是在听完世莉架在百濑事务所的交待、以及经历久野里和有村的分析之后,他的内心又产生了矛盾。一方面他想用乃乃的话当做幌子逃开一切,而另一方面听了有村和久野里的分析又在思考世莉架的真正动机。而最终促使他面对真相的饵,还是世莉架抛出的那个“我杀了你的父母”那个信息。一方面,之前有村和久野里在它面前分析过,世莉架说的是经过思考诱导的假话;另一方面,世莉架的这个信息给了宫代拓留一个抛开之前积累的心理压力的契机,让他行动起来。(仔细想想这个钩真是好使,毕竟“自己的事”谁都会去想知道)。 佐久间在决战的时候,对宫代拓留施加了强力的思考诱导,让他一遍又一遍经历天台上乃乃被杀的场景,而宫代拓留则再一次由于心理压力把自己埋进了“壳”里,佐久间则在此基础上屏蔽了他的所有感官。在这样一个世界里,他开始用各种各样的方式刺激自己,比如数数,妄想,但是他最终还是开始在感官缺失的世界里寻求解脱(仍旧是逃避现实的表现)。而这个时候,在他的妄想里,乃乃刺了他一刀,而他真正的感觉到疼的时候又不想死了(之前的引子里我也说过,人会因为压力而做出各种不合逻辑的选择,而在这里则表现为:明明想更好的活下去,嘴上偏偏说的是想死。为什么?因为他急于从那个让他发狂的世界中解脱出来。)。他在五感屏蔽时候所处的内心世界,在某种程度上

世莉架这个原本为了给予宫代拓留内心拯救的妄想存在,反而彻底毁灭了宫代拓留的生活。

最后的最后,再加一段地震时宫代拓留的心理描写,来自贴吧@sabercom的翻译,权当参考。在这段心理描写中,可以轻易的看出宫代拓留小时候逃避现实的心态,极为不正常的思维方式,以及对世莉架的影响。

拓留:可….恶…..!
开骂的同时.为了不让背后的世莉架掉下去我往腹部使劲总算是站了起来.
我不能倒在这里
离目的地的代代木AH东京综合医院还有一段路
…..没事的.一定会到那里的
我和世莉架不是那种会死在这种地方的人
少年:喂,快来这里!
拓留:(恩….?)
抬头看去,那里似乎以前是家什么商店,有一群人在那里
能听到呼叫救援的声音以及从损坏了的自动贩卖机处拿水过来报告的声音
似乎是个应急避难所
拓留:(….要过去看看吗?)
喉咙干燥.我需要水
…..不.不行不行
不能搞错了优先顺序.我很清楚这点
虽然身上有无数的擦伤割伤.但我没有什么致命的伤口
这种情况下的优先顺序,比起水和事物应该尽快去安全的地方
曾几何时在网上学到的知识
而且,世莉架的情况还不明了.必须要让拥有专业知识的人看看才行
现在的涩谷到底发生了什么我还不清楚.果然去代代木AH东京综合医院应该才是正确的
拓留:(没错.比起停留在这里的情报弱者们.身为情报强者的我才更正确….!)
我无视他们,经过避难所
为了忍受住口渴.用舌头舔着上颚犬歯促使唾液的分泌
这也是我所学到的知识.我和其他不懂事的家伙不同
少年:这样就可以吗?
少年:好.按住这里
拓留:…..?
突然我感受到了违和感
避难所传来的声音.感觉在哪里听到过
拓留:啊…..
仔细一看,他们是我和我一个年级的学生
虽然我几乎不怎么去学校.但聚在那里有些人的脸庞,感觉曾经见过
…….一个成年女人倒在那里,被他们围在中心
腹部和头部都在流血
突然,心脏的鼓动
脚步蹒跚差点摔倒的时候我勉强撑住了
拓留:…..为什么
和我一个年级的学生们似乎想要救那个女人
不顾自己的手中被染上的鲜血.他们一个个轮流为那个女人按住伤口
为什么啊
为什么在做这种事啊
平时,说着一些蠢话.完全听不进我说话的你们
为什么没有慌张的大喊大叫啊
你们什么都不懂吧?优先顺序,上颚犬歯之类的
为什么不惨叫着到处逃窜
为什么能保持冷静行动呢
你们平时只是混着过日子的吧.连网络都不会好好利用.只能获得一些低质量的情报—–
少年:宫代…..?是宫代吗?!
认出我的一个人突然向我走来
突然对我说,有水吗,你没事吧,来帮忙.每个提问都不等我回复喋喋不休的说着
虽然脸有映象不过我不知道他的名字
不对,为什么他知道我的名字
为什么在这种情况下还能做这种事
拓留:…..为什.么
我不知道自己该问些什么
少年:这是理所当然的吧.难道要我们见死不救吗!
他是怎么理解我刚才说的话的呢.突然他对我大声叫到
然后拉着我的手对我说道,行了快来
等.等等
女人受伤了必须要救她
不行,我必须去AH东京综合医院.我一路走来也有大量的伤者
没错.这里很危险.确保安全的地方才是优先顺序里最首要的.
不管他怎么拉我,我也一动不动
为什么不动?害怕?当然害怕.应该去救受伤的人
就像他们所做的那样.等等.我和他们不一样吧?我是情报强者
不对,他们没有做错.应该救女人的
但我的身体一动不动
拓留:……..我
——–我该怎么做才好?
少年:…..够了.你真是差劲啊.你走吧
抛下抓住我的手臂.他说完后
想着同伴那里走去.又开始交替为那女人按住伤口
刚才拉住我手臂的人对那里所有的人说了些什么.瞬间全朝我看来
不对,是瞧不起我
做着该做的事的他们的眼神似乎在对我诉说”我可不想变成那种人”
拓留:……….!
回过神来的时候,我跑了起来
并不是因为必须要快点去医院这份想法
而是想要尽快离开那里
我不记得自己是跑去哪里了
每当倒在路边的人向我求助的时候.我便跑的更快改变方向.为了不看到这些我闭上眼睛,为了不去听到任何声音我捂住耳朵
拓留:………
….为什么.我要逃呢
我是情报强者.并且那些家伙在学校的时候聊一些无聊的情报的时候,我却不被迷惑
被他们看不起,按道理来说应该我看不起他们才对
拓留:是的….是啊
我比他们知道的更多
要不我现在马上回去给他们指挥下吧.伤口的处理方法正确吗?处理顺序这样可以吗?
我的话肯定能正确的判断

第二部分,是在医院前见到父母时宫代拓留的反应。

拓留妈妈:….拓留?
拓留:….!
拓留爸爸:你怎么在这….
突然,父母出现了.
那确实是…在避难所偶然碰到的时候的影像.
父母很兴奋的说着什么.
然后抓住我的胳膊—–我却甩开了他们.
拓留妈妈:….拓留?怎么了!?这种还要让我们困扰!能得救了哦!
拓留:我..能得救吗?
拓留妈妈:.行了,快来!
拓留:……..
那个时候的我.只是盯着父母的脸庞.
我记得我当时想过…..”我能得救吗?”
并且—-只在这个时候露出父母相.
拓留:目前抓住我的胳膊.我再次用力甩掉.
能得救..我吗?为什么?
曾经对我放弃教育的人要救我..?这种事怎么可能?
这么想着的瞬间.
拓留:.啊啊!
那个时候的我看起来像是抱着头.
指甲掐入头皮.
即使如此那份头疼依然不停止.抱着头的同时.我在心中呐喊.
“不是.不是这样的!”
“你们这样的人要救我吗?”
就连我生日,作为晚饭钱放了1000円的你们?
别开玩笑了!
我不是那种.想要被把我当成累赘的父母所救的人.
拓留妈妈:…!…………!
母亲叫着什么.
不管是以前的我还是现在我,当时母亲说了什么我都没听到.
好烦!
你们把我当成累赘的吧!?
我觉得你们才是累赘啊!
我能做什么?
我想做什么?
我为什么在这——-
拓留:.啊啊!
对了.世莉架呢?!
那个时候的我,为了救世莉架,把她背到了避难所.
由于头痛.已经感受不到背后世莉架的体重了.
但是,我做了自己该做的事.她能得救了.
世莉架的话.一定会理解我….
一直肯定我…
任何时候都是我的同伴.!

注:本文含有大量剧透,看过之后玩游戏或观看改编的动漫会丧失90%的乐趣,慎重,慎重啊
(PS:CC会在今年动画化)

尾上士力架篇

原本这一篇还是要分析宫代拓留的,但不得不说宫代拓留这个形象还是比较复杂的。在网上也和别的玩家讨论过,玩家们的理解大相径庭。为了避免过度解读,有失偏颇,暂且先将世莉架分析篇写了。对于宫代拓留的分析择日再补上。当然,如我前面所说,CC本质上是拓留和乃乃两个人的故事,分析士力架在一定程度上也是分析拓留。


其实我在游戏开始之前便对这个角色有一种莫名的好感,至于原因我想大概是因为奇葩的名字吧。(饿了吗?饿了别叫妈,饿了就吃世莉架!本萌新还是很喜欢士力架这种零食的,在学校也经常忍不住买上一些,虽然明知道对牙齿不好还是忍不住www。

世莉架如果按属性划分的话是天然呆(表人格)、狂气型(里人格)。游戏初期的士力架给人一种石头门里真有里的感觉,陪伴在拓留的身边装傻卖萌(恶意卖萌),尤其是士力架的口癖“OKay”(ohgay)简直和“嘟嘟噜~”一般有毒,立绘也不时地眨眼也萌度爆表。天真烂漫的模样让很容易让玩家心生好感。即便我不是萌豚我也要大喊:“士力架太萌了!!!”

然而到了中期玩家便感到了异样:为何士力架总是陪伴着男主作死?为何在危机时刻士力架总能化险为夷?为何士力架总是这么机智,被玩家吐槽为“神队友”?

士力架的行为与乃乃相反。士力架希望拓留继续参加这场游戏,而乃乃则是希望拓留能够脱离事件,“稍微像一个正常的高中生”。两人的对比如此强烈,士力架究竟要做什么?

第六起事件《非实在青少女》发生后,围绕在士力架身上的谜底逐渐被揭开。第十章的标题是《她的思绪》,副标题则是直接显示为《Serika Onoe》。本章中,乃乃通过第一起事件的视频中的细节发现了凶手为士力架,并于天台与士力架战斗,被士力架的Disword斩腰而死,士力架在这之后逃窜。(心疼乃乃T_T)



那么,士力架为何要参与New Gene猎奇杀人事件呢?镜头转至拓留那边,经过久野里澪的调查,士力架在6年前竟然毫无信息,宛如凭空出现一般。拓留的精神病史也浮出水面——相信到这里玩过CH的玩家已经想到了,拓留和士力架如同将军与西条一般。在6年前Noah2被毁灭之时出现的白光得知了拓留的愿望——“尾上,求求你,让我有喜欢做的事”,从而将拓留的Imagine Friend——尾上世莉架妄想具现。士力架为了实现他的愿望,“有真正喜欢做的事”而策划并实施了新世纪New Gene猎奇杀人事件,让拓留有“真正想要做的事”,并在调查这个案件,获取情报的过程中获得快乐。

相信许多玩家和我一样都搞不懂:拓留真正想做的事到底是什么?就如同拓留本身的混乱一般,这个答案我也拿不准。
拓留在6年前看到了西条拓巳,也就是前作CH的男主角经历整个New Gene事件,并从人们眼中的杀人犯到英雄的转变,从而憧憬西条。拓留曾经的愿望也是如此——成为像西条那样的情报强者。而世莉架眼中拓留的愿望也是如此,从而neta前作的事件发起了新一代的New Gene事件,并引导拓留从调查——牵涉进来——成为可能的受害者,一步一步越陷越深,并在拓留想要脱离事件的时候再拉他一把。例如在乃乃劝说拓留放弃调查时取走他的手机;在他想要脱离之时实施《非实在青少女》事件刺激他的精神。世莉架计划的最后一步则是作为事件的凶手向警方自首,从而仿照6年前的事件让拓留从事件的凶手成为解决事件的英雄。如此一来,拓留向她的许愿便能实现,“她”的使命便能实现。

然而,以上的真的是拓留的愿望么?就我个人的理解,拓留所希望的,是“承认”与“爱”。妄想出士力架,并且将她设定为比自己年纪小,依靠自己的妹妹形象,是想获得他人对自己的依靠和重视,从而得到“承认”。“尾上世莉架”这个名字由父母的罗马音组成,正代表了他对于亲情,或者说“爱”的渴望。希望成为西条那样的情报强者,则是渴望得到社会的“承认”。调查新一代New Gene,同样也是渴望获得他人的“承认”。
当然,也有玩家有不同的见解,认为拓留所渴望的,仅仅是“情报”本身,这点我是不认同的。所谓“一千个人心中有一千个哈姆莱特”。

是的,世莉架对于拓留的愿望理解的太片面了——或者说,世莉架本身就是一个扭曲的存在。将军在妄想西条的时候给西条种种设定,最终还是由于意外妄想出了一个废物死宅,差点功亏一篑。将军身为最强的能力者尚且如此,拓留一个半吊子就更不用说了,世莉架恐怕就是一个心怀着扭曲目标的人偶而已。就如同拓留所言,“士力架是「那边」的人,不是「这边」的人”。


苦逼的一家人,都是影帝和影后

在一周目结局时候得知真像的拓留发言则让人心酸——“原来,一切都是我的错”。是啊,对于拓留来说来之不易的家庭就如同玻璃一般轻易的破碎,自己尊敬的父亲,自己一直认为的青梅竹马,都是在欺骗自己,最好的基友精神崩溃,自己的妹妹被残忍的分尸,自己的姐姐也被最深爱的女人杀死,地震后好不容易重建的五个人的家庭只剩下两个人相互依偎,而造成这一切的却是自己。

一周目结局之时,拓留拼尽全力对世莉架进行重构,希望让她成为一个「正常的女孩」,认为「这是对她唯一的补偿」。而世莉架却在此时崩溃,认为拓留在破坏她存在的「意义」。从Over Sky End结局上来看,最终拓留的努力恐怕付之东流:世莉架最终还是没有忘记一切,杀死警察后带走了仍在昏迷的拓留(重塑士力架时能力使用过度昏迷)。虽说有部分玩家认为这是一个Happy End,但我还是感觉这是一个看似是Happy End的Bad End。

拓留使用Disword重塑士力架


一周目结局CG
TE-《这才是她真正的生活方式》
TE看似是一周目的后续,然而却完全不是。首先乃乃在与士力架的战斗中没有死亡,其次拓留重塑士力架成功,士力架记忆被封印,过着正常女孩的生活。(变成了表里如一的萌妹)

TE以士力架这个“圈外人”为视角,为玩家展示了“CHAOS;CHILD症候群”与“CHAOS WORLD”的真相,这方面我就不剧透了。最令玩家惊讶的莫过于宫代拓留的成长,他不再迷茫,不再逃避,选择为世莉架背负了一切,玩家所期望的的恢复记忆这样喜闻乐见的事情终究没有发生。世莉架不知不觉间走到了一周目结局时的“魔方剧院”,在观看喜剧的观众大笑之时,模糊回忆起了拓留,留下了寂寞的眼泪,“silent wind bell”响起。就这样,故事迎来了平淡的真结局。







世莉架观看的喜剧有一句歌词是「来这边吧,来这边吧」,代表世莉架已经成为「这边」的人(即正常人)

故事结局之时,拓留作为新一代New Gene犯人,在警察的陪伴下前往看守所,在路上遇到了世莉架。世莉架不受控制地默默的流下眼泪,她新结交的朋友问她与拓留彼此之间是否认识,世莉架急忙擦干眼睛回答不认识(世莉架认为他拓留是杀人狂,对拓留很排斥)。拓留笑着流下了眼泪,并默默地说「恩……我也不认识妳了呢」。



这么重要的CG尼玛竟然崩了

晴朗天空下的诀别,溶解于幸福之中的悲伤与羁绊,二人回首走向各自道路的刹那,终能放下扭曲的依存与执念,各自放飞对方的未来。暴雨终歇,初晴时静默的风铃得以回荡二人坦然的“幸福”的祝愿。纵使告别,若知你在阳光下的世界欢笑,前路只身一人,却也不再孤单。

尾声

这应该是CC通关感言的最后一篇了,要说写这些东西有何意义呢?从利益角度来看恐怕是毫无意义吧,耗费了时间与精力,用自己拙劣的文笔写一些毫无卵用的长篇大论。不过这个世界上不是每一件事情都需要有“意义”的,我在写这些与读后感类似的文章之时也感受到了快乐,只因我喜欢这部优秀的作品,我想把自己收获的感动记录下来,仅此而已。这几篇感言也仅仅是我自娱自乐的产物,不写给任何人,仅仅写给自己。至于为何依旧发布到观海,或许带着一些安利的性质吧(笑)。

另外吐槽一下,根据志仓老贼的推特,CC今年恐怕是动画化无望了(志仓7月搞B-PROJECT,10月时O;N动画化,恐怕CC的档期要排到明年了,这还是SG0不插队的前提下)。不过即便如此,在正文之前依旧友情提醒,本文涉及大量剧透,还请慎入。
在最后的篇章里,主要是对与个人路线的简评和对于一些有意思问题的探讨:

个人路线简评:

整体来说,这次的个人线质量还是很高的,只有香月线与主线偏离太大,或者说是不太用心。上网查了下香月线的编剧竟然是林直孝先生,林先生的水平这次真是低的不行→_→,果然是网友所说的不给主笔就乱写么。不过从去年的可塑性记忆和SG0就可以看出,林先生如今水平的确有所下降。

个人线按照我的喜欢程度,应该是有村线≧山添线>乃乃线>香月线。每条路线都极具编剧的个人色彩,类似于DLC,从另一个角度对于主线进行补充,并丰富角色形象,这里就不再多说了。香月线感觉和《428,被封印的涉谷》有些相似,山添线和《盗梦空间》和《黑客帝国》中有些设定比较像。

由于科学ADV世界观的统一,在本作中世界线的设定依旧成立,因此不少玩家对于主线与个人线的关系进行了讨论,不过我感觉也没必要想的那么多,当成是普通GAL中出现的分支路线即可。(毕竟设定毁一生)

“呐,学长,这就是我期待的……充满真实的世界”

Dark sky end
“这一切,是梦境还是现实?我是蝴蝶,抑或蝴蝶是我?”

Dream sky end
“前辈,我们……被委员会认定为【世界之敌】……大概……”

Deep sky end
“泉里……欢迎回家”

Real sky end

对CC中一些问题的思考:

CC中对于“情强”,“情弱”持怎样的态度?

“情强”作为关键词,贯穿整部作品,更是一切悲剧的开端。事实上“情强”这个词并不是日语中的流行词,“情强”的翻译词“情弱”倒是日本论坛中的流行词,在中文中倒是很少使用它,算是舶来词吧。“情弱”是“情报弱者”的简写,在某种层面上和贴吧上流行的“致远星战况如何?”、“大清亡了?(天朝亡了?)”、“你火星了”差不多,都是对于一些在网络时代获取信息能力不强,不会利用网络,易被虚假信息所欺骗的人的嘲讽。在2CH上还有另一种流行的用法“情弱乙”(获取情报的能力这么弱真是辛苦你了)”。在我个人看来,作者对于“情弱”和拓留式的“情强”是持有嘲讽态度的。

游戏中所嘲讽的情弱和拓留式的情强,就好比在金钱社会中的穷人和守财奴。虽然穷人几乎被等同于弱者,但守财奴就值得赞扬吗?归结其本质,两者都是金钱至上的受害者。

同样,游戏中的愚民们和拓留也是陷入情报束缚的两个典型例子。结尾拓留所甘愿成为的“情弱”是选择跳出情报束缚的体现。此“情弱”非彼情弱。自己觉得CC是为我们展现出了情报社会中的两类受害者。该用什么样的生活态度来对待情报才是正确的?这一问题的思考丢给玩家了。如果非要说立场的话,可能就是对陷入情报束缚的人们,CC是持否定态度吧。在CC中,“情弱”一方面用于嘲讽在2ch上被随随便便煽动情绪的网民,另一方面则是嘲讽处于上帝视角,却被一次又一次打脸的玩家。“力士贴纸”作为刻意煽动的群体意识在涉谷广泛传播,无知而好事的网民们犹如六年前那般再次陷入狂欢一般的局面,力士贴纸也和“その目は谁の目?”一样在网上和涉谷疯传,甚至连“力士神”这样的东西都能搞出来,并借由香月的能力具现化……如果说前几作中网络还是一个信息获取地的话,那么本作中网络无疑是一个垃圾桶。
这同样也引起了我的思考。在网络时代,信息变得如此之多,我们无时无刻不接受着庞大信息流的冲击,然而,我们能否在这信息的海洋中使用正确的方法,快捷,高效地获取自己所需的“正确”的信息,成为一名“情报强者”呢?网络上充斥着各种各样的虚假信息,论坛里,有水军,五毛,为了钱财散播虚假消息,为主子干活;新闻网站里,小便为了点击不惜颠倒黑白,煽风点火,空穴来风,四处引战;微信中,有各种“不转不是中国人”等各种脑残文章……虚假的信息无处不在,你不能躲过它们。如果功夫墙(G F W)内的虚假信息还只是为了个人利益,公司利益而生的话,墙外的虚假信息则更加复杂,这是意识形态与社会制度的对撞。一些白痴翻Q看到了lun子等故意诋毁TG的信息便感觉自己成了民主战士,却不知只是从一堵墙到了另一堵墙。我感觉,我们要在信息流面前有自己的判断,不人云亦云,才能不被情报所左右。

拓留式的情强也同样是本作所讽刺的对象。为了获取信息而不择手段,不惜以身试险,但却忘记了信息本身的意义。我感觉颇具讽刺的是在前几起事件中,拓留和好事的网民们(或者说,拓留本身就是热衷于NewGene事件的一员)为几起事件起了具有侮辱性的代称,在分析案件,调查真相时也同样以代称称呼这几起事件,但在第六起事件中自己妹妹被残忍杀害,却对在网上以“非实在青少女”事件调侃的网民大发雷霆。

TE的最后,久野里对他说,他以后很可能再也不能上网。然而他自己的内心却无比平静。久野里是这么说的

“置身于汹涌澎湃的情报海洋之中的你和面对风平浪静的海面的你,精神状态将会如何变化,我很期待。”

宫代拓留如此回答

“我们追寻情报,从中选出有价值的信息并作出行动。然而,做得太过的话,情报则从手段变成了目的(即本末倒置)。一直以来的我,只是被这名为情报的怪物吞噬了而已。”

我想这也是作者给我们的建议,如何在情报的漩涡中依然保持清醒,理性思考,不被情报所吞噬。

CHAOS;WORLD的分析:

剧透CH情况下的个人分析(不保证正确性):
6年前渋谷地震是由「ノアII」的最终实验「サードメルト」所造成的。「ノアII」是由「希テクノロジー」开发的装置,基于fun10×int40=Ir2这个拓巳创造的公式为核心原理制造而成,可以发射电磁波,以达到洗脑、思考盗撮、思考诱导甚至妄想具现化等目的的“人工ギガロマニアックス”。之所以会发生地震,是由于渋谷地下矿物资源丰富,与「ノアII」放射出的电磁波产生共振而引起的。所谓的「GEレート」(Gravitation Error rate)指的是局部的异常重力值,而「GEレート」较高的地点通常会打乱生物节律,因此在「GEレート」较高的地点使用「ノアII」进行妄想攻击是最有效率的,ニュージェネ事件就是在这些地点下发生的。

「ディラックの海」是负能量粒子海,「ディソード」则是用来干涉「ディラックの海」的终端。妄想具现化的简单流程就是:妄想(发射脑波)→ディソード→干涉ディラックの海→「ディソード」负能量的积蓄→以粒子形式传递到他人的「デッドスポット」(视觉死角)→リアルブート(妄想具现化)。

ギガロマニアックス在觉醒前要获得「ディソード」必须经过严重的心理崩坏,另外他们与常人的区别在于能利用占了人脑90%的未开发部分。多巴胺能影响人的情绪,反之,人在极度亢奋状态下也会影响多巴胺的分泌,长期的多巴胺严重分泌异常会影响人体衰老机制。大地震的发生容易让正常人(尤其是年纪小的)陷入极度亢奋状态,再加上高「GEレート」的促进下,「ノアII」发出的电磁波更容易和小孩极度亢奋状态下的脑波产生共振,这样会激发孩子们大脑的90%未开发部分,从而导致其大脑多巴胺严重分泌异常,孩子们强烈想要逃避的心理让他们的脑波趋于共振,也就是所谓的「妄想シンクロ」,于是形成“Chaos World”。在被动激发了90%未开发大脑的情况下处于更特殊情绪状态的孩子会进一步衍生出特殊脑波,于是在相同情绪下的时候他们能使用某种能力,例如追求真实时有测谎能力、想变成某人时有复制能力等,即次世代「ギガロマニアックス」。

CC症候群患者的妄想同步本质上是被动形成的,而当拓留完全觉醒「ギガロマニアックス」力量后,他在这个“Chaos World”中拥有最强的妄想干涉力,这种干涉力是主动性的。因此拓留可以摆脱“Chaos World”束缚自力脱离。“Chaos World”中妄想同步是相互影响的,个体间关系越密切影响越大。所以拓留脱离之后,与他关系密切的人会因为自己的妄想世界中缺少了拓留而产生妄想上的破绽,于是本能性的昏迷就可以缓解这种破绽了。另外,使用拓留痊愈后的脑波信息可以刺激患者们的大脑,破坏这种原本处于平衡的妄想同步。

扑朔迷离的“爱情”轨迹——他与她的关系该如何定位?

拓留和世莉架之间的关系我感觉和其他作品中那种比较纯粹的男女恋人关系不同,而是一种比较复杂,混合多重感情的爱。CC虽然主要角色均为萌妹(不是萌妹怎么骗死宅的钱),第一眼看上去感觉是温馨和谐的后宫番(糖里有屎,屎里有毒),其实恋爱的元素还是很少的。整部作品中出现的女性角色(除百濑大妈),乃乃和羽希与拓留之间的是亲情,香月和非有村线的有村与拓留之间的是友情,只有有村线的有村与拓留之间的才是相对“正统”的爱情。可以说,CC中的“恋爱”元素几乎没有,如果想看男女之间缠绵悱恻,跌宕起伏的爱情故事,那么CC一定不适合你。

而拓留与士力架的关系更为复杂。前面也提到,拓留与世莉架的关系类似于CH中的西条拓巳和将军(西条拓巳)。将军是西条的创造者,将其妄想具现化(real boot),同时也是他的引导者,在事件中引导西条,使其能力觉醒,甚至在最终在自己死亡后将记忆赠与西条,让西条成为一个真正的“人”。在CC中,拓留承担着“创造者”的责任,而“引导者”则由士力架担当。拓留对士力架的感情是随着故事的展开而不断变化的。在童年时期,缺少家人关爱,不受同学欢迎,不被他人所肯定,患有强烈癔症的拓留在脑内幻想出了士力架。通过这种方式,拓留创造了一个完全肯定自己的,需要自己保护的妹妹。2009年的涉谷崩坏事件发生之时,士力架借由拓留的能力和NoahⅡ妄想具现,由拓留的脑内小朋友成功升级为一个“人”,直到NewGene的发生。在这段时间里,拓留对于士力架的感情,更多的还是青梅竹马之间的朦胧的感情。天台事件发生后,拓留对于杀死乃乃的士力架更多的应该是一种纠结的心态:自己的青梅竹马是连环杀人事件的凶手,并且在自己面前杀死了自己的姐姐,爱恨交织在一起,恐怕这段时间之中最痛苦的莫过于拓留。在魔方剧院之中,拓留在与士力架Di-sword的激烈碰撞之中看到了士力架记忆的回溯,明白了士力架的真实身份。我想这时拓留就对士力架有着一种身为“创造者”的,类似于父亲的责任感。最终拓留拼尽全力,将士力架重塑,结束了她扭曲的生存方式,使世莉架成为一个正常的女孩。结尾之时拓留也彻底成熟起来了,为了士力架选择背负一切,保护好了他最喜欢的女孩。(最强背锅王)

将军身为最强的能力者,创造西条的时候也因为能力的局限创造出的是一个封闭自我,懦弱的死宅。经过后天的引导,西条才得以成长,逐渐成为一个正常的人。拓留这种半吊子能力者,借助NoahⅡ而创造出的世莉架同样是扭曲的存在,世莉架的世界观,仍然是拓留童年时扭曲的世界观;而拓留却在乃乃这种“家人”的存在下逐渐成长,幼时的世界观已被逐渐矫正。彼此世界观的差异,造成了两人的巨大矛盾。

拓留对于士力架的感情,我感觉用“依存”形容更加合适。这是一种比友情,比爱情更加高等的感情,有时甚至连性别,年龄,长相都不重要。在拓留极度需要爱,需要亲情与友情之时,是士力架的出现填补了他内心的空白,他被自己所妄想出的人所拯救;世莉架同样也依存于拓留,在Real Boot之时,她作为“让宫代拓留感到快乐”的意义已被确定,在实体化后自我意识逐渐产生,甚至产生“嫉妒”这种感情。两人彼此依存,不可分割。正因如此,我才为结局时拓留主动切断这层依存,给予世莉架自由而感到佩服。

下面的游戏原文,或许能解释拓留复杂的心态:

久野里澪:『彼女』の名前と年齢だ。何故、彼女は『尾上世莉架』だったんだ?年齢に意味はあったのか?(她的名字和年龄。为什么叫她尾上世莉架?年龄有什么意义吗?)

宫代拓留:……名前は、仆の両亲の名前をローマ字书きしたアナグラムでした(……名字是用我双亲名字的罗马字拼写的字谜游戏)

久野里澪:……(惊讶)

宫代拓留:本当の亲に求めるようなことを、仆は彼女に求めていたんでしょうね。だからそんな名前にしたんだと思います。(我把本该向父母寻求的事情,转而向她寻求了。所以我给她起了这样的名字。)

久野里澪:でも、『亲の役割』を彼女に求めたのなら……年上に设定するはずだろう?(但是,尽然要向她寻求父母的职责,不应该设定成比你大的样子吗?)

宫代拓留:そんなふうに『亲』を求めている自分を、认めたくなかったんです。だから彼女は、年上ではいけなかった。仆が守るべき、年下の女の子でなければいけなかった(我不想认同像这样渴求父母的自己,所以她不能比我年纪大,必须是被我保护的年纪小的女孩。)

宫代拓留:子どもながらに、つまらないプライドですね。いま考えると、本当に愚かでした。(明明是个小鬼,还真是无聊的自尊心。现在想想,真是愚蠢啊。)

久野里澪:……そう、か(是、吗)

久野里澪:でも、お前は君ちゃんと『彼女』を守った。今はもう、愚かしゃないさ(但是你已经好好的守护住了她,已经不再愚蠢了。)

宫代拓留:……(微笑)

至此,我所想要表达的东西,基本上已经讲完了。感谢5pb制作出这一部优质的游戏,毫无疑问,CC是可以WA2,CL,E17,SG等匹敌的怪物级作品。即便是小众作品,动画化还遥遥无期(志仓飞妈),我相信总有一天也会被更多的爱好者所熟知,所接受。

最后,一张力士贴纸表达我所有的期待。

2016.4.4

     END

Go语言学习笔记

发表于 2017-08-05 | 更新于 2017-12-22 |

Go语言基础

Go语言简介

Go是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为Golang。
罗伯特·格瑞史莫,罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go语言,稍后Ian Lance Taylor、Russ Cox加入专案。Go语言是基于Inferno作业系统所开发的。Go语言于2009年11月正式宣布推出,成为开放原始码专案,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。
目前Go语言每半年发布一个二级版本(即升级1.x到1.y)
Go语言的语法接近C语言,但对于变量的声明有所不同。Go语言支持垃圾回收功能。Go语言的并行模型是以东尼·霍尔的交谈循序程式(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。在1.8版本中开放插件(Plugin)的支持,这意味著现在能从Go语言中动态载入部分函式。
与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了 Slice 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。Google 目前仍正在讨论是否应该支持泛型,其态度还是很开放的,但在该语言的常见问题列表中,对于断言的存在,则持负面态度,同时也为自己不提供型别继承来辩护。
不同于Java,Go语言内嵌了关联数组(也称为哈希表(Hashes)或字典(Dictionaries)),就像字符串类型一样。

文件名、关键字与标识符

文件名

Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母组成,如 helloworld.go 。如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 hello_world.go 。文件名不包含空格或其他特殊字符。

关键字

Go语言中25个关键字或保留字

预定义标识符

除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数

Helloworld

以一个helloworld开始

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello, 世界")
}

运行结果

Go语言支持Unicode,因此能处理所有语言,包括中文。
Go语言的代码通过包(package)组织,包类似于其它语言里的库(libraries)或者模块(modules)。一个包由位于单个目录下的一个或多个.go源代码文件组成, 目录定义包的作用。每个源文件都以一条package声明语句开始,这个例子里就是package main, 表示该文件属于哪个包,紧跟着一系列导入(import)的包,之后是存储在这个文件里的程序语句。
Go的标准库提供了100多个包,以支持常见功能,如输入、输出、排序以及文本处理。比如fmt包,就含有格式化输出、接收输入的函数。Println是其中一个基础函数,可以打印以空格间隔的一个或多个值,并在最后添加一个换行符,从而输出一整行。
main包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main里的main 函数 也很特殊,它是整个程序执行时的入口7。main函数所做的事情就是程序做的。当然了,main函数一般调用其它包里的函数完成很多工作, 比如fmt.Println。
必须告诉编译器源文件需要哪些包,这就是import声明以及随后的package声明扮演的角色。hello world例子只用到了一个包,大多数程序需要导入多个包。
必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。这项严格要求避免了程序开发过程中引入未使用的包。

声明

Go语言主要有四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明。

变量

var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。变量声明的一般语法如下:

var 变量名字 类型 = 表达式

其中“类型”或“= 表达式”两个部分可以省略其中的一个。
如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。
如果初始化表达式被省略,那么将用零值初始化该变量。
数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。
因此,Go语言中不存在未初始化的量,避免了C语言中诸如“野码”的存在。
也可以在一个声明语句中同时声明一组变量,或用一组初始化表达式声明并初始化一组变量。如果省略每个变量的类型,将可以声明多个类型不同的变量(类型由初始化表达式推导):

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {

var a, b, c int
var d, e, f=6, 7.1, "ff"
fmt.Println(a,b,c,d,e,f)
}

运行结果

简短变量声明

在Go语言中,有一种称为简短变量声明语句的形式可用于声明和初始化局部变量。它以“名字 := 表达式”形式声明变量,变量的类型根据表达式来自动推导。
例如:

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
a:="AAAA"
b:=6
c:=7.000000001
fmt.Println(a,b,c)
}

运行结果

请记住“:=”是一个变量声明语句,而“=‘是一个变量赋值操作。

赋值

使用赋值语句可以更新一个变量的值,最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达式放在=的右边。
也可使用类似于a++的方式进行赋值,例如:

1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func main() {
a:=1
a=100
fmt.Println(a)
a++
fmt.Println(a)
}

运行结果

元祖赋值

元组赋值是另一种形式的赋值语句,它允许同时更新多个变量的值。在赋值之前,赋值语句右边的所有表达式将会先进行求值,然后再统一更新左边对应变量的值。
例如,利用元祖赋值计算两整数的最大公约数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

func gcd(x, y int) int {
for y != 0 {
x, y = y, x%y
}
return x

}

func main() {
var x,y int
fmt.Println("请输入两个整数")
fmt.Scanln(&x,&y)
fmt.Printf("%v和%v的最大公约数为%v",x,y,gcd(x,y))
}

运行结果

基础数据类型

Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。

整形

Go语言有int8、int16、int32和int64四种截然不同大小的有符号整形数类型,分别对应8、16、32、64bit大小的有符号整形数,与此对应的是uint8、uint16、uint32和uint64四种无符号整形数类型。

Unicode字符rune类型是和int32等价的类型,通常用于表示一个Unicode码点。这两个名称可以互换使用。同样byte也是uint8类型的等价类型,byte类型一般用于强调数值是一个原始的数据而不是一个小的整数。

浮点数

Go语言提供了两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。

常量math.MaxFloat32表示float32能表示的最大数值,大约是 3.4e38;对应的math.MaxFloat64常量大约是1.8e308。它们分别能表示的最小值近似为1.4e-45和4.9e-324。

一个float32类型的浮点数可以提供大约6个十进制数的精度,而float64则可以提供约15个十进制数的精度;通常应该优先使用float64类型,因为float32类型的累计计算误差很容易扩散,并且float32能精确表示的正整数并不是很大,因为float32的有效bit位只有23个,其它的bit位用于指数和符号;当整数大于23bit能表达的范围时,float32的表示将出现误差。

1
2
3
4
5
6
7
8
9
package main

import "fmt"
import "math"

func main() {
fmt.Println(math.MaxFloat32)
fmt.Println(math.MaxFloat64)
}

运行结果

复数

Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实部和虚部,如下例:

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
var a complex128=complex(145,64)
var b complex128=complex(12,7)
fmt.Println(a,b,real(a),real(b),imag(a),imag(b))
fmt.Println(a*b,real(a*b),imag(a*b))
}

运行结果

布尔型

一个布尔类型的值只有两种:true和false。if和for语句的条件部分都是布尔类型的值,并且==和<等比较操作也会产生布尔型的值。一元操作符!对应逻辑非操作,因此!true的值为false。

布尔值可以和&&(AND)和||(OR)操作符结合

布尔值并不会隐式转换为数字值0或1,反之亦然。必须使用一个显式的if语句辅助转换。通常使用一个转换函数。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "fmt"

func main() {
var a bool=true
var b bool=false
c:=a||b
d:=a&&b
fmt.Println(a,b,c,d,convert(c),convert(d))
}

func convert(a bool) int {
var i int
if a{
i=1
}else {
i=0
}
return i
}

运行结果

字符串

一个字符串是一个不可改变的字节序列,文本字符串通常被解释为采用UTF8编码的Unicode码点(rune)序列。

内置的len函数可以返回一个字符串中的字节数目,引操作s[i]返回第i个字节的字节值,i必须满足0 ≤ i< len(s)条件约束。如果试图访问超出字符串索引范围的字节将会导致panic异常。

注意:第i个字节并不一定是字符串的第i个字符,因为对于非ASCII字符的UTF8编码会要两个或多个字节。

子字符串操作s[i:j]基于原始的s字符串的第i个字节开始到第j个字节(并不包含j本身)生成一个新字符串。生成的新字符串将包含j-i个字节。同样,如果索引超出字符串范围或者j小于i的话将导致panic异常。不管i还是j都可能被忽略,当它们被忽略时将采用0作为开始位置,采用len(s)作为结束的位置。

+操作符将两个字符串链接构造一个新字符串,==和<进行比较;比较通过逐个字节比较完成的,因此比较的结果是字符串自然编码的顺序。

字符串的值是不可变的:一个字符串包含的字节序列永远不会被改变,当然我们也可以给一个字符串变量分配一个新字符串值,但这并不会导致原始的字符串值被改变,因为字符串是不可修改的,因此尝试修改字符串内部数据的操作也是被禁止的。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import "fmt"

func main() {
var s string="helloworld"
fmt.Println(s)
lenth:=len(s)
fmt.Println(lenth)
fmt.Println(string(s[1]))
for i:=0;i<len(s);i++ {
fmt.Println(string(s[i]))
}
s1:=s[1:7]
s2:=s[0:6]
println(s1+s2)
}

运行结果

常量

常量表达式的值在编译期计算,而不是在运行期。每种常量的潜在类型都是基础类型:boolean、string或数字。

一个常量的声明语句定义了常量的名字,和变量的声明语法类似,常量的值不可修改,这样可以防止在运行期被意外或恶意的修改。例如,常量比变量更适合用于表达像π之类的数学常数,因为它们的值不会发生变化。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
package main

import "fmt"

func main() {
const (
Pi =3.1415926
r=2
)
S:=Pi*r*r
fmt.Println(S)
}

运行结果

Go语言循环

Go语言提供了三种for循环方式:

  • 和 C 语言的 for 一样:

for init; condition; post { }

  • 和 C 的 while 一样:

    for condition { }

  • 和 C 的 for(;;) 一样:

    for { }

其中:

  • init: 一般为赋值表达式,给控制变量赋初值;
  • condition: 关系表达式或逻辑表达式,循环控制条件;
  • post: 一般为赋值表达式,给控制变量增量或减量。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func main() {
S:=0
i:=0
n:=100
for i:=0;i<=n ;i++ {
S=S+i
}
println(S)
i=0
for i<=n{
S=S+i
i++
}
fmt.Println(S)
}

运行结果

Go语言条件语句

条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。

if循环

If 在布尔表达式为 true 时,其后紧跟的语句块执行,如果为 false 则执行 else 语句块。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func main() {
var a bool=true
var b bool = false
if a&&b==true{
fmt.Println(1)
}else {
fmt.Println(0)
}
}

运行结果

switch语句

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。。
switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "fmt"

func main() {
fmt.Println("请输入一个正整数n")
var n int
fmt.Scanln(&n)
m:=n%2
switch m {
case 0:fmt.Printf("%v为偶数\n",n)
case 1:fmt.Printf("%v为奇数\n",n)
}
}

运行结果

函数、切片、map

函数

函数声明

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

1
2
3
func name(parameter-list) (result-list) {
body
}

形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。

函数的类型被称为函数的标识符。如果两个函数形式参数列表和返回值列表中的变量类型一一对应,那么这两个函数被认为有相同的类型和标识符。形参和返回值的变量名不影响函数标识符也不影响它们是否可以以省略参数类型的形式表示。

每一次函数调用都必须按照声明顺序为所有参数提供实参(参数值)。在函数调用时,Go语言没有默认参数值,也没有任何方法可以通过参数名指定形参,因此形参和返回值的变量名对于函数调用者而言没有意义。

在函数体中,函数的形参作为局部变量,被初始化为调用者提供的值。函数的形参和有名返回值作为函数最外层的局部变量,被存储在相同的词法块中。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import "fmt"

func sqare(a float64) float64 {
const pi =3.1415926
S:=pi*a*a
return S
}

func main() {
var r float64
fmt.Println("请输入半径r")
fmt.Scan(&r)
fmt.Println(sqare(r))
}

运行结果

多返回值

在Go中,一个函数可以返回多个值。这可以用来确定函数是否得到了正确执行。
示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import "fmt"

func sqare(a float64) (S float64,ok bool) {
const pi =3.1415926
S=pi*a*a
ok=true
return S,ok
}

func main() {
var r float64
fmt.Println("请输入半径r")
fmt.Scan(&r)
fmt.Println(sqare(r))
}

运行结果

函数值

在Go中,函数被看作第一类值(first-class values):函数像其他值一样,拥有类型,可以被赋值给其他变量,传递给函数,从函数返回。对函数值(function value)的调用类似函数调用。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func sqare(a float64) float64 {
const pi =3.1415926
S:=pi*a*a
return S
}

func main() {
var r float64
fmt.Println("请输入半径r")
fmt.Scan(&r)
a:=sqare(r)
b:=sqare(sqare(r))
fmt.Println(a)
fmt.Println(b)
}

运行结果:

切片

数组的长度不可改变,在特定场景中这样的集合不适用了,Go中提供了一种灵活,功能强悍的内置类型Slices切片,与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

切片中有两个概念:一是len长度,二是cap容量,长度是指已经被赋过值的最大下标+1,可通过内置函数len()获得。

容量是指切片目前可容纳的最多元素个数,可通过内置函数cap()获得。

切片是引用类型,因此在当传递切片时将引用同一指针,修改值将会影响其他的对象。

切片的定义和初始化

声明一个未指定大小的数组来定义切片:

var a []type

切片不需要说明长度。
或使用make()函数来创建切片:

a := make([]type, len)

初始化切片:

a :=[] int {1,2,3 }

a1 := a[startIndex:endIndex]

或使用make函数定义并初始化:

s :=make([]int,len,cap)

len() 和 cap() 函数

切片是可索引的,并且可以由 len() 方法获取长度。

切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。

切片截取

可以通过设置下限及上限来设置截取切片

append() 和 copy() 函数

如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。

使用append()函数则可以向切片中增加新的元素,而copy()可以获得一段切片的片段到新的切片。

切片示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func main() {
a:=make([]int,5,5)
a=[]int{1,2,3,4,5}
b:=make([]int,5,5)
copy(b,a)
fmt.Println(len(a))
fmt.Println(cap(a))
fmt.Println(a)
fmt.Println(b)
a=append(a,6)
fmt.Println(len(a))
fmt.Println(cap(a))
fmt.Println(a)
a1:=a[0:6]
fmt.Println(a1)
}

运行结果

map

哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。

在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型,但是key和value之间可以是不同的数据类型。其中K对应的key必须是支持==比较运算符的数据类型,所以map可以通过测试key是否相等来判断是否已经存在。虽然浮点数类型也是支持相等运算符比较的,但是不建议用浮点数做key,最坏的情况是可能出现的NaN和任何浮点数都不相等。对于V对应的value数据类型则没有任何的限制。

map的创建

a:= make(map[string]int) // mapping from strings to ints

也可以用map字面值的语法创建map,同时还可以指定一些最初的key/value:

ages := map[string]int{

“china”: 1,

“us”: 2,

}

map的访问

Map中的元素通过key对应的下标语法访问:

a[“china”] = 1

fmt.Println(a[“china”]) // “1”

map元素的删除

使用内置的delete函数可以删除元素:

delete(a, “china”) // remove element a[“china”]

所有这些操作是安全的,即使这些元素不在map中也没有关系;如果一个查找失败将返回value类型对应的零值。

map中的元素并不是一个变量,因此我们不能对map的元素进行取址操作.

要想遍历map中全部的key/value对的话,可以使用range风格的for循环实现。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

func main() {
a:=make(map[string]int)
a["china"]=1
a["us"]=2
fmt.Println(a["us"])
delete(a,"us")
a["jp"]=3
for k, v := range a {
fmt.Printf("%v is no.%v\n", k, v)
}
}

运行结果

面向对象编程

Go语言面向对象过程的实现

面向对象主要包括了三个基本特征:封装、继承和多态。
封装,就是指运行的数据和函数绑定在一起,C++中主要是通过this指针来完成的。

继承,就是指class之间可以相互继承属性和函数。

多态,主要就是用统一的接口来处理通用的逻辑,每个class只需要按照接口实现自己的回调函数就可以了。

Go语言中并没有像C++,Java语言中这类的Class,它只含有像C语言中的结构体,用结构体和指针等特性,完成一个类的作用,很巧妙的使用了指针和结构体,不仅是go的面向对象,包括go语言中的map等操作都是借助了结构体。

C++、Java等面向对象的语言中,类的底层实现就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。

结构体的建立和实例的创建

1
2
3
4
5
type circle struct
{
r float64
h float64
}

如此,定义了一个圆柱体结构体,分别有半径和高两个属性。
可由以下几种方法来创建实例。

1
2
3
4
circle1:=new(circle)
circle1:=&circle{}
circle1:=&circle{1,2}
circle1:=&circle{r:3,h:4}

方法

在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。

例:

1
2
3
4
func S(p circle) float64 {
pi:=3.1415926
return pi*p.r*p.r*p.h
}

上面的代码里那个附加的参数p,叫做方法的接收器(receiver),早期的面向对象语言留下的遗产将调用一个方法称为“向一个对象发送消息”。

在Go语言中,我们并不会像其它语言那样用this或者self作为接收器;我们可以任意的选择接收器的名字。由于接收器的名字经常会被使用到,所以保持其在方法间传递时的一致性和简短性是不错的主意。这里的建议是可以使用其类型的第一个字母,比如这里使用了Point的首字母p。

在方法调用过程中,接收器参数一般会在方法名之前出现。这和方法声明是一样的,都是接收器参数在方法名字之前。

继承

继承:

当一个类型B的某个字段(匿名字段)的类型是另一个类型 A的时候,那么类型 A所拥有的全部字段都被隐式地引入了当前定义的这个类型B。这样就实现了继承。B类型的变量就可以调用A的所有属性和方法。也就是说A继承了B。

则可得到继承circle的类mass,多了一个属性密度D。

1
2
3
4
type mass struct {
circle
D float64
}

则mass继承了circle的全部属性和方法。

方法的重写

如果一个类型B实现了作为其属性的类型A中的方法。那么这个类型B的值调用方法的时候调用的是自己类型B的方法,而不是属性类型A的方法。

不同的类型可以有相同的方法名,因此需要在定义的时候消除歧义。

基于只针对象的方法

当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要更新一个变量,或者函数的其中一个参数实在太大我们希望能够避免进行这种默认的拷贝,这种情况下我们就需要用到指针了。对应到我们这里用来更新接收器的对象的方法,当这个接受者变量本身比较大时,我们就可以用其指针而不是对象来声明方法。

例:

1
2
3
4
func SS(p *circle) float64 {
pi:=3.1415926
return pi*p.r*p.r*p.h
}

以上所有知识点综合后得到的程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package main

import "fmt"

type circle struct
{
r float64
h float64
}

type mass struct {
circle
D float64
}

func S(p circle) float64 {
pi:=3.1415926
return pi*p.r*p.r*p.h
}

func M(p mass) float64 {
pi:=3.1415926
return p.h*p.r*p.r*pi*p.D
}

func SS(p *circle) float64 {
pi:=3.1415926
return pi*p.r*p.r*p.h
}

func main() {
circle1:=circle{2.4,3.1}
fmt.Println(circle1)
mass1:=mass{circle{2.4 ,3.1},3.23}
fmt.Println(mass1)
fmt.Println(S(circle1))
fmt.Println(M(mass1))
fmt.Println(SS(&circle1))
}

运行结果

接口

Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。

接口类型是对其它类型行为的抽象和概括;因为接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式我们可以让我们的函数更加灵活和更具有适应能力。

原则:谁使用,谁实现

形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* 定义接口 */
type interface_name interface {
method_name1 [return_type]
method_name2 [return_type]
method_name3 [return_type]
...
method_namen [return_type]
}

/* 定义结构体 */
type struct_name struct {
/* variables */
}

/* 实现接口方法 */
func (struct_name_variable struct_name) method_name1() [return_type] {
/* 方法实现 */
}
...
func (struct_name_variable struct_name) method_namen() [return_type] {
/* 方法实现*/
}

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package main

import (
"fmt"
)

type Phone interface {
call()
}

type NokiaPhone struct {
}

func (nokiaPhone NokiaPhone) call() {
fmt.Println("I am Nokia, I can call you!")
}

type IPhone struct {
}

func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!")
}

func main() {
var phone Phone

phone = new(NokiaPhone)
phone.call()

phone = new(IPhone)
phone.call()

}

运行结果

并发编程

Goruntimes

go中没有多进程多线程的概念,而是使用goroutine概念,我们可以把goroutine当作其他语言中的线程,当在一个函数前加入go关键字,就启动了一个goroutine。

与操作系统或者其它语言提供的线程相比较,可以简单地把goroutine类比作一个线程。

当一个程序启动时,其主函数即在一个单独的goroutine中运行,我们叫它main goroutine。新的goroutine会用go语句来创建。在语法上,go语句是一个普通的函数或方法调用前加上关键字go。go语句会使其语句中的函数在一个新创建的goroutine中运行。而go语句本身会迅速地完成。

下面的这个例子说明了如何让主程序在运行斐波那契数列的同时,并发运行一个等待动画:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import (
"fmt"
"time"
)

func main() {
go spinner(100 * time.Millisecond)
const n = 45
fibN := fib(n) // slow
fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN)
}

func spinner(delay time.Duration) {
for {
for _, r := range `-\|/` {
fmt.Printf("\r%c", r)
time.Sleep(delay)
}
}
}

func fib(x int) int {
if x < 2 {
return x
}
return fib(x-1) + fib(x-2)
}

运行结果

后主函数返回。主函数返回时,所有的goroutine都会被直接打断,程序退出。除了从主函数退出或者直接终止程序之外,没有其它的编程方法能够让一个goroutine来打断另一个的执行。

或者,过goroutine之间的通信来让一个goroutine请求其它的goroutine,并被请求的goroutine自行结束执行。

Channels

如果说goroutine是Go语音程序的并发体的话,那么channels它们之间的通信机制。一个channels是一个通信机制,它可以让一个goroutine通过它给另一个goroutine发送值信息。每个channel都有一个特殊的类型,也就是channels可发送数据的类型。一个可以发送int类型数据的channel一般写为chan int。
创建:

1
ch := make(chan int) // ch has type 'chan int'

一个channel有发送和接受两个主要操作,都是通信行为。一个发送语句将一个值从一个goroutine通过channel发送到另一个执行接收操作的goroutine。发送和接收两个操作都是用<-运算符。在发送语句中,<-运算符分割channel和要发送的值。在接收语句中,<-运算符写在channel对象之前。一个不使用接收结果的接收操作也是合法的。

Channel还支持close操作,用于关闭channel,随后对基于该channel的任何发送操作都将导致panic异常。对一个已经被close过的channel之行接收操作依然可以接受到之前已经成功发送的数据;如果channel中已经没有数据的话讲产生一个零值的数据。

close(ch)

不带缓存的Channel

一个基于无缓存Channels的发送操作将导致发送者goroutine阻塞,直到另一个goroutine在相同的Channels上执行接收操作,当发送的值通过Channels成功传输之后,两个goroutine可以继续执行后面的语句。反之,如果接收操作先发生,那么接收者goroutine也将阻塞,直到有另一个goroutine在相同的Channels上执行发送操作。

基于无缓存Channels的发送和接收操作将导致两个goroutine做一次同步操作。因为这个原因,无缓存Channels有时候也被称为同步Channels。当通过一个无缓存Channels发送数据时,接收者收到数据发生在唤醒发送者goroutine之前。

Channel串联

Channels也可以用于将多个goroutine链接在一起,一个Channels的输出作为下一个Channels的输入。这种串联的Channels就是所谓的管道(pipeline)。

程序示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import "fmt"

func main() {
naturals := make(chan int)
squares := make(chan int)

// Counter
go func() {
for x := 0; ; x++ {
naturals <- x
}
}()

// Squarer
go func() {
for {
x := <-naturals
squares <- x * x
}
}()

// Printer (in main goroutine)
for {
fmt.Println(<-squares)
}
}

运行结果

带缓存的channel

带缓存的Channel内部持有一个元素队列。队列的最大容量是在调用make函数创建channel时通过第二个参数指定的。

向缓存Channel的发送操作就是向内部缓存队列的尾部插入元素,接收操作则是从队列的头部删除元素。如果内部缓存队列是满的,那么发送操作将阻塞直到因另一个goroutine执行接收操作而释放了新的队列空间。相反,如果channel是空的,接收操作将阻塞直到有另一个goroutine执行发送操作而向队列插入元素。

cap()函数可以获得缓存空间大大小

len()函数可以获得缓存元素的个数

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "fmt"

func main() {
responses := make(chan int, 9)
go func() {responses<-jisuan(3)}()
go func() {responses<-jisuan(4)}()
go func() {responses<-jisuan(5)}()
go func() {responses<-jisuan(6)}()
go func() {responses<-jisuan(7)}()
go func() {responses<-jisuan(8)}()
go func() {responses<-jisuan(9)}()
go func() {responses<-jisuan(10)}()
go func() {responses<-jisuan(11)}()
a:=<-responses
fmt.Println(a)
}

func jisuan(a int) int {
s:=a*a
return s
}

运行结果

实验:并发计算pi
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import (
"fmt"
"math"
)

func main() {
var n int
fmt.Println("请输入n值")
fmt.Scanln(&n)
fmt.Println(pi(n))
}

func pi(n int) float64 {
ch:=make(chan float64,100)
for k:=0; k<=n; k++ {
go term(ch,float64(k))
}
var f float64=0
for k:=0;k<=n;k++ {
f+=<-ch
}
return f
}

func term(ch chan float64, k float64) {
ch<-4*math.Pow(-1, k) / (2*k+1)
}

运行结果:

网络编程

TCP编程

输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。

在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

返回本机\目标主机的网络地址

本机地址:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"net"
)

func main() {
address,error:=net.InterfaceAddrs()
if error!=nil{
fmt.Printf("出现错误,错误信息为%v",error)
}
fmt.Printf("本机地址为:%v",address)
}

运行结果

目标主机地址:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"net"
)

func main() {
address, error := net.LookupIP("www.google.com")
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
}
fmt.Printf("目标主机地址为:%v", address)
}

运行结果

解析带端口号地址的ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"net"
)

func main() {
ip, error := net.ResolveTCPAddr("tcp","www.google.com:80")
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
}else {
fmt.Printf("目标TCP地址为:%v", ip)
}

运行结果

UDP编程

什么是UDP编程

  • 使用UDP协议(User Datagram Protocol)来传输数据的编程。
  • UDP协议→是面向无连接的、不可靠的数据报投递服务。

  • 当使用UDP 协议传输信息流时,用户应用程序必须负责解决数据报丢失、重复、排序,差错确认等问题。

  • 资源消耗小处理速度快,通常音频、视频和普通数据在传送时使UDP较多。如QQ使用的就是UDP协议。

  • UDP适用于一次只传少量数据的环境。

  • 从理论上说,包含报头在内的数据报的最大长度为65535字
    节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。

net包常用的UDP库函数

  • func ResolveUDPAddr(net, addr string) (*UDPAddr, error)
  • 把addr 地址字符串,解析成UDPAddr 地址。
  • net 可以是”udp”,”udp4”,”udp6”
  • addr 是一个地址字符串,由主机名或IP 地址,以及“:”后面跟着的端口号组成。如果是IPv6,主机部分必须在方括内,如[::1]8080

  • func ListenUDP(net string, laddr UDPAddr) (UDPConn, error)
  • 在指定的地址(laddr)监听,等待UDP 数据包的到达。
  • 返回*UDPConn,可以使用连接的ReadFrom函数来读取UDP 数据,用WriteTo 来向客户端发送数据。
  • func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error)
  • 服务端用来读取UDP 数据。Addr 是发送方的地址。

服务端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main

import
(
"fmt"
"net"
)

func HandleCilent(conn *net.UDPConn,data []byte,address *net.UDPAddr) {
fmt.Println("收到数据:"+string(data))
conn.WriteToUDP([]byte("数据已收到"),address)
}

func main() {
//解析UDP地址
address, error := net.ResolveUDPAddr("udp", ":7070")
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
} else {
return
}
//7070端口监听
conn, error := net.ListenUDP("udp", address)
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
} else {
return
}
for{//循环接收数据,处理数据
var buf [1024]byte
n,address,error:=conn.ReadFromUDP(buf[0:])
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
} else {
return
//开启新线程处理客户端数据
go HandleCilent(conn,buf[0:n],address)
}
}
}

客户端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
"net"
"fmt"
)

func main() {
//解析服务器UDP地址
address, error := net.ResolveUDPAddr("udp", "127.0.0.1:7070")
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
} else {
return
}
//连接服务器
conn,error:=net.DialUDP("udp",nil,address)
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
} else {
return
}
defer conn.Close()//关闭连接
//向服务器发送数据
conn.Write([]byte("Hello,Server"))
var buf [1024]byte
//读取服务器相应信息
n,_,error:=conn.ReadFromUDP(buf[0:])
if error != nil {
fmt.Printf("出现错误,错误信息为%v", error)
} else {
return
}
fmt.Println(string(buf[0:n]))
}

其他

Go语言范围(Range)

Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引值,在集合中返回 key-value 对的 key 值。
示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import "fmt"

func main() {
//这是我们使用range去求一个slice的和。使用数组跟这个很类似
nums := []int{2, 3, 4}
sum := 0
for _, num := range nums {
sum += num
}
fmt.Println("sum:", sum)
//在数组上使用range将传入index和值两个变量。上面那个例子我们不需要使用该元素的序号,所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。
for i, num := range nums {
if num == 3 {
fmt.Println("index:", i)
}
}
//range也可以用在map的键值对上。
kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
fmt.Printf("%s -> %s\n", k, v)
}
//range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。
for i, c := range "go" {
fmt.Println(i, c)
}
}

运行结果

Go嵌入C语言代码

想在Go代码中使用C语言必须在代码开头注释中写,然后再紧接着的下一行写import “C”,这样就算是导入完成了。这个”C”不是一个真正的包,而是一个类似于命名空间的东西,所有能调用的C的变量、函数都包含在里面。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
package main
/*
#include <stdio.h>
#include <stdlib.h>
void say_hello() {
printf("Hello World!\n");
}
*/
import "C"
func main() {
C.say_hello()
}

运行结果

反射

在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

unsafe

Golang的unsafe包是一个很特殊的包。 为什么这样说呢? 本文将详细解释。

来自go语言官方文档的警告

unsafe包的文档是这么说的:

导入unsafe的软件包可能不可移植,并且不受Go 1兼容性指南的保护。

Go 1 兼容性指南这么说:

导入unsafe软件包可能取决于Go实现的内部属性。 我们保留对可能导致程序崩溃的实现进行更改的权利。

当然包名称暗示unsafe包是不安全的。 但这个包有多危险呢? 让我们先看看unsafe包的作用。

Unsafe包的作用:

unsafe包含以下资源:

三个函数:

func Alignof(variable ArbitraryType)uintptr

func Offsetof(selector ArbitraryType)uintptr

func Sizeof(variable ArbitraryType)uintptr

和一种类型:

类型Pointer * ArbitraryType

这里,ArbitraryType不是一个真正的类型,它只是一个占位符。

与Golang中的大多数函数不同,上述三个函数的调用将始终在编译时求值,而不是运行时。 这意味着它们的返回结果可以分配给常量。

unsafe包中的函数中非唯一调用将在编译时求值。当传递给len和cap的参数是一个数组值时,内置函数和cap函数的调用也可以在编译时被求值。

除了这三个函数和一个类型外,指针在unsafe包也为编译器服务。

出于安全原因,Golang不允许以下之间的直接转换:

两个不同指针类型的值,例如 int64和 float64。

指针类型和uintptr的值。

但是借助unsafe.Pointer,我们可以打破Go类型和内存安全性,并使上面的转换成为可能。这怎么可能发生?让我们阅读unsafe包文档中列出的规则:

任何类型的指针值都可以转换为unsafe.Pointer。

unsafe.Pointer可以转换为任何类型的指针值。

uintptr可以转换为unsafe.Pointer。

unsafe.Pointer可以转换为uintptr。

这些规则与Go规范一致:

底层类型uintptr的任何指针或值都可以转换为指针类型,反之亦然。

规则表明unsafe.Pointer类似于c语言中的void 。当然,void 在C语言里是危险的!

在上述规则下,对于两种不同类型T1和T2,可以使 T1值与unsafe.Pointer值一致,然后将unsafe.Pointer值转换为 T2值(或uintptr值)。通过这种方式可以绕过Go类型系统和内存安全性。当然,滥用这种方式是很危险的。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
"unsafe"
)
func main() {
var n int64 = 5
var pn = &n
var pf = (*float64)(unsafe.Pointer(pn))
// now, pn and pf are pointing at the same memory address
fmt.Println(*pf) // 2.5e-323
*pf = 3.14159
fmt.Println(n) // 4614256650576692846
}

运行结果

在这个例子中的转换可能是无意义的,但它是安全和合法的

因此,资源在unsafe包中的作用是为Go编译器服务,unsafe.Pointer类型的作用是绕过Go类型系统和内存安全。

《To The Moon》通关感言

发表于 2017-06-10 | 更新于 2017-12-22 |

昨晚在AppStore花了30块钱买了《To The Moon 》这款游戏,用大概5个小时通了一遍,在此简单写下我的感想吧。

选择的游戏版本

《To The Moon 》由RPGMaker所制作,是一款典型的像素风格RPG游戏,由于画面系统等比较简单,因此可移植性较好,目前已经在PC(steam),iOS,Android等平台登录,价格分别为36元,30元,4.99美元。照理说购买steam版本是比较好的,因为除了游戏本体外还送个dlc,并且能喜加一集卡,但考虑到iPad躺着玩比较爽(没错,我现在能躺着绝对不会坐着),屏幕也比手机大,体验更好,就入了iOS版。游玩了一遍,iOS版的内容内容比较完整的,也没有bug,还增加了自动存档等功能,推荐购买。

直指内心深处的故事

《To The Moon 》在2011年推出PC版,照理说也是一个老游戏了,之所以最近又火了一把是因为移动版的推出,以及即将在6月发布的续作——《寻找天堂》。近段时间,我关注的几个网站(机核,少数派)和博主不约而同地推荐这款游戏,也吸引了我的注意,尤其是我所喜欢的某个博主在写的那篇无剧透的通关感想中对这部游戏有着很高的评价,这也吸引了我的注意。通关之后,也让我不禁感叹,在3a大作的剧情愈加套路和无聊的今天,恐怕也只有独立游戏可以写出如此动人的故事,简陋的画面与缺失的游戏性反而让其在剧情和音乐外达到高峰,从而打动玩家的内心。
好的故事很多,好的科幻故事也很多,就我个人而言,提到科幻故事,马上就能想到诸如《三体》、《银河系漫游指南》这样的中长篇小说,《迪拉克海洋上的涟漪》这样的短篇小说,此外还有优秀的电影和动漫,诸如《银翼杀手》、《攻壳机动队》,但《To The Moon 》与前面所提到的故事不同的是,《To The Moon 》所讲述的是一个更加关注“人内心的幽微深处”的故事,它所关注的并非是人物与外界的互动,而是对于内心深处迷雾的探索,更是一个“心灵重生”的故事。这样的故事就比较少见,就我最近所玩的游戏中,能想到的也只有《返校detention》和《chaoschild》这两款,剧情的推动,往往伴随着对于角色内心深处的不断了解。

扬长避短,零战斗的冒险

作为一款RPG游戏,《To The Moon 》却放弃了传统的打怪升级套路上,真正把重心落到了说故事上,实现全程零战斗的游戏体验,也因此这款游戏非常类似与视觉小说,但同时RPG游戏的收集要素也没有落下。虽然没有战斗流程,但故事本身就是一场冒险,因此在长达5个小时的游戏流程中,玩家也丝毫不会感到无聊,反而会被精彩的故事所吸引。就内容而言,《To The Moon 》的故事剧本完全不逊于商业电影,我在游玩过后就不时想象着“如果这一幕拍成电影会如何呈现?”这种问题,十分期待某天这部游戏能够被拍成电影,相信也会十分精彩。
谈到打怪升级,就不得不喷一喷某些刷子游戏,通过这种低劣的手段来延长玩家进行游戏的时间。例如最近在steam上架的某垃圾国产虚幻引擎大作,设定高到夸张的任务目标来刻意延长玩家的通关时间,到最后被发现连结局都没做出来,真鸡儿丢人。我是希望“打怪升级”这个过程是有着意义与乐趣的,例如在黑魂中,这个过程是玩家不断超越自我,提高自己的技术的过程,玩家通过“打怪升级”而真正地变强,而不仅仅是单纯的数值提高。
总之,《To The Moon 》在这方面成功地扬长避短,没有乱七八糟的迷宫怪兽来拖延玩家的时间,让玩家真正地享受故事。

旁观者视角

和我之前玩过的一大票第一人称视角的视觉小说和其余的大部分第三人称视角展开的游戏不同,《To The Moon 》采用的是比较独特的“旁观者视角”,在这个视角中,玩家不能像第一人称视角那样直接自己扮演主角,或者像第三人称那样,以上帝视角操控主角,而是跟随者游戏中角色的引导,间接地观察主角,欣赏故事,在旁观的角度来欣赏这个故事。这样的设定,第一个让我想起的故事是何夕所写的短篇科幻小说《伤心者》,在这个故事中,第一人称视角的“我”,穿越到过去来观察夏群芳和她的儿子的故事,而这种视角设定也带给了读者别样的感动。就如同在推理小说中那样,最让人唏嘘感慨的往往不是侦探自身的故事,而是罪犯和受害者之间的爱恨情仇。
(注:以下部分涉及剧透!不想看的请点右上角)

梦想和爱情的交织

《To The Moon 》是一个科幻背景的故事,玩家所操控的主角Neil博士(Dr. Neil Watts)与Eva博士(Dr. Eva Rosalene),是西格蒙德公司公司的职员,这家公司所提供的的一项服务便是修改临终之人的记忆,完成他们最后的心愿。由于产生的记忆在人醒来后会与现今记忆冲突,因此只能用于即将临终死去的老人。当然,这种修改记忆完成梦想,并非是粗暴地将记忆直接输入到临终之人的记忆之终,而是采用了一种比较温和高明的引导,不断跳跃至客户的记忆早期,找到愿望出现的原因,并对客户的这种“愿望”进行引导,从而引发客户实现这个愿望的动机和实际行动,并在类似于做梦的记忆中完成自己的愿望,达到修改记忆,完成愿望的作用。


和其他客户的临终愿望不同的是,John(Johnny Wyles)的梦想听起来不可思议:他的愿望竟然是“飞向月球”,而故事就在Neil和Eva探索John为何会产生这样的愿望,以及帮助John实现这个愿望中展开。
伴随着剧情的发展,我们一步一步地了解John,另一位重要的人物也浮出水面——John的妻子River。John甚至为了妻子而自己编写了一首《For River》的曲子来献给妻子。

River的怪异举动,对于灯塔Anya的喜爱,房间中River花费数十年所折叠的无数纸兔子,丑陋的鸭嘴兽玩偶……一切都是那么地扑朔迷离,而当询问了John为何想要飞向月球,John竟然茫然地回答“我不知道”。

我相信这时玩家也是一脸懵逼的,既然实现这个愿望的动机也不清楚,那么为何还要如此牵挂这个愿望——或者说,“去月球”已经成为了John的内心执念,尽管他自己也无法说出原因。
而后,玩家继续操控Neil和Eva收集记忆碎片,向前寻找John的记忆,在这个过程中,玩家逐渐了解了River的阿斯伯格综合征,见证了John和River在月下灯塔中的浪漫起舞,在广阔草原上的策马狂奔,见证了他们在Anya下的婚礼,更了解了他们的第一次约会……而在这时,记忆出现了断层,Neil和Eva无法再继续前进了。
在找出办法进入John隐藏在内心深处,无法回忆到的记忆后,玩家终于了解到了一切的真相,John记忆被阻断的原因,John和River的誓言,而在这之后River的怪异举止也有了解释。
两人在月下相遇,许下了浪漫的约定:

看那儿。
知道吗?天上有无数盏灯
嗯。
你刚才说这是你的位置吧?
我只在狂欢节才来。
你不喜欢人多的地方吗?
我也不喜欢。
……………………
就像天上的星星,从这里看过去它们都差不多,但这并不会减少它们的美丽。
我也这么觉得。
那么你认为这些星星是什么呢?
我从未告诉任何人,但我一直认为它们是灯塔。成千上万的灯塔……闪耀着屹立在世界尽头。
哇,那上面一定充满活力,热闹喧哗。
不是这样的,它们看得到彼此,想交流聊天。
可他们无能为力。他们天各一方,无法听清对方的呼唤。
它们能做的……唯有努力地绽放光芒。让那光芒照耀着其他灯塔,也照耀着我。
为什么是你?
因为总有一天……我也会成为他们的朋友。
你明年还会来吗?
会的。
老时间?老地点?
嗯。
如果你忘记了,或是走丢了呢?
那么我们总会在月亮上相遇的。


而这个星空下的约定,因为特殊的原因(这里留个悬念)被John所遗忘,River为了唤回John原来的记忆而努力,但由于阿斯伯格综合征的原因,只能笨拙地通过叠蓝黄相间的纸兔子来让John想起那天复活节的约定,但至死都没有成功。
同时,John也浑然不知自己失去记忆这件事,只能不解地忍受River怪异的举止,后半生被对方所束缚,两人即便深爱着对方,却仍旧无法走入彼此的内心。
两个病人,就在种种误解之下,终生在内心筑起了围墙,造成了一生的裂痕。本是天作之合,可惜造化弄人。
但是,那个约定,却成为了John内心的执念:
Then we can always regroup on the moon, silly!
去月球,已经成为了Joho无论如何都要完成的执念。
在这一点后,Eva博士做出了决定:她要对John的记忆做出改动,删除River的存在,类似于timeleap一样,改变John的命运。Neil想要阻止Eva的做法,这是本末倒置的手段,John想去月球的原因是和River见面,而为了去月球这个目标删除River的存在,无异于是买椟还珠。
Eva最终还是实施了自己的手段,伴随着《Everything’s Alright》的响起,John的记忆发生了巨大改变,和River所共度的一幕幕,逐渐消失不在。

Short steps, deep breath
踟蹰,深吸
Everything is alright
一切尚好
Chin up, I can’t
奋力,无力
Step into the spotlight
向光而行
She said, “I’m sad,”
她说,难过
Somehow without any words
不以言喻
I just stood there
我在,原地
Searching for an answer
且猜且寻
When this world is no more
当全世界失色
The moon is all we’ll see
我们所见唯有那一圆月亮
I’ll ask you to fly away with me
我想邀你与我同往
Until the stars all fall down
就算群星陨落
They empty from the sky
天幕空茫
But I don’t mind
我不在意
If you’re with me, then everything’s alright
有你在,万事安好
Why do my words
为何,字句
Always lose their meaning?
总是词不达意
What I feel, what I say
我感,我语
There’s such a rift between them
总是失之千里
He said, “I can’t
他说:“似乎,
Really seem to read you.”
我总读不懂你。”
I just stood there
无能,为力
Never know what I should do
如何让你忆起
When this world is no more
当全世界失色
The moon is all we’ll see
我们所见唯有那一圆月亮
I’ll ask you to fly away with me
我想邀你与我同往
Until the stars all fall down
就算群星陨落
They empty from the sky
天幕空茫
But I don’t mind
我不在意
If you’re with me, then everything’s alright
有你在,万事安好
If you’re with me, then everything’s alright
有你在,万事安好

在这之后,John在“To The Moon”这个愿望的驱动下,不断努力,最终进入了NASA。当他在NASA弹奏着《For River》(如今叫《To The Moon 》)时,一个红发的宇航员映入他的眼帘——
即便通过技术手段将他们彼此分开,他们也从未忘记彼此。John从未忘记,究竟是为了谁而飞向月球。

Eva最终还是赌对了,她相信John和River彼此间的絆(kizuna)将会联系他们彼此,无论世界线如何改变,无论记忆如何遭到修改,两人也终将找到彼此。
故事迎来了最终的结局,John和River乘坐NASA的载人飞船,手牵着手飞向月球,终于实现了彼此的约定,John的临终遗愿也得到了实现。




现实中,便随着心跳器的一阵响声,John离开了这个世界。
To The Moon,Find Paradise.

尾声

《To The Moon 》的叙事结构是非线性的,而且作者也特别会制造悬念,初期的某些场景甚至还有轻微猎奇的成分,因而虽然《To The Moon 》是一个单一结局,没有多少收集要素的游戏,但是也值得玩家游玩第二遍甚至第三遍,相信在一周目后的上帝视角下,二周目能够对这个故事有着更好的了解,对一些人物的抉择,行为,想法有新的感悟。。
故事的结局,有的人感觉很圆满,有的人感觉这仅仅是虚假的记忆,John和River在现实中仍然是悲惨、已经确定的结局,这里就凭玩家们自己感受吧。但毫无争议的是,这是一个精彩的、令人感动的故事,有的人说这是垃圾游戏,因为玩家最后甚至连屏幕都看不清楚(笑)。
I’m Not Crying, There’s Something In My Eye
当然,《To The Moon 》也向我、向玩家们提出这样一个问题:
如果你在一生中,只锁定一个目标,从不动摇,那么你是不是就能过圆满的人生?
这值得所有玩家思考。
《To The Moon 》这部游戏的作者为高瞰,是一位加拿大移民,主角River的阿斯伯格综合征,也与高瞰在加拿大的学生生涯经历有关,这里是一篇关于高瞰的专访,感兴趣的可以看一下。
值得一提的是,作者也将出售游戏所获得的资金部分捐赠给了阿斯伯格综合征基金会:-)
最后,希望大家听一听《To The Moon 》的OST,十分动听,相信在进行过游戏之后,对于《For River》会有更深的体验。
《To The Moon OST》专辑

完

2017.6.10

四款Chrome扩展增强使用GitHub的体验

发表于 2017-06-03 | 更新于 2017-12-22 |

GitHub是世界知名的代码托管网站,在中国也有相当多的项目托管在GitHub,给广大程序员和编程爱好者带来了方便,本文将推荐四个有趣实用的Chrome插件,以增强用户浏览GitHub的体验。
注:所有的插件直接在Chrome网上应用店(需要一些科学上网技巧)搜索下载即可
目前版本的Chrome安装第三方拓展相当繁琐复杂,因此不建议使用Chrome安装第三方拓展

鼠标悬停快速预览——GitHub Hovercard

GitHub Hovercard是一款可以使用鼠标悬停快速浏览项目信息/用户信息/项目讨论的Chrome扩展,无论在GitHub的哪一个界面,只要鼠标停驻在链接上面,就可以快速查看有关信息,而无需点击进去。

如图所示,项目概览信息包括star,fork,issue的数目,项目使用的语言和项目说明(readme.md),并且你可以在这个界面快速加注星标。

Users相关内容

Issues相关内容
本项目目前已在GitHub上开源, 地址为:Issues
有兴趣的同学可以去围观。

实现树状文件列表——octotree

GitHub是可以在线查看项目中的源代码,文档,以及像图片一类的资源文件,但体验相当糟糕,只能重复地点进一个文件夹,再进入其中一个文件夹,如此循环。有的时候,你甚至都搞不清自己现在查看的是哪一个文件。尤其是在文件繁多的项目之中,文件夹嵌套堪称噩梦,一个个点击太费时间和精力。
而octotree这个Chrome扩展则可以解决这个痛点,使你在进行文件浏览操作时更有效率。
Octotree这款插件就如同名字一样,在页面左端提供了一个树状的文件列表(类似Windows资源管理器的左栏),从而让所有文件的位置一目了然,并可以快速点击查看。

清晰的树状文件列表。
Octotree同样是GitHub开源项目,地址:octotree

直观衡量你的工作量——Isometric Contributions

Isometric Contributions是一款可以将冷冰冰的数据转化为生动图形的Chrome扩展程序。它可以将你每天的contributions数目(可以理解为提交GitHub的数目)转化为颜色不一的立体柱状图,并给出自己的统计数据。Contributions数目由少到多分别以颜色逐渐变重的立体柱状图显示,宛如搭建一座高低错落的城市一般。

原页面

除了“图形化”你的数据之外,Isometric Contribution还将你的情况统计,将你一年内的提交状况,以及“最忙“的一天提交数目统计出来。
你是想要建立起一座绿色的城市,还是想要一片白茫茫的荒地?
——一切由你自己选择
Isometric Contribution同样是开源项目,地址:Isometric Contribution

略显无聊却有用——Avatars for Github

Avatars for Github是一款从名字就能看出功能的Chrome拓展,它可以实现一个简单的功能:显示出GitHub用户的头像。

可能对部分人有用(逃
项目源代码地址:Avatars for Github

GitHub夜间主题——GitHub Dark

最后推荐的不是扩展,而是一款Stylish主题:GitHub Dark
这款主题可以使GitHub以夜间模式呈现

妈妈再也不担心我晚上撸代码眼瞎啦
下载安装地址:GitHub Dark
需要先安装Stylish这款拓展才能使用
那么这篇关于GitHub拓展的文章就到这里了,第一次投稿,有所不足请大家多多包涵。希望今后能为大家推荐更多的有趣Chrome扩展和应用。

123

KnightHart

一个简单的个人博客

24 日志
17 标签
© 2019 KnightHart
由 Hexo 强力驱动 v3.7.1
|
主题 – NexT.Muse v6.5.0