中文正在被谋杀

不信人间尽耳聋。

作者:摩登中产
来源:摩登中产(ID:modernstory)
 

怒发冲冠,临表涕零。

01

不久前,脱口秀大会第五季上,零零后小姑娘拉宏桑,四灯全亮,顺利晋级。

 

她表演中用了大量网络词汇,比如“我真的会谢”、“栓Q”,谤誉加身,一路冲上热搜。

 

评委中,李诞也亮灯支持。几年前,他还公开说“网络词汇全是垃圾,劝你们不要用这些词”。察言观色者从不会逆势而行。

 

大潮已势不可挡。加油是“奥利给”,失败是“芭比Q”,表示无奈是“咱就是说一整个大无语”,最后万物都可绝绝子。

 

姐妹要叫集美,小狗要叫修勾,发言开篇常是“我真的会谢”,结尾往往是“小丑竟是我自己”。

 

喧嚣的一天,从微博上的姐妹调侃开篇,由直播间的虎狼之词收尾。弹幕、评论和推送中,网络词汇无孔不入。

 

有些表达已经沉降固化。小学生作文中已经出现“扎心了”、“干饭人”、“时间过得好快鸭!”。考卷为舔字组词,有学生组了舔狗。

 

异化的词汇尚可望文生义,字母组合则恍如天书,yygq还能拼出阴阳怪气,yjgj则雾水满头。去年参加活动时,甄子丹一本正经问yyds是什么,是以一打十么?

 

中年人感慨着物是语非,新生代欢呼着网络盛宴,而更年轻一辈,生在茧房之中,恐怕以为中文生即如此,浑不知如果倒溯语言长河,他们错过了怎样的绝美壮阔。

 

古人的中文之旅,大多从私塾启程,私塾第一课便是对联。

 

幼童的中文审美从“天对地,雨对风”开始,品味了秋月与晚霞,触碰了意蕴和气象,从而奠定中文的根基。

 

那些出口成章的少年,常享超人一等的礼遇。

 

骆宾王讨伐武则天,怒斥“一抔之土未干,六尺之孤何托”,武则天听后反而惜才,称人才流落草野是“宰相之过”。

 

和他齐名的王勃,去滕王阁时不过布衣少年,但行文惊得都督慌张离座,孤鹜落霞,秋水长天。

 

到了李白,更可遭金龟换酒,唤力士脱靴,几句诗就能让整个大唐如痴似醉。

 

那是传承千年的中文审美,言辞即学识,出口即文化。

 

柳永的最高赞誉是“有水井处皆有柳词”,秦观女婿被狗咬仍不忘高呼“我乃山抹微云秦学士之女婿也”,没几个人能说出苏轼官职,但大多会念“但恐琼楼玉宇,高处不胜寒”。

 

唐寅不过一介潦倒书生,所有不过草庵桃花,但因满口锦绣,足以倜傥五百年。

 

高中课文中,贾政考究贾宝玉学识,让他给大观园拟联,其中有一联写道“幽窗棋罢指犹凉”,当年不觉怎样,多年后,越想越觉凉字之妙。

 

这便是中文独有之魅,它能惊风雨泣鬼神,能观沧海越星汉,能念天地之悠悠,独沧然而涕下。

 

倘若熟读经史,它能让红脸汉子,抱拳说:某誓与兄患难与共,终身相伴,生死相随,有渝此言,天人共戮!

 

倘若不会,便只能在旁憨憨说道:俺也一样!

02

传承千年的中文审美,沉淀出底蕴深厚的中文环境,文化得以滋养其中。

 

民国乱世,战火狼烟,山河动荡叠加着文言文白话文更迭,但即便如此,中文也未失传承。

 

民国幼童,从《三字经》一路读到《幼学琼林》《古文观止》,最后再学着读报上新文章。

 

翻看民国报纸,平民征婚启事写道“望之若庄严,亲之甚和蔼”,结婚证书上印着“看此日桃花灼灼,宜室宜家”,即便求人代写书信,也不忘加上“天涯咫尺,海天在望,不尽依依”。

 

保存香火的西南联大,无论文理都视国文为第一学科,国文不及格不可毕业。

 

最受欢迎的中文课,是罗庸讲杜甫诗。他上课不带片纸,所有诗词和历代注解,都能随手写在黑板上。

 

罗庸口才极佳,出口成章,一度受邀到昆明广播讲解中文。他说不带片纸,其实是因藏书轰炸被毁,但“诗书绝,犹有舌”。

 

同校的朱自清则说,乱世更应“弦诵未绝”,我们所说的话,传承着中华。

 

那年,外来文化和流行文化同样冲击着中文,但在中文环境中,它们别有表达。

 

西南联大设在昆明后,戏院老板请吴宓教授翻译好莱坞片名,他信手译出《魂断蓝桥》、《出水芙蓉》和《翠堤春晓》。

 

多年之后,影迷仍在感叹,“翠堤春晓,这么美的名字怎么想出来的?”

 

江山平复后,中文之美绵延更长。在香港,黄霑以歌词名震香江,获评四大才子,最是不拘小节。

 

