程序员用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

巴菲特、芒格、彼得林奇被套后,都是怎么做的?

 

今年教师节遇上中秋节,是团圆撞见了感恩,让我们回顾几位投资大师的经典语录赏明月敬师恩,从中得到宝贵的投资启示

沃伦·巴菲特

1、很多人比我智商更高也比我工作时间更长更努力但我做事更加理性你必须能够控制自己不要让情感左右你的理智以合理的价格投资优异的公司胜于以优异的价格投资平庸的公司我试图购买出色到傻子都可以经营的公司的股票因为迟早都会有个傻子来经营的

2、如果你基本从别人那里学知识你无需有太多自己的新观点你只需应用你学到的最好的知识。

3、不能承受股价下跌50%的人就不应该炒股

4、近年来我的投资重点已经转移我们不想以最便宜的价格买最糟糕的家具我们要的是按合理的价格买最好的家具

5、我对总体经济一窍不通汇率与利率根本无法预测好在我在做分析与选择投资标时根本不去理会它

6、只有在潮水退去时你才会知道谁一直在裸泳

7、当世界提供这种机会时聪明人会敏锐地看到这种赌注当他们有机会时他们就投下大赌注其余时间不下注事情就这么简单。

8、哲学家们告诉我们做我们所喜欢的然后成功就会随之而来

9、对于每一笔投资你都应当有勇气和信心将你净资产的10%以上投入。

10、短期股市的预测是毒药应该要把他们摆在最安全的地方远离儿童以及那些在股市中的行为像小孩般幼稚的投资人

11、我喜欢简单的东西

12、生活的关键在于要给自己准确定位

13、永远不要从事那些目前使人痛苦但从现在起10年后可能会大有改善的事业如果你今天不欣赏你所从事的事业可能10年后你仍不会欣赏它——巴菲特

14、别人赞成你也罢反动你也罢都不应该成为你做对事或做错事的因素

15、拥有一颗钻石的一部分也要比完全拥有一块莱茵石好得多

16、一生能够积累多少财富不取决于你能够赚多少钱而取决于你如何投资理财钱找人胜过人找钱要懂得钱为你工作而不是你为钱工作。

17、一定要在自己的理解力允许的范围内投资

18、要赢得好的声誉需要20年而要毁掉它5分钟就够如果明白了这一点你做起事来就会不同了

查理·芒格

1、好的投资具备耐心和进取心的结合但很多人并不具备这种能力它还要求你有很强的自我意识了解自己知道什么不知道什么你必须知道自己的能力范围当然很多人会觉得自己比实际聪明得多这是危险的会带来麻烦

2、不要同一头猪摔跤因为这样你会把全身弄脏而对方却乐此不疲

3、许多IQ很高的人却是糟糕的投资者原因是他们的品性缺陷我认为优秀的品性比大脑更重要你必须严格控制那些非理性的情绪你需要镇定自律对损失与不幸淡然处之同样地也不能被狂喜冲昏头脑

4、我认识一位制造钓钩的人他制作了一些闪闪发光的绿色和紫色鱼饵我问鱼会喜欢这些鱼饵吗他说我可并不是把鱼饵卖给鱼的呀

5、在遭遇一件令你难以接受的悲剧时你永远也不能因为摆脱不掉它的困扰在生活中再屡遭失败而让这一件悲剧变成两件三件

6生活就是一连串的机会成本你要与你能较易找到的最好的人结婚投资与此何其相似啊

7我喜欢资本家的独立我素来有一种赌博倾向我喜欢构思计划然后下赌注所以无论发生什么事我都能泰然处之

8一个素质良好的企业和一个苟延残喘的企业之间的区别就在于好企业一个接一个轻松地作出决定而糟糕的企业则不断地需要作出痛苦的抉择

9如果你的思维完全依赖于他人只要一超出你的领域就求助专家建议那么你将遭受很多灾难

10人们低估了那些简单大道理的重要性我认为在某种意义上说伯克夏·哈萨维是一个教导性的企业它教会一种正确的思维体系

最关键的课程是一些大的道理真的在起作用我想我们的这种渗透已经起到了非常好的作用——因为它们是如此简单

