PowerBuilder制作纸牌游戏

本文记录的是2001年我大三那年假期制作小游戏的思路,希望给在读计算机专业的朋友们一些参考,如果还没来得及动手尝试的同学,一定要勇于动手。你们一定比我做得更好。

制作动力:

我有一个好朋友,因为我们住的很近,从小学就一起上下学,直到高考,我因为他选择了同一所学校。而我是一个不太喜欢玩牌的人,但是好友们在一起又少不了玩牌,可是我大学四年,连必修课“升级/拖拉机”都没学会,因为真的提不起兴趣。唯独和我这个好朋友能玩,因为我们玩的是两个人可以玩的规则——钓鱼、变色龙。主要是这俩游戏手里不用一次拿很多牌。

后来他搬家了,不能总来我家玩。大二时买了电脑,花了6040元,当时觉得自己好奢侈,但又不能不买。直到现在还忘不了母亲为了陪我去电子城,肥胖的身躯,大汗淋漓在大街上走,好艰辛。每次想起来都觉得自己不懂事可又没办法。于是,大三的那个暑假,我尝试在家自己动手。

都说pb适合数据库,我非要试试做游戏。制作成功以后,我可以在家自己玩,似乎又找到了好友在身边的感觉。如果我说“谨以此文献给……”,我这种“煽情缅怀”方式会被痛打,因为我这哥们还健在呢。

于是曾发布了另一篇博客:

从PowerBuilder+wiseinstaller程序发布看windows的system32目录共享_大橘的博客-CSDN博客

下面是制作过程的思路。由于我现在不用pb了,无法复制出源码给大家看。其实很简单,明白道理就行,主要是一定要勇于动手。

开始:

先构思一个大概的界面布局。设置好背景色,放几个控件上去,这样就装模作样的有点那个意思了。

 纸牌本身就是一些图像控件,image或者picture之类的。要准备一些纸牌相关的图片文件给它做背景,这样就看起来更像了。先说一下我当年怎么得到这些图片的。一开始,我试图手动一个个去画,54张牌还有各种背景其实难度挺大的,而且做出来特别难看。从系统自带游戏里面截图也不好看。最后意外发现,使用vc++6.0可以打开任意类型的文件,而打开系统自带的纸牌游戏后,其中的各种图片资源就都有了,于是分别另存为,就有了54张牌和一些背景图片。当然,我当时用的win98,后来尝试win2000以后就不能这么干了。用vs打开是看不到那些图片资源的。不过还好,现在网络发达,可以下载高清文件。

于是,可以添加n个图片控件,比如54张牌加n张背景,都分别放在窗体上。就会看起来有点那意思了。

 其中那几张大小王是我自己画的,但是再让我重复一遍,我肯定画不成一模一样了。当然系统游戏资源里面也有大小王,但是我就想做出自己风格的。你看大小王上面的英文字母,和系统游戏里的一模一样,因为我的大小王,就是在人家的基础上改出来的,就为了保留那几个字母。vc++6.0画出来的。等到这一步,初试动手应该有一点点成就感了。

让牌动起来:

但目前为止,这些牌还是死的,要让它们动起来。可以使用数组来批量处理。首先让这些牌统一移动到左上角发牌的位置,然后用一张背景图片盖在最上面,这样看起来好像一叠牌扣在那里。

 这一步主要是尝试使用数组批量控制牌的位置。之后无论是洗牌、发牌、游戏过程中都要用到。其实想明白了实现起来挺简单的。我记得当时做的时候,只要看到这些牌都能有秩序地移动,就已经信心十足了。后面洗牌和发牌就没有费劲。

洗牌:

洗牌需要考虑随机性,开始我傻乎乎的调用随机函数,后来到发牌才发现,无论洗多少把,它是有规律的, 根本不随机。后来发现所谓随机函数可以给定种子值,而真正的随机还是要靠这个种子值来决定的。因为当初看过计算机周刊,记着一篇黑客攻击的文章上提过,很多网络传输的加密措施,是利用时间点计算出加密值的,而一些攻击手段正是通过抓包,然后利用时间点计算出当时的随机加密串,从而实现破解。

所以,我最终通过获取系统时间的秒数,作为种子值产生的随机效果。甚至让洗牌函数执行两次,相当于连洗两把,这就够随机了吧。因为它完全取决于游戏玩家操作程序的时刻。

视觉错觉:

上面洗牌我就提到过,把所有牌移动到左上角,最后用一张背景盖在最上面,让人看起来是所有牌扣在那里。这就是一种视觉错觉。

最早的时候我转不过弯来,总试图找一种能让控件翻转的方法。一直看着自己的手心手背,翻来覆去考虑。当时网络不发达,又没那么多资料,闭门造车相当不容易。最后终于想开,为什么不换个思路?让玩家看起来视觉效果满足要求就行了,费那劲呢。