然而流出的手稿可见,他的行文极为严谨,有多轮涂抹痕迹,几乎每个字词都反复斟酌。

 

刘德华刚开始写歌时,黄霑毫不留情,“歌词写得文理不通,又臭又烂,这么笨还当作词人?”

 

和他同列四大才子的金庸,对遣词用句更为谨慎,他的书稿几经修订,并在修订版自序中称“几乎每个句子都曾改过”。

 

他的小说和黄霑的歌流入内地,几代人从此知道“浪奔浪流,万里江水滔滔永不休”,“秋风清、秋月明,落叶聚还散,寒鸦栖复惊”。

 

1995年,语言学家郝铭鉴创办期刊《咬文嚼字》,创刊词说:刊物虽小,但语文规范化,兹事体大。

 

多年后,他受访说:“一个现代人,他的修养表现在非常优雅地运用我们的母语正确地表达自己的感情。”

 

2011年,《咬文嚼字》批评故宫送锦旗,将“撼祖国强盛”中的“捍”写成了“撼”。

 

2012年,《咬文嚼字》批郭敬明对文字缺乏敬畏,其博客错字连篇,小说用典混乱,却流传甚广。

 

当然,《咬文嚼字》也没放过韩寒,称韩寒堪勘不分,劝他“传统的语文教育毕竟蕴含不少养分,聪明的韩寒还须补一补语文课”。

 

那年,传承与坚守还在,杂志上引用着余光中的句子:

 

只要仓颉的灵感不灭,美丽的中文不老,那磁石一般的向心力当必然长在。

03

2010年,央视贺炜解说世界杯英德大战,散场时,他即兴说:

“我们想想吧,此时此刻,在柏林,在慕尼黑,在汉堡,在科隆大教堂,肯定有无数德国球迷为之欢欣鼓舞。而在伦敦,在利物浦,在曼彻斯特,在泰晤士河边的小酒馆,肯定也有无数英格兰球迷为之黯然神伤。在生命如此有意义的一个时间节点,我们大家一起来经历,共同分享,这是我的幸福,也是大家的幸福。”

 

他因此被赞为解说席上的吟游诗人,倾慕者众多。

2018年,韩国平昌冬奥会,央视解说再展语言之魅,点评羽生结弦时,主播陈滢化用《洛神赋》:容颜如玉,身姿如松,翩若惊鸿,婉若游龙。

 

然而,三年后,谷爱凌夺冠,全网已满是“谷爱凌yyds”。

 

不止谷爱凌,在此之前,杨倩夺得东京奥运会首金,全网惊呼yyds。全红婵一场决赛跳出三个满分,全网依旧yyds。

 

一切改变源自中文环境的垮塌。曾经,公众接触的中文信息,大多经过字斟句酌,报亭里最不畅销的报纸,也有审校环节,任何一本小说,都要经历出版社三审三校。

 

王蒙说,即便成名之后,人民文学出版社审校他的小说,仍“极其仔细,不厌其烦,细得有时我都受不了”。

 

网络小说兴起后,纸质小说风光不再,上海作家陈村说:

“按照传统出版的要求,10000字里不应该出现2个以上错别字,但是以这个标准来衡量网络文学,基本上全部都是假冒伪劣产品。”

 

而随着新媒体登场,报纸谢幕,中文环境进一步恶化。大量自媒体并无审校环节,反而加入追逐流量的狂欢。

挖掘机要叫“呕泥酱”,消防员要叫“蓝朋友”,连新版《天龙八部》官博,宣传文案都在用“U1S1”“美滴狠”,网友吐槽:剧组是玩儿快手的吧?

 

短视频浪潮完成对中文环境的最后一击。大批走红主播,既无口才,也无学识,精致言辞也不符合粉丝群体。网络梗更直接,还能掩去尴尬。

 

yyds出自英雄联盟直播,绝绝子出自女团选秀,奥利给出自快手热搜,芭比Q出自吃鸡游戏中被烧后的自嘲解说。

 

粗鄙的闭环至此完成。新生代主播掌控话语权,网络词汇成为流行潮,平台用算法追逐,循环扩散。

 

那些词汇,最终织成巨大的文字茧房,生生灭灭均在其中。中文正在被谋杀。

 

这是一场令人绝望的罪案。挣扎者们唯一能做的,不过是闭门读书,尽量洗涤污染。

不求腹有诗书气自华,但求能坚持中文最后的审美。

 

黄霑晚年时,找人刻了一印章,“不信人间尽耳聋”。

 

他已触碰到粗鄙的潮汐,但他信中文有最后的倔强。

 

转自:https://mp.weixin.qq.com/s/m7x7oC4qDieO2ZwY548abA

羊了个羊,通关秘籍

最近火遍朋友圈的一款游戏“羊了个羊”,相信大家都被虐过吧!

明明那么“难”的游戏,怎么朋友圈一堆人在晒通关成果呢?

本篇文章来介绍“通关” 的黑科技,让每个人都有机会秀一把。

# 1. 羊了个羊

本来在一个平淡的夜晚,困了。找个小游戏玩一玩提提神,“羊了个羊”?看着还行,玩一玩第一关,这么简单,都给我整困了,一会能睡个好觉了,第二关,哎,这游戏有点意思哈。。。