11分散投资只会令自己分身不暇宜重锤出击集中火力专攻少数优质企业创富路上便能一本万利

12要记住那些竭力鼓吹你去做什么事的经纪人都是被别人支付佣金和酬金的那些初涉这一行什么都不懂的投资者不如先从指数基金入手因为它们毕竟由公共机构管理个人化的因素少一些

13我们不会把450亿美元随便撂在那儿但你必须能判断出那个高科技股票直蹿云霄的癫狂时刻并控制自己远离你挣不到任何钱但却可能幸免于灭顶之灾

14、我就想知道我会死在何处然后我永远不去那里。

投资是令人激动和愉快的事但如果不做准备投资也是一件危险的事情没有投资体系,投资就是在撞大运!

彼得·林奇

1、投资成功的关键因素之一把注意力集中在公司上而不是股票上每支股票后面都有一家公司要去了解公司在干什么公司经营的成功往往几个月甚至几年都和它的股票的成功不同步但从长远看它们百分之百相关这种不一致才是赚钱的关键耐心拥有成功的公司终将得到厚报。

2、当你用价值投资的方法找不到一个值得投资的上市公司的股票那么就不要再费脑子了赶紧远离股市

3、不研究基本面就去买股票跟不看牌打牌是一样的赚钱的概率很小

4、通常在几个月甚至几年内公司业绩与股票价格无关但长期而言两者之间100%相关这个差别是赚钱的关键要耐心并持有好股票

5、持有股票就像养育小孩一样,除了你能做的和应该做的,你不要介入过多。无论什么时候都不要在你的证券组合里面持有 5 只以上的股票

6、永远不要投资于你不了解其财务状况的公司买股票最大的损失来自于那些财务状况不佳的公司仔细研究公司的财务报表确认公司不会破产

7、避开热门行业的热门股票最好的公司也会有不景气的时候增长停滞的行业里有大赢家

8、对于小公司最好等到它们有利润之后再投资

9、如果你用1000元钱买股票最大的损失就是1000元但是如果你有足够的耐心你可以获得1000元甚至5000元的收益个人投资者可以集中投资几家绩优企业而基金经理却必须分散投资持股太多会失去集中的优势持有几个大赢家终生受益

10、从长期来看,一个精心选择的股票组合表现总是优于债券组合或货币市场帐户但投资一个糟糕的股票投资组合,还不如把钱放到床垫下面

11、专家们不能预测到任何东西虽然利率和股市之间确实存在着微妙的相互联系我却不信谁能用金融规律来提前说明利率的变化方向

12、投资股市绝不是为了赚一次钱而是要持续赚钱如果想靠一而发财你大可离开股市去赌场好了

13、一个钟情于计算沉迷于资产负债表而不能自拔的投资者多半不能成功

14、人们宁愿承认是一个“瘾君子”也不愿承认是一个短期投资者

15、我投资组合最好的公司往往是购股三五年才利润大增,而不在三五个星期之后

16、试图跟随市场节奏你会发现自己总是在市场即将反转时退出市场而在市场升到顶部时介入市场人们会认为碰到这样的事是因为自己不走运实际上这只是因为他们想入非非

没有人能够比市场精明人们还认为在股市大跌或回调时投资股票是很危险的其实此时只有卖股才是危险的他们忘记了另一种危险踏空的危险即在股市飞涨的时候手中没有股票

17、如果人们长期在股市赔钱其实该怪的不是股票而是自己一般而言股票的价格长期是看涨的但是100个人中有99个人却老是成为输家

这是因为他们的投资没有计划他们买在高位然后失去耐心或者心生恐惧急着把赔钱的股票杀出他们的投资哲学是买高卖低

18、要抄底买入一只下跌的股票就如同想抓住一把迅速下落的飞刀

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

为什么行业专家容易被股价打脸?

从“认识”,到“变现”

1/4

认知与变现,差得不止一个专家

价值投资者都相信一句话“投资是认知的变现”,道理是这么个道理,但实际投资中,“认知”和“变现”的关系没有这么简单。

