你的位置:首页 > ASP.net教程

[ASP.net教程]在线捉鬼游戏开发之一


看过芒果台某知名节目的朋友们应该对“谁是卧底”不会陌生:N人参与,N-1人拿到同一个词(如馒头),剩余一人拿到另一个词(如包子),N人都只能看到自己的词,故没人知道自己是否和别人描述的不一样。游戏采用轮流发言制,想尽办法描述自己手中的词,让自己不被怀疑,且又不能让真正的卧底猜出自己和别人不一样,直到猜出谁是卧底。

此类游戏的有趣之处在于描述的尺度要拿捏在明确且不点破之间,机器没有人的智慧那么发散,人的参与感就更重要了(不然好比我喜欢的飞行棋,你还真不知道网络对面的对手是不是条狗)。

捉鬼 这个游戏类似,又有点儿像杀人游戏:【感谢武汉张睿同学带给我们游戏的欢乐,睿哥V5】

标配9人:4好人(如拿到的词是:男人)、2白痴(如拿到的词是:妈妈)、3鬼(拿到的内容是:鬼(2字),意思是你抽到鬼,此题共2字)

聪明的你一定注意到了,鬼根本不知道这一题是什么,就连动物类?场景类?等范围都不给,只知道这是两个字,所以:

好人和白痴是一伙的(虽然他们不互相知道谁是自己一伙),好人与白痴要合力在每轮发言后投票投死所有的鬼,就胜利;

鬼则要伪装自己,不被发现,同时在每轮发言中忽悠大家和自己把好人或白痴投票投死,直到人、鬼人数相当时鬼胜利,或者在每一个鬼死的时候,允许有一次机会猜好人拿的是什么词(猜到白痴的不算胜利),如果猜到了,鬼也算赢,此机会可累加。

何为累加?共3鬼,第一个鬼被发现并投死时,有一次机会猜词,但觉得信息很不明确,可选择不猜,当第二个鬼投死时就有两次机会,同理,若第二个也不猜,第三个鬼投死时就有三次机会,当然,鬼在游戏过程中是不能沟通的,即:该谁猜谁就猜,其他人别废话。

当然还有1法官,但此处的游戏开发就代替了法官角色。哦,对了,在我与同学们玩此游戏玩到一定瓶颈时,领悟到出个好题意味着什么,听我说完规则在细说出题诀窍。

流程如下:

法官:大家环形坐好(程序中计划用队列或链表或数组完成顺序问题),大家都抽到我写好的9张纸条了吧(程序中系统随机发词,词库可维护),好的,天黑请闭眼(沿用杀人游戏的经典语句~),请鬼出来商量从谁开始发言。

3个鬼:(悄悄地用肢体沟通,确定发言人)(在线游戏中,将增加鬼打字交流环节,以便玩出2.0的花样,后续我会解释)

法官:好的,鬼请闭眼。天亮请都开眼,从A开始发言,每轮发言说什么都可以(可描述手中词,可评论别人的话语,可总结分析当场局面)。

A:……(程序中按队列顺序轮流发言,一人发言,其他人都可看见,但其他人不许说话,直到A点击提交Over按钮)

……

I:……

法官:好的,现在开始第二轮发言,还是A开始(首次是发言两圈,以后就每圈结束都投票)

A:……

……

I:……

法官:给1分钟时间考虑,开始投票,第一时间举手,不许跟票,可以弃权(程序中当然很容易做到不能跟票,设定只有玩家点了投谁或弃权的按钮才显示结果即可)

法官:好的,C被投出去了(假设C被投),C不是鬼(不能说是好人还是白痴),C可留遗言(只有第一个死的非鬼才能留遗言,后面死的非鬼都没有遗言,所有的鬼投死都没有遗言,只能直接猜词。所以这里有个鬼冒险的技巧,就是第一轮自杀,抢掉这个遗言机会,哈哈此处不应该讨论游戏技巧~ 程序中就好设计了,让C发言,其他人JQ或服务器端不许发言即可)

C:……

法官:好了,从D开始发言(从死者的下一个开始)

A:……