凌晨三点了。。。

哎呀,来劲了,来劲了,从来没有第二关给我卡的死死的游戏。。。我就不信了

。。。。

我待羊羊如初恋,而它虐我千百遍。。。

第二天到公司顶着重重的黑眼圈拖着沉重的身体,和同样重重的黑眼圈的同事相遇,相视一笑。我问:你也是羊?同事:什么阳,我可没阳,我绿码!我是加班通宵上线,现在要回家。

好吧!苦逼的娃。。。

到了办公室本着死道友不死贫道的精神,为了广大同事的睡眠质量,安利了这个简单好玩(丧心病狂)的小游戏,增进同事之前的友情,第二天接到了以下反馈:

羊了个羊,通关秘籍

第二天上班被同事集体声讨,胁迫,追打,按在地上死死摩擦(我这是何苦的自作孽)。在我们“心平气和的探讨”后,我们“打”成了协议:由我帮他们通过这个好玩(BT)的游戏。

我坐在工位苦思冥想,实验了几次以请假为由回家而被同事堵门口而失败的方案后,又开始苦思冥想的想解决方案。终于,在我薅光了我工位上的小绿植之前,脑子 灵光一闪。常规的路走不下去,我为什么不学魔法那!!!所谓道高一尺魔高一丈。我玩不过你我还不能修改你的接口吗?!

常言道:黑猫白猫,抓住老鼠都是好猫!

是时候祭出我的大杀器了,技术人员的不二神器:Charles!!!

什么你问我何为Charles?Charles,旅游必备良药!!!杀人放。。呸,抓包必备神器!!!修改弱网无所不能!

# 2. 环境准备

Charles 是在 PC 端常用的网络封包截取工具,详细介绍感兴趣的同学可自行搜索,我要抓紧时间破解,完成同事们的心愿!下班前救回自己的狗命!

羊了个羊,通关秘籍

Charles官网下载安装包,下载成功后根据指示安装即可

官网地址:www.charlesproxy.com

(ps:破解方案本期就先不介绍了)

 2.1 连接手机

1、配置http代理

羊了个羊,通关秘籍
羊了个羊,通关秘籍

2、手机上连接代理

在手机WiFi中配置手动代理,输入安装Charles的电脑的网络地址,端口填8888。(注意:手机WiFi要和电脑同一个哦)

 2.2 观察接口

万事俱备,只欠东风。让我们瞅瞅这个Charles抓了个啥出来。

羊了个羊,通关秘籍

啥?!!这怎么是https的,都是乱码啊?

莫慌,天将降大任于斯人也,必先。。。百度

其实是因为缺少SSL代理的原因哈,我们继续操作,打开电脑上Charles

 2.3 配置SSL代理

首先在charles的 Proxy选项选择SSL Proxy Settings

羊了个羊,通关秘籍

然后在弹出的对话框中点击add,添加需要监视的域名。域名支持 *号通配符,如:抓取所有的https请求,可以填写 *:443

 2.4 手机安装证书

以IOS为例,在Safri上打开Charles的根证书下载网址:chls.pro/ssl 。

接下来,在设置->通用->VPN与设备管理 选择刚才的证书进行安装。

然后,在设置->通用->关于本机->证书信任设置 (这一步很重要) 刚刚安装的证书的开关打开信任就可以抓取加密包了。

欧克!让我们再来看一看抓到了什么东西!

羊了个羊,通关秘籍

look,我们看到了什么,这不是通关的接口吗?让我们直接选中接口然后点击右键

羊了个羊,通关秘籍

让我们来具体分析一下这个接口,距离成功已经仅剩一小步了。激动的手忍不住颤抖,晚上终于不用挨揍了。。😭

!@#!@¥#%  分析中。。。。

这个接口是get请求,那它的参数都暴露出来了啊,让我们看看他的请求路径:

https://cat-match.easygame2021.com/sheep/v1/game/game_over?rank_score=1&rank_state=2&rank_time=25&rank_role=1&skin=1

emm 。。。我觉得晚上好好吃一顿吧,能抗揍!

开个玩笑,这些参数看着就rank_state这个比较靠谱那我们修改一下它的值,别人都是1,凭什么你是2!!!

调用一下,等下等下,header里面的差点忘了,让我看看,哦吼,发现了什么

羊了个羊,通关秘籍

t和content-type,这次让我们再来调用一下!哦吼!成功了!让我们来看看小程序的通关记录

羊了个羊,通关秘籍

欧凯!通关了!通关了!敲锣打鼓告知同事们!晚上不用挨揍了。。

结果。。。你皮肤那?为啥没有?搞不出来皮肤照样揍你!。。。

等等。。。我这个皮肤为啥没有搞出来?难道是我少调用了接口?刚才太着急了?让我们再次分析分析。这个接口通关后就没有调其他接口了啊?

# 3. 黑科技:Map Local

经过反反复复的查看,没找到皮肤的接口,古人云,世上无难事只怕肯放弃。来吧,我抗揍。大义凌然的去挨揍的路上突然想到为啥不能走正常流程修改接口返回值那?再让我们分析分析。。。