某名不见经传的上市公司宣称在当下热门赛道的产品用以新技术实现突破,并有一堆专家和实验数据,见股价也不贵,某基金经理兴冲冲地跑去让研究员拍一拍业绩。

研究员撇撇嘴,这个技术难度不是一般的大,还要下游厂家的验证期,就算是真搞出来了,两年之内不能量产,三年之内不产生利润,业绩没法拍。

基金经理决定先观望,结果股票先来三个涨停,然后盘整了一段时间后,就马不停蹄地屡创新高。

你要是觉得专家的话也不靠谱,结果半年后,股价开始一路阴跌,验证了研究员的说法。

难怪很多人吐槽,擅长认知者收获了真理,擅长变现者收获了财富,大家都有一个美好的未来。

不过,在抱怨之前,先请大家思考三个问题:

问题1、近三年不能给企业带来利润、且有很大不确定性的新技术,是不是就不应该给估值?

问题2、市场给这一类不确定的信息定价的过程是怎样的?

更深层次的问题3、研究和投资的区别在哪儿?为什么基金公司不让更懂行的研究员直接买股票,而是要让信息转一道手,让基金经理来决策?

最实际的问题4、如何让专家的观点帮助我们的投资呢?

2/4

交易定价与专业判断

以下企业经营信息都有一个共同的特点:

  • 产品实现某个技术突破,今后一两年将进行下游企业的认证

  • 某掌握技术或渠道资源的行业大佬加盟公司

  • 企业宣布进入新的热门领域,未来一两年加大投资力度

以上信息的共同点是,不会对企业今年甚至明年的业绩产生影响。

实际上,大部分经营信息,都不会对今明年的业绩产生显著影响,而估值方法,无论是PE还是PS,都是以已经发生的财务信息(静态估值)和正在发生的财务信息(动态估值)为基础进行估值,所以,围绕不影响业绩的利好事件的炒作,被统一冠以“题材炒作”。

但实际上,其中相当多的变化,会对未来的经营产生确定性上的影响。而估值是未来长期现金流的贴现,一个三年后会带来营收和利润数倍增长的新技术、新产品,就算概率不高,假设是20%,折现后给估值带来一两个涨停,在特定的风险偏好下,也是能计算出来的。

举一个更好理解的买二手房的例子:

假设你看中一套二手房,已经和房东谈好价格,结果交订金之前,市政府发布重大规划,这套房子所在的区域将被列入“XX新城”的规划核心区,未来会有一系列的人口导入政策和“学校、地铁、公园、医院”等一系列重大配置。

于是,区域内新盘暂时封盘调价、二手房源连夜提高报价,于是房东第二天告诉你,之前谈好的价格不算了,房价要涨10%。

地块还是那个地块,房子还是那个房子,企业还是那个企业,今年的业绩还是那些,但未来已经不完全是那个未来了,涨价也是正常。

任何信息都会影响资产的未来价值,进而通过贴现的形式影响现在的价格,所谓“炒题材”,实际上就是那些未来想象空间极大,但概率较小的事件,对现在的价格影响的过程。

关键在于,影响有多大。

更关键在于,定价的过程是怎样的。

这两个问题,专家说了不算,专家的作用是对技术本身的可行性、经济性进行分析,但如何定价,却是市场上的“外行”通过一连串交易行为来决定的。

3/4

市场如何给“不确定”定价

如果你是个散户,你长期投资白酒、新能源、半导体、CXO,可是,不管你看了多少研报,听过多少专家调研,写了多少本笔记,你懂的那些,也不过是这个行业的基础知识,相当于刚刚入行一年的新人,可能连“准内行”都谈不上。

相比而言,机构研究员大多是真正的专业人员,而行业专家更是专业人士中的战斗机。

但如果看赚钱的能力,基金经理中,能不能赚钱,跟你是不是某个行业的专家,关系不大,研究员转行做基金经理,并不会比非研究出身的基金经理收益率高;而在散户中,在某个行业越专业,赚钱的概率却越高。

这就说明,专家型散户常常比机构研究员和外部专家们更接近市场定价的结果。

为什么会这样呢?