当然,最初想不到办法的时候一度卡在那里,难道就停滞不前了吗?相信写过程序的朋友都有类似体会。我的建议是,一定要拿得起放得下,有些问题必要时应该学会暂时放下它,先干别的。千万别跟自己较劲。所以,当实在无法想明白“翻转控件”这个问题时,我干脆就不考虑它了。因此一开始这个游戏中,所有牌都是面对玩家的,也就是玩家可以看到所有牌,基本等于作弊。所以我在游戏中加入了“作弊码”功能。

实际上“翻转控件”最后是利用了“让控件至于顶层”这个特性解决的。想让某张牌扣过去时,在它正上方,用一张背景牌遮住就行了,看起来就是它翻转过去了。具体记不清了,貌似是:

vb中bring to front,pb中visible=true就可以实现至于顶层的操作。利用这种操作,结合牌的位置,可以制作出一张遮一张的效果,如下图:

可以按顺序将图片控件一张一张放在指定位置上,依次往右措一定距离并依次放在顶层,就像当初洗牌放背景一样。

 流程控制:

通过调整图片控件位置,把牌按某种游戏规则发到每个人手里。到此为止,每完成一个函数应该调试或运行一下,这样你很快就能看到效果了。相信我,每次看到效果都会信心满满。

出牌,这是最难,最麻烦的一步,可以这样,先不要让d区(即玩家)参与游戏,牌照发,用循环控制,就是让其他三个电脑玩家(a,b,c)先依次运行过程,那当然是几秒钟内一把游戏就结束了,用messagebox()之类的东西在适当的位置显示你想知道的信息,一把游戏结束后,按游戏规则看一下结果是否正确(别忘了玩家手里还有牌)。比方说,钓鱼游戏最后数一下一共几条鱼,看看都对不对。

这一步最难,因为要考虑游戏规则。以钓鱼为例:

1、可以多张钓一张,不能一张钓多张;

2、牌面数字相加等于14才可以钓;

3、黑、红、花、片分别代表4/3/2/1四个分数;

4、每次钓鱼要设计个尽量智能的法则,让电脑玩家尽量聪明一些;

5、判断这一轮能否钓得起。要么钓不起,扔掉损失最小的牌。要么尽量利益最大化;

6、各玩家都手里没牌以后,统计成绩。

目前为止,都是电脑玩家自己在玩,玩游戏的人是没有参与的。等上面电脑玩家的规则都没问题之后,打断“上家”与“下家”的衔接,“上家”出牌以后,不要让它调用“下家”,什么都不用管就行了。这就相当于程序暂停,等待人类操作。下一步人类玩家通过操作触发下一个动作(“下家”出牌)。

这样,整个过程就完整了。

当然最后要考虑打包制作成安装程序,参考我的另一篇博客。

从PowerBuilder+wiseinstaller程序发布看windows的system32目录共享_大橘的博客-CSDN博客pb程序,wiseinstaller打包,自动配置ODBC,自动配置注册表,解决共享文件问题。https://blog.csdn.net/u012999461/article/details/123456798看看我当年做的游戏吧。这是我跟好友的回忆。

 你知道最悲催的是啥?我自己设计的游戏,我有时候都赢不了!这还不算,我那哥们来了以后,赢了几把之后,觉得我本来就玩不过他,所以我设计的游戏思路也玩不过他,你们说该扁他不?

下面是变色龙:

 就这么多吧。我那哥们,他当然不能经常赢电脑,偶尔赢而已,但是,所谓电脑的逻辑是死的,跟人比还是有差距的。

本文完。

PowerBuilder是一种集成开发环境(IDE),用于创建企业级应用程序。它的主要用途是为Windows平台开发客户端/服务器应用程序。然而,在过去几年中,它也被用于开发移动应用程序和Web应用程序。 虽然PowerBuilder并不是一个游戏开发工具,但它确实可以用于开发一些简单的游戏。与使用专门的游戏开发引擎相比,使用PowerBuilder来开发游戏可能有一些局限性。然而,如果你只是想开发一些小型的休闲游戏或简单的原型,PowerBuilder可能还是一个不错的选择。 PowerBuilder提供了一套强大的工具和绘图功能,可以用来创建图形界面和实现用户交互。你可以使用PowerBuilder的对象和事件模型来处理用户输入,并使用PowerScript编程语言来控制游戏逻辑。 虽然PowerBuilder可能不适用于开发复杂的3D游戏或大型多人在线游戏,但对于一些简单的2D游戏、益智游戏或策略游戏,它可能会有一些潜在的用途。另外,如果你已经熟悉PowerBuilder,并且想尝试开发一些小型游戏,这也是一个不错的选择,因为你可以利用你已经掌握的PowerBuilder技能来快速进行开发。 然而,如果你希望开发更复杂的游戏,你可能需要考虑使用其他专门的游戏开发工具或引擎,如Unity或Unreal Engine。这些工具提供了更强大的游戏开发功能和更广泛的游戏开发社区,可以帮助你更好地实现你的游戏开发目标。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值