羊了个羊,通关秘籍

每次进游戏的时候总是调用了2次接口,让我看看看它的返回值。

羊了个羊,通关秘籍

嗯~ 这个就是地图文件了,那么80001里面的返回这么少,90016的返回这么多,盲猜一下,这个就是第一关和第二关的地图文件了吧。让我们开启海克斯黑科技。替换接口返回值!!!

Charles修改返回值有多种方法,今天我们先介绍第一种方法:

1、 map Local         将匹配的url映射到本地文件。这个需要首先将url右键,save Response,将原有报文保存到本地,然后修改接口映射到该文件即可。也可以自己创建文件映射

羊了个羊,通关秘籍

选中最后一行 Map Local,然后选中80001的接口返回值

羊了个羊,通关秘籍

欧克 ,让我们再来一次。

我们重新发起游戏,因为修改接口后再次调用接口页面才会重新渲染,再来一次,欧凯!第二个变得像第一关一样easy啊!!!皮肤触手可得啊!!!朋友们!晚上不用挨揍了啊!!!

羊了个羊,通关秘籍
羊了个羊,通关秘籍

就当我想再次兴高采烈的奔向我可爱(暴力)的同事们时,我冷静了下来,毕竟以我这么严谨的性格,肯定还要再多检查几遍的。绝不是因为怕挨揍。然后我们简单测试看一下,纳尼?我不就是把小程序删除重新进,我的皮肤为啥子没了?难道?它的资源都缓存在客户端!oh no!我说为啥没看到请求的接口资源那!

时间紧迫让我们再来一次之前的操作,重新加入羊群,当上CEO,重振羊风!!

现实再次当头一棒,加入羊村后当天就不能再次加入了啊?天要亡我?距离下班还有1小时?我抬头看了看时间,稳住,不能慌,大不了就是挨一顿打。

几分钟后。。

咋办?咋办?要挨揍吗?一点思索一边狂点游戏入口,哎~?为啥没有调接口那?我有个大胆的猜测?莫非!为了减少后端交互?所以在客户端做了限制?本着大胆猜想,小心求证的想法,我修改了本地时间!!!哈哈哈,果然,天才的点子得到了验证,居然绕过了倒计时的限制,可以重新进入。

经过我多次重复操作后,终于,我得到了已下的皮肤。。。

羊了个羊,通关秘籍

老泪纵横,终于不用挨揍了。。。

学好数理化。走遍天下都不怕。

所以,我为什么要推荐他们玩这个游戏那。。。。。

羊了个羊,通关秘籍

转自:https://mp.weixin.qq.com/s/G1r49RJutfSQCg2wnO222A

程序员用12小时复刻《羊了个羊》,代码已开源!

来源 | CSDN(ID:CSDNnews)
作者 | 开发游戏的老王
责编 | 张红月
 
【CSDN 编者按】过去一周,不少人被《羊了个羊》这款游戏虐的不轻,有多少个“再玩一把”的念头,就有多少次被打入深渊的凄凉,甚至还有人评价道:“什么事都可以过去,除了《羊了个羊》第二关”。因此,有用户抱怨是“程序员故意挖坑制作死关卡”。然而在本文作者老王一探究竟以后,才发现并非程序员挖坑,而是该游戏的本身,就有很多天然的坑”。
昨天有朋友和我说:“最近有个叫《羊了个羊》的游戏爆火,就是太难玩了,你能复刻一个不?”话说上次玩休闲游戏还是在几年前,但是朋友之托必须赴汤蹈火啊,二话不说,开整!然而,冲动是魔鬼,直到此时此刻,老王也没能亲手玩一局原版游戏,不知道是游戏入口设计得太隐蔽还是网络加载太慢,无论手机端还是PC端,游戏都停留在如下界面。
所以本次游戏的复刻,完全是基于各视频网站云观摩的结果,好在游戏的玩法不是特别难理解。复刻使用的开发工具是Godot Engine(使用其它工具开发原理也是相似的),目前项目已经开源到了GitCode:Godot版《羊了个羊https://gitcode.net/hello_tute/SheepASheep
接下来我将通过临摹游戏的方式推测一下这个小游戏的实现原理,本文主要面向对游戏开发有兴趣的朋友,欢迎大家多提宝贵意见。
程序员用12小时复刻《羊了个羊》,代码已开源!

先说说玩法

第一眼看到《羊了个羊》,老王首先想到当年的《连连看》,不过有网友爆料,该游戏“借鉴”了《3tiles》。瞄了眼3tiles,是比较相似。说心里话,这个游戏的玩法并没有什么过于出众的地方,算是个中规中矩的“低卡路里”休闲游戏。
之所以成为话题作品,主要就是因为它的第2关极其低的通关率,一下子激起了众多玩家的挑战欲望。而时至今日这个“低通关率”也被网络上的众多玩家揭秘,第2关其实大概率上本身就是个死局。是程序员故意挖坑设了死局么?先卖个关子,我们先聊聊游戏的开发,然后您自己就会有答案了。
程序员用12小时复刻《羊了个羊》,代码已开源!