就像房价是买卖双方定价而不是更专业的中介定出来的一样,股票定价也是由投资者决定的,都是这个行业的外行人,通过市场买卖而非专业研究定价。

继续以上面的二手房为例,从某种程度上说,连续三个涨停和后面的回落,你可以把它想象成买方与卖方的讨价还价。

前三个涨停就好像是卖家在“漫天要价”——你看,这是未来十年,本市最大的机会所在,过几年房价翻倍,我涨你10%,不过分吧?

一边串的调整,就是买家的反击——规划就是鬼话,开发区十年前也有大规划,房价也炒上去了,结果现在成了鬼城,你涨10%,我再加点钱可以买市区的房子,现在就有这些配套了。

调整之后的反弹到前期顶部,就是房东的坚持与威胁——今天看房的人比昨天多了几倍,中介又给我约了几个,咱们也别浪费时间,买卖不成仁义在。

创新高之后的二次回落,就是买家的最后报价——规划这东西,确实说不准,这样吧,我再加20万,再高,我真觉得不值。

一个漫天要价,一个就地还钱,就是股价的巨幅波动,最终这个房子能不能成交,以什么价格成交,并不取决于这个规划本身,而是买卖双方对信息的认知和定价意志、定价能力。

专家型的散户,类似于专业炒房者,既有对信息的认知,又有交易谈判经验,同样是某技术的确定性解读,专家型散户理解的确定性,更接近于市场正在交易的确定性认知水平,所以能成为短期价格的定价者;而专家往往跑在市场的认知前面,这正是市场上总是偏离专业认知去“炒主题”的原因。

这也导致了短期内专家很容易被市场打脸,但如果专家的认知正确,日后股价又会回归专家的认知,就像十年后,这个房子到底值多少钱,本身还是看规划能落地多少。

总结一下这个定价过程:

短期而言,股价的涨跌由投资者认知的变化决定

长期而言,股价的涨跌由信息本身的演绎决定

股价的起点是投资者的认知,股价的阶段性终点是专家的认识,其中的涨跌由变化本身和投资者认知的变化决定。

这个过程,才是“认知变现”的过程,理解这些,就可以谈一谈——如何让专家的观点帮助我们的投资呢?

4/4

你是比专家更专业的投资者

首先,相信在“投资”这件事上,你比专家更专业。

一个专业投资者,“认知”有三个层次:

第一层认知:对经营信息本身的变化

第二层认知:有定价能力的投资者对这些变化的认知

第三层认知:市场风格偏好导致这一认知的加速和减速。

认知,并非仅仅对公司和行业,还包括了市场和交易对手,所以更重要的是投资和交易行为的本身,行业专家在这件事上,很可能很“菜”。

完全不懂容易被忽悠,但纯从专业角度又很容易脱离投资的初衷。

其次,要能赚“不确定的钱”。

逻辑之所以叫逻辑,就是理论上有道理有可能,实际上还没做到,即不确定性,赚钱赚的就是从“不确定性”到“实现”的钱。

相反,如果这件事情难度不大,那股价就会一步到位,往后就是估值下降与业绩上升的对冲,盈利空间反而不好说了。很多时候,专家(包括很多研究员)炒股赚不到钱,正是因为太注重现实的确定性,又不知道市场如何估值,所以买的都是被炒高了的标的。

再次,专家的观点需要交叉验证。

不同的专家有各自的优势领域和观察角度,交叉验证可以更好的从专业的视角转向投资视角。

最后,专家的观点可以提供买入的安全边际。

专家亏钱,至少知道自己为什么会亏,而散户亏钱基本上都是买错公司,而不是错过公司,所以,比专家亏钱更普遍的现象是,专家在自己熟悉的行业错过赚大钱的机会,特别是出现那种大变局、大机会时。

投资心理系列

2022-5-29 千万不要跟别人打赌

2022-3-6 为什么说“筹码结构”决定上涨力度?(行为金分析之九

2022-1-16 “测不准”的投资机会,怎么把握?(行为金分析之八

2021-12-5 成功者的投资经验是靠不住的(行为金分析之七

2021-11-7 人人会犯的错误,是“市场先生”发的红包(行为金分析之六

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