深圳泊众专业棋牌游戏开发 视频游戏吧 9191pk 遛鸟棋牌游戏
玩网络棋牌月赚600-1万 斗地主技法从入门到精通 麻将高手秘籍 锄大地三十六计
棋牌游戏推广方案 中国象棋入门 北京上市公司收购棋牌游戏 赞助位预订

查看完整版本: 扑克牌类游戏DIY之一:整体布局的设计 (7)

擎墨閣文學 2008-5-1 11:59

扑克牌类游戏DIY之一:整体布局的设计 (7)

经过以上几个阶段的设计,游戏已初具规模。要想做得更好,还可加入一些如:界面选择、规则调整、积分计算、网络对战等众多功能,它们的实现都不是很难。为了软件有点专业水准,多用Windows API少用控件为最佳。可是API有些晦涩难懂,参考资料又少,同时因VB对所有的API调用都有没有错误监视,造成调试很困难,容易出错,让你未保存的内容全部报废。所以建议在使用前,用新工程单独调试,并多做实验,放心后再加入游戏中。API有许多VB无法实现的强大功能,执行速度极快,几行代码就能省去携带大量控件所引出的副作用。因为大多数系统并没有这么多VB控件,需软件包中自带,容量剧增不说,还必需通过安装程序注册,直接复制是不行。我在制作斗地主软件时,只使用了一个网络通讯时所用的Winsock控件,大量采用API代替控件,效果很好。
智能部分我没举任何代码实例,主要是怕禁固了大家的思路,再说自我感觉这部分代码编得不理想,不愿在此献丑了。一个游戏想增强可玩性,AI是不能回避的问题,我想对愿意在此下功夫的朋友,提供点自己在牌局形式判断上的思路。先依据游戏者手中牌的集合,分别建立四个(0 To 14)的数组,用于统计每人手中0到14种牌点的总数,这样可分析出众多参数,包括每个游戏者手中的最大牌点、最大一手牌、每种牌型的最大牌点以及它们在所有人中的最大值,此外有时还要统计最小值。这当然远远不够,我们还要算出手中牌的单只、对子、三只、炸弹的总数,并根据每种牌型是否有大牌点做回应,进一步决定优先要出的牌型。斗地主智能中有个高难度的分析:什么时侯拆牌出?这要考虑的东西很多,有拆开后能否与其它牌形成连牌,还有所拆牌的牌点在新牌型中是否处于优势,更要考虑拆牌能不能为同伙渡牌,阻隔对手过牌,或打乱对手的布署等。不要怕,这些东西别指望都做得很全面,可慢慢补充。我还有个小技巧告诉大家:有时为了增加可玩性,一定要在智能中引入一些随机机制,在有些牌可出可不出时,用个随机数来决定,这个随机数要依据形势的危急程度定义不同的出牌概率。
网络部分编程,要考虑的情况就更多了,我在此只能简单说一下构思,有兴趣的朋友可参考。网络通讯我是采用Winsock控件实现的,这个控件功能很强大,用好的话可完成绝大多数网络操作。因为牌类通讯数据传输量很小,在设计时我选用了UDP协议。首先加入一个Winsock实例作控件数组的首元素,通过代码动态加载Winsock控件数组中的其它元素,作主机时每一个游戏者加入时,都加载一个Winsock实例并单独分配一个端口与其通讯,四人坐满时就得加载四个Winsock控件;作客机时,只要再加一个实例就行,主、客机所加载实例的Index号不能相同,便于在一个过程中用Index来分清主、客端及不同位置的游戏者分别进行处理,这样软件便可将服务端与客户端集成在一起,通讯起来相当方便。
网络通讯采用字符串传递所有信息,程序接收后,再解释成动作在本地显示。VB字符串处理功能不太强,但对付这些还是够用的。VB6新增了一个Split函数,非常有用,它能把字符串中用相同符号隔开的各个部分,一次性加入一个数组中。利用它,在联网时可一次传输用某种符号(一定要是在正式信息不会出现的符号,如:“|”,不行话就多用几个符号,如:“<|>”)分隔的长串,分开的每个部分采用“Key=Value”的形式,这样一来网络传来的字串,就可以象INI文件似的用一个Select Case结构来处理了,是不是很方便。
写了这么多,不知是否能给想尝试VB编程,尤其是牌类游戏的朋友会有所帮助。我不敢说编程对每个人来讲都很容易,但真正意义个的困难并不多,只是看你的钻劲足不足了。编程的核心在于创意,只要你有了好的想法,依靠VB这样强大的工具,编程已不是什么难事,下点功夫,大胆尝试,相信都会满载而归的。

Эконо 2008-6-28 10:28

:)  :)  :)
页: [1]
查看完整版本: 扑克牌类游戏DIY之一:整体布局的设计 (7)