实现概要

游戏的整体很简单,但其中有几个实现的重点需要注意:
  • 牌堆数据结构的实现
  • 如何检测和更新可拾取的牌
先做个小定义,一个牌堆中可被拾取的牌以下将简称其为:“窗口牌”。

牌堆的结构及其数据结构

最初,我还真被这复杂的牌堆结构蒙住了,但仔细研究一番发现,无论多么复杂的牌堆,其实都是由如下三种牌堆模式组合拼凑而成的。
  • 蓝圈圈出的牌堆模式A:上面1张牌只挡住下面1张牌;同时下面的牌仅被上面1张牌挡住。只要上面的1张牌被取走,下面的牌就成为窗口牌;
  • 红圈圈出的牌堆模式C:上面1张牌可以挡住下面4张牌;同时下面的牌可能被上面4张牌挡住,一张牌只有它上面的4张牌都被取走,它自己才成为窗口牌。
虽然上图中体现不是很明显,但不难猜想出,第三种牌堆模式B 的存在,那就是:
  • 上面1张牌可以挡住下面2张牌;同时下面的牌可能被上面2张牌挡住,一张牌只有它上面的2张牌都被取走,它自己才成为窗口牌。
对于牌堆模式A,有些朋友会迫不及待地用“队列”或“栈”实现它,这样做有两个缺点:
  • 逻辑上牌堆模式A的窗口牌也可能是2维的,如果用队列实现就限制了它的灵活性;
  • 牌堆模式B和C都不好用队列实现,所以想追求数据结构的统一,还要另求他法。
实际上无论牌堆模式A、B还是C,都不过是3维数组结构,上图中模式A看起来特殊,无非是它的x,y维度都为1罢了。而三种牌堆的区别也无非就是当一张窗口牌被取走,检查牌堆是否出现新的窗口牌的方法罢了。
牌堆模式A
程序员用12小时复刻《羊了个羊》,代码已开源!
牌堆模式B
程序员用12小时复刻《羊了个羊》,代码已开源!
牌堆模式C
程序员用12小时复刻《羊了个羊》,代码已开源!
牌堆的数据结构
我将其定义为MContainerBase基类
#MContainerBaseextends Node2Dclass_name MContainerBase
func _ready(): add_to_group(name) add_to_group("game") var Mask = FileReader.read(mask_file,null) box.resize(size_x) for i in range(size_x): box[i] = [] box[i].resize(size_y) for j in range(size_y): box[i][j] = [] box[i][j].resize(size_z) for k in range(size_z): if Mask == null or Mask[i][j] == 1: box[i][j][k] = add_tile(i,j,k,get_parent().distribute_face()) else: box[i][j][k] = null for x in range(size_x): for y in range(size_y): for z in range(size_z): check_is_on_top(x,y,z)
最基础的牌堆就是一个 x*y*z的三维数组,我们可以使用一切方法构造想要的排队形状:柱形、条形、甚至金字塔形。这都不会影响后面程序的实现。
项目中为了增加这个“大方块”的多样性,我还给它设置了如下的“遮罩”,这就是游戏中CSDN文字的由来。当然我们还可以通过“遮罩”来自由定义窗口牌,这部分就请大家自由发挥了。
# S形遮罩[ [0,0,0,0,0], [0,0,0,0,0], [1,1,1,0,1], [1,0,1,0,1], [1,0,1,1,1],]
程序员用12小时复刻《羊了个羊》,代码已开源!

如何检测和更新可拾取的牌

三种牌堆模式分别派生自MContainerBase,并对应着如下三种检测方式:
牌堆模式A
仅检测自己正上方是否有牌
#1 Cover 1extends MContainerBase
func check_is_on_top(x,y,z): if has_tile(x,y,z): if not has_tile(x,y,z + 1) : (box[x][y][z] as MTile).set_is_on_top(true)
牌堆模式B
检测自己上方两方位是否有牌
#1 Cover 2extends MContainerBase
func check_is_on_top(x,y,z): if has_tile(x,y,z): if z%2 == 0: if not has_tile(x,y,z + 1) and not has_tile(x - 1 ,y,z + 1): (box[x][y][z] as MTile).set_is_on_top(true) else: if not has_tile(x,y,z + 1) and not has_tile(x + 1 ,y,z + 1): (box[x][y][z] as MTile).set_is_on_top(true)
牌堆模式C
检测自己上方四方位是否有牌
#1 Cover 4extends MContainerBase
func check_is_on_top(x,y,z): if has_tile(x,y,z): if z%2 == 0: if not has_tile(x,y,z + 1) and not has_tile(x - 1 ,y,z + 1) and not has_tile(x,y - 1 ,z + 1) and not has_tile(x - 1,y - 1,z + 1): (box[x][y][z] as MTile).set_is_on_top(true) else: if not has_tile(x,y,z + 1) and not has_tile(x + 1 ,y,z + 1) and not has_tile(x,y + 1 ,z + 1) and not has_tile(x + 1,y + 1,z + 1): (box[x][y][z] as MTile).set_is_on_top(true)
在Godot中,这三种牌堆模式还可以通过场景节点制作成预制体,这样关卡设计师就可以轻松地制作出美观的关卡了。
程序员用12小时复刻《羊了个羊》,代码已开源!
程序员用12小时复刻《羊了个羊》,代码已开源!
程序员用12小时复刻《羊了个羊》,代码已开源!