……

I:……

法官:老规矩,1分钟考虑,开始投票。

法官:好的,H被投出去了,H是鬼,H猜吧。

H:……

法官:不好意思,没猜对,游戏继续(若猜对4好人的词,游戏结束),I开始发言。

I:……

……

G:……

法官:老规矩,1分钟考虑,开始投票。

法官:好的,A和F同票数,现在进入PK环节,A先发言(按最近一轮的先后顺序),然后F再发言

A:……

F:……

法官:好的,现在除了A和F,其他人开始投票,不能弃权(若还有弃权,可能游戏就死循环玩不下去了)

法官:好的,F被投死了,(如果剩下的是4人投票且还是同票的话,就再A、F发言,再投,直到有结果),F不是鬼,没有遗言(第一个非鬼才有遗言),请G开始发言。

下面的笔者就不继续赘述了,我没估计错的话,上述已包含可能出现的情况。

直到:

(1)鬼全被投死,好人和白痴方胜利;

(2)被任一鬼猜出词,鬼胜利;

(3)好人+白痴 = 鬼 的人数时,鬼胜利(鬼投票同心,再玩也是鬼赢)。

 

注释(只为更好的玩游戏,与程序无关,可跳过):

(1)出个好题意味着什么:本例中题目是,男人妈妈,如果是男人女人(两词较相近,且能容易一看到一个词就猜到另一个词)时,好人和白痴容易抱团,对一无所知的鬼不太公平。如果是楼房细胞(两词较远,基本无法产生简单的联系)时,鬼容易浑水摸鱼,好人和白痴太找到同伴了。

(2)出好题的诀窍:一般是两个或三个字为佳,生僻词请法官自己乐去吧(如游标、面向对象等专业性词汇,慈母、游子等诗句词汇都太难太难了,鬼这辈子都猜不到)。先想一个普通词,如“大海”,那么一看到词容易联想的是“江河”、“高山”、“海洋”等直接相关的名词,第二个词就从这些联想的词出发,比如由高山想到“绿树”(同为场景,而不要想到高山里的老虎,不同大类心好累~),那么大海绿树就是一组对双方都公平的好题。最好选择容易猜的词为好人的词(如大海),不容易猜的为白痴的词(如绿树)。

(3)玩出2.0的花样:这属于游戏技巧,主要为了拓展大家思路而写。花样指:3个鬼定顺序就指定其中1个鬼先发言,且3鬼串通好假设自己有一个词(如眼睛),然后在整个游戏过程中就一直围绕着眼睛来描述,以肯定的气场迷惑对手,且投票同心。似乎听起来还是鬼占优势对吧,告诉你个数据,我们完了近十轮2.0的样板,只有1次险胜、1次完胜(3鬼都活着),其他都因被发现简直是胡扯的描述而被投死。

 

(跳到此处就好,下面是技术选用)

好了,业务流程已经描述完毕,下一步开始技术选型吧(选你妹啊,笔者就会C#,赶鸭子上架的三个月Java不算,没得选好吗……[委屈])

初步定用C# + MVC.Net + JQ +

三层啥的就不搭了,业务对象放Model,

哈哈,怎么样,被上图骗了吧,要能搞个这种界面的在线版就略屌了,到时候这些图片都会是一个个蓝色下划线的链接,嘿嘿~程序员非美工的痛你懂的!

到此,本篇“游戏流程介绍与技术选用”已经完成,想必大家还游离其外,那就再回顾一遍游戏过程,拿笔和橡皮演示一遍6人版本就最好了。如果已经清楚游戏环节和各角色,那么就可以开始考虑怎么设计业务对象与对象职责划分了,也就是下一篇会更新的内容,其中会略有涉及设计模式的影子,但笔者确实是初学而非谦虚,故太希望收到大家的技术上的吐槽,若吐槽之余还能指点一二形如“你丫就不能读读那本谁谁写的XX书再来做这个职责划分吗,就不能先做几个DDD项目来保障程序稳定性吗”这样的话就打心底感谢各位大牛了!

OK,准备复查一遍本文错别字,就发表啦!