如何生成新关卡

简单了解游戏规则后,我们就不难推导出,每个关卡能被通过的一个必要条件就是每一种图案的总数,必须能被3整除。实现方法如下:
var tiles = []export var initial_tiles = { 0:10, 1:10, 2:10, 3:10, 4:10, 5:10, 6:10, 7:10, 8:10, 9:10, 10:10, 11:10, 12:10, 13:10, 14:10, 15:10}
func _init(): for key in initial_tiles: var num = initial_tiles[key]*3 for i in range(0,num): tiles.append(key) tiles.shuffle()
其中字典initial_tiles 的key对应着每一种图案,后面的value对应着这一关该图案出现的“对数”(此处1对等于3个)。按照value乘以3的数量存入数组tiles(下文称之为:待发牌池),然后把待发牌池中的元素打乱顺序,等待“发牌”。

关于游戏中的坑

很多朋友抱怨:“程序员故意挖坑制作死关卡”。其实不然,他无须故意挖坑,因为这个游戏本身就有很多“天然的坑”,如果不使劲填坑,它们自然而然就属于你了。而这里就隐藏了几个可致命的坑:乍一看,待发牌池中所有的图案都可以被3整除那么一定可以通关?那可不一定:
  • 只有桌面牌堆中牌的数量和待发牌池牌数一致,所有的牌才能“落地”,而游戏中桌面牌堆到底有多少(层)本身就是个迷。并且如果没猜错的话,在每一局设计者先要确保牌堆形状好看,然后再使堆牌数和待发池的牌数一致。二者哪怕差1个,也会造成死局。
  • 上文说了,桌面牌数和待发牌池的牌数一致只是过关的必要而非充分条件。即使该条件满足,如果相对于牌桌上的牌数以及图案数量,窗口牌数太少,也会造成死局。比如下面这个极端的例子:假设游戏共有 15种花色,而牌桌上只有这个模式A牌堆,它有90张牌。那么玩家只要在连续7次拾牌时没有遇到3个相同图案的牌,就“必死无疑”了。
程序员用12小时复刻《羊了个羊》,代码已开源!
其实这个游戏,一方面要控制关卡的难度,另一方面又要保证能通关本身就是一个相当困难的问题(至少老王没有想出办法)。而设计者反其道而行之,(可能)没有花力气去设计算法,把坑留给玩家,得到了极低的通关率,反而制造了话题并形成爆款。如此说来,这确实是个抖机灵的“设计”。但老王认为这种“设计”在游戏策划中是不宜被借鉴的,就像现在市面上泛滥的悬疑剧,开始埋坑无数,吊足观众胃口,最后烂尾不了了之一样,长此以往观众(玩家)对于悬疑剧(游戏)的信任感就被消费殆尽了。

洗牌道具的实现

洗牌的实现原理很简单,把当前桌面的牌记录在一个数组tiles中,当需要洗牌时,先打乱一下数组中牌的顺序,然后让桌面上每一张牌到tiles中重新取一个值。再来个眼花缭乱点的动画,还真挺像那么回事儿。
程序员用12小时复刻《羊了个羊》,代码已开源!
func shuffle_tiles(): tiles.shuffle() tiles_index = -1 func redistribute_face() -> int: tiles_index += 1 return tiles[tiles_index]

遮罩文件的读取

这里要夸一下Godot Engine,它的很多功能真是方便,比如下面这个str2var它可以简单粗暴地直接把字符串转换成对象类型。
class_name FileReader
static func read(path,default_data): var data = default_data var file = File.new() file.open(path,File.READ) var content :String = file.get_as_text() if not content.empty(): data = str2var(content) file.close() return data

对象间的通信

这个小游戏中存在大量的对象间的通信需求:牌和牌之间、牌和牌堆之间、牌和关卡之间、牌堆和关卡之间。为了快速实现游戏,我大量使用了Godot Engine的Group机制,不得不说Group是Godot Engine最赞的设计之一。
程序员用12小时复刻《羊了个羊》,代码已开源!
程序员用12小时复刻《羊了个羊》,代码已开源!
程序员用12小时复刻《羊了个羊》,代码已开源!

总结

小游戏《羊了个羊》,从策划和开发的角度来看并不困难,然而“瑕疵”竟然能够成为“噱头”,也让人不得不感慨“游戏世界真的一切皆有可能啊”。
※本文内容来自授权转载,不代表TechWeb观点,转载请联系CSDN(ID:CSDNnews)
 
—【 THE END 】—
转自:https://mp.weixin.qq.com/s/ELyL8PsVxqFMnRgDbsUCcg

上海高考20年间变迁:本地高校招生人数及占比变化

父母自己当年的“高考记忆”,是阻碍理性教育选择的一个重大因素。所以我这个系列将完整细致得做一次20年间上海高考变化的数据分析,以便各位在审视当下上海教育格局的时候,脑中能理性锚定自己当年的经历。

前文回顾:

本地高校办学变化及分数排位变化

文章中数据来自以下书籍:

上海高考20年间变迁:本地高校招生人数及占比变化

今天这篇,直接来讨论一个核心问题:各本地高校在上海招生数20年间的变化。

光比较裸招生数变化还欠缺统计对比意义,因此我在下表中还把20年前后的招生数除以该年上海高考实际参加考试人数,得出比例,并将比例做了计算。

上图

上海高考20年间变迁:本地高校招生人数及占比变化

和诸位读者的体感几乎一致。

招生数占比减少,是无论如何都让人心情不愉快。这背后有很多理由和政策限制,但是作为一个上海人来说,这让人很不舒服。

具体到各档,复交的S档中,两校本部招生占比都有微增,但是两校的医学院缩招很严重。

一医二医在合并前,上海生源的比例非常高。其中二医作为上海地方市属高校,合并前本地生源的比例更高。

两所医学院的合并故事,以及20年间缩招的具体专业细节,我们后面再提。

A档的同华财三所高校,是20年间招生下降幅度最大的。其中又尤以同济大学的减招为上海人所诟病。

上海高校中,复、交、同、华、财、外、东华、华理八所为部属高校。部属高校由教育部出资,属于全国人民。上海仅对就读这八所学校的上海生源按人头给予财政支持。

既然属于全国人民,那么不能在招生环节对所在地太过倾斜,是一个合理的政策。从本文分析的起点2001年前后,教育部就在力推降低部属高校所在地生源比例。

这项工作在全国各地做得“有好有坏”。比如浙大、中山大学、华南理工、哈工大等,本地生源占比至今任有50%左右。

而上海的985高校比例都在20%以下。本段的主角同济大学,这个比例为最低:10%。

而教育部的要求,是降到30%以内。

这里引用2007年时任同济大学校长裴刚接受中国青年报采访时的一段原话:“同济是全国的同济,我们当然希望多在外地招生。其实为上海服务并不是简单地在上海多招生,因为学校培养的人才也可以留在上海为上海服务。上海市以外的生源越来越多,这样也可以体现上海海纳百川的精神,聚集更多更优秀的人才。”

我的读者里面也有当年收益于此而来到上海,成为上海人,以上海为家,为傲。

因此这是一段绝对正确的话语。

但是作为一个父亲,看到这段话,脑中所有的理智和经济学都会被抛到一边,只想揍这个人,和采访他的记者。

同华财各自的具体专业缩招情况我们到本系列后续文章再讲。

B档六所高校(上外、华理、海医、华政、上大、东华中)整体招生占比下降幅度小了很多。

上外和华理一直安安静静承接着上海冲击本地985级别高校未果的文科和理科生。两所学校20年间招生占比几乎没有减少。

上面最后这句,字打完我眼眶有点湿润。

我始终觉得这样的优等生,背后实际上是在获得上海政府更多的支持的。希望的确如此。

海医伴随着2017年从二军大改名的另一项改革措施,是开始招收非军籍生。军籍生从入学开始就是军人,免学费,毕业后服从分配(略有一点点双向选择的余地,长海长征东方肝胆)。

非军籍生自费就读,毕业后自谋出路。深化军改的一个产物是军队文职人员这个新类别(聘用制合同工,面向社会招生)。部队院校的非军籍生毕业时有较高可能成功应聘军队文职人员。

上面这两段话对应到普通医学院,就是在说你从医学院毕业,要拿三甲医院的编制几乎不可能。但是没编制合同工先干起来,那是可以的,职业生涯其实也挺稳定。

所以加上非军籍生,海军医大成为了20年间招生比例扩大最多的一所本地高校。这当然也和二军大当年招生人数实在太少有关。

华东政法大学是B档里占比增长幅度最高的院校。G大看了下20年间这所学校的各专业招生占比,前后一致,都以法学为绝大头,并没有盲目扩展到其他专业。

所以各位以后在看到类似华政就业率不好的时候,还请多给理解和支持。

上海大学。

上大啊上大,你让我从哪里开始说。

如果部属高校因为国家政策限制而减少本地生源是一件我们不得不接受的事情,

上海大学作为市属高校,100%由上海财政支持,由上海纳税人掏钱养的高校,上海教育的长子,浓眉大眼的,也能背叛革命的吗?

上海2021年本地生源的占比大概是40%。这个比例甚至低于部属高校浙江大学在浙江的招生比例,也低于部属高校中山大学在广东的招生比例。

在完全没有政策限制的情况下做出这个选择,我只能理解成这是上大的主动选择:上海的生源,已经无法支撑上海大学世界级高校的梦想了。

减少上海招生数量,一方面可以用来招收外地生源。上海大学会这么做,那就说明外地生源的确优于上海生源。

同时本地招生占比减少后,本地的分数也上去了,一箭双雕。

但是上大咱们能再讨论下这事么?八大中位数才能进上大,你确定八大中下的孩子你都看不上了么?

本档还有一所部属高校东华大学。他在上海的大幅减招,可能是长期被上海考生和家长冷落的结果。

C、D两档的高校招生占比基本上都是上升的。这使得上面这22所高校加总的招生人数占比在20年间几乎没有变化。

然而C、D两档的扩招,无法掩盖S、A、B三档的减招。

这很不好,很不好。

今天的细致数据整理,还让G大发现C档里面的上海理工也缩招的厉害。我们回头一起分析下这所学校的专业情况。

聊以慰藉的,是2001年以来上海新增的高校,让上海的本科率相比20年前翻倍有余。

文章末尾,我把新学校一起算进来,出一版2021年全部上海本科高校的招生数和占比:

上海高考20年间变迁:本地高校招生人数及占比变化

转自:https://mp.weixin.qq.com/s/EzlNbK84Kezp3QBEL4qp6g

上海高考20年间变迁:本地本科高校办学及分数线排位变化

G大在做咨询和日常与读者沟通的过程中,发现父母自己当年的“高考记忆”,是阻碍他们做出理性教育选择的一个重大因素。

我的长期读者经过我的不断沟通,现在至少知道上海大学很难考。然而这种浅层认知,一到制定教育策略时,就又会被各种“高考记忆”所干扰。

所以我一直想完整细致得做一次20年间上海高考变化的数据分析,以便各位在审视当下上海教育格局的时候,脑中能理性锚定自己当年的经历。

我在2年前曾经写过一篇《现在上海考大学比我们小时候难很多这种感觉到底是怎么回事》,引起了很多共鸣。文中的一些数据表格至今仍在多处被引用。

那篇文章今天看起来略显粗糙。所以G大打算细致做一遍数据梳理和分析,重新写一遍这个话题。

带着上述想法,我一头扎进了故纸堆。

上海高考20年间变迁:本地本科高校办学及分数线排位变化

这会是一个系列文章。本文作为开篇,先把20年间上海本地高校的一些变迁描述清楚。

截止2021年,上海招收文化生的本科层次高校共计43所。这个数字在20年前是22。

要厘清这20年间上海高考的变化,我们要先从上述这翻倍的院校数量讲起。

在2021年招生的43所高校中,有18所在20年前就存在,且未改过校名:

上海高考20年间变迁:本地本科高校办学及分数线排位变化

其中复旦大学上海医学院在2001年是第一次以这个名称招收本科生。在此之前,该校的名称是上海医科大学。

音、体、戏三所高校虽然列在上表中,但他们在2001年不招收文化生,仅招收相应的艺术、体育生。

二工大在2001年时为专科办学层次高校。

43所中有8所本科层次的高校在20年间更改了校名:

上海高考20年间变迁:本地本科高校办学及分数线排位变化

二医大是2005年“合并”入交大的。

一医、二医各自合并入复旦和交大以后,目前都保留了相对独立的财政、办学、招生。这里面的八卦和曲折,我们在本系列后续文章中一并讲解。

二军医大于2017年随着深化国防改革而更名为海医大。

其余六所都是从学院升级成大学。

下面这类的9所高校,在2001年为专科级别高校,后在20年间升级成本科级别的院校:

上海高考20年间变迁:本地本科高校办学及分数线排位变化

和2001年相比,目前上海高考本科率得到了大幅提升,我们在本系列后续文章会给出具体数字。

对本科率提升贡献最大的,是上面这个类别的高校。

对于大多数父母来说这个类别里的高校很陌生,完全在认知边界以外。这很正常。

最后一类,是20年前根本不存在,完全新设立的本科高校:

上海高考20年间变迁:本地本科高校办学及分数线排位变化

上科大和上纽大是两所新贵,目前已经跻身上海头部高校的行列。

天华和贤达,是目前上海本地仅存的两所独立学院。独立学院是指民间资本和公办高校联合,依托公办高校的名称和办学资源,所建立的民办高校。

在过去的20年间上海曾经兴办过5所独立学院。除了上述两所以外,表中的视觉艺术学院,曾名为复旦大学上海视觉艺术学院。该校现在已经完成改制,成为完全民办高校。

另外还有两所已经停办的独立院校:复旦大学太平洋金融学院,以及同济大学同科学院。其中前者在南汇的校址已经成为遗址探险的热门目的地。

据各种线索显示,目前尚存的两所独立院校,也将很快完成转制并改名。

上图中还有两所定位在职业本科的高校:中侨和立达。职业本科教育也是我们这个系列后续会重点展开的一个知识点。

最后一所是意欲仿照美国文理学院定位成高端精英小班化的兴伟学院。

20年间上海的本科高校浮浮沉沉。作为考生用高考分数投票投出来的录取分数线,也因此产生了部分变化。

下图我们先直接对比22所2001年和2021年都在本科文化生批次招生的高校,感受下他们的录取分数线变化:

上海高考20年间变迁:本地本科高校办学及分数线排位变化

具体的分析和八卦在系列后续文章中再展开。本文仅停留在让各位看看热闹,并和自己的观感做个比较的层面。

最后放一张带2021年全部本科高校的对比图:

上海高考20年间变迁:本地本科高校办学及分数线排位变化

转自:https://mp.weixin.qq.com/s/YUOx-KKYIeERR-kOIM5Orw