PowerBuilder制作纸牌游戏

2023-05-16

本文记录的是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看看我当年做的游戏吧。这是我跟好友的回忆。

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

下面是变色龙:

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

本文完。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PowerBuilder制作纸牌游戏 的相关文章

随机推荐

  • android uvccamera 编译

    1 NDK报错 xff1a Process 39 command 39 D SDK ndk bundle ndk build cmd 39 39 finished with non zero exit value 2 解决方法 ndk版本过
  • Android viewBinding让你告别findViewById和ButterKnife

    很久没有更新博客了 xff0c 不是因为别的 xff0c 就是懒 今天要分享的一个新技术 xff0c 从此告别定义一大串的UI控件变量 xff0c 再也不用写findViewById xff0c 也不需要依赖ButterKnife和写一堆
  • 编译OpenCV 4.7.0 无法解析的外部符号 cv::xfeatures2d::VGG::getDefaultName 问题解决

    最近做特征匹配 xff0c 需要用到xfeatures2d中的特征 xff0c 源码编译OpenCV 4 7 0及opencv contrib 4 7 0中的xfeatures2d模块 xff0c 在Visual Studio 2019中编
  • 记一次在Taro开发的微信小程序中使用lottie动画的经验

    前景提要 最近在做公司项目的时候 xff0c 看到移动端开发用的小图标有动态效果 xff0c 非常好玩了解到是使用lottie进行实现的 xff0c 这个东西以前有看到过对应的插件库 xff0c 但是一直没有时间做研究 xff0c 趁着这个
  • JDB调试Android程序(通过JDB进行代码注入)

    前言 最近在做一些安卓安全相关的事情 xff0c 就看到了一个通过动态调试进行代码注入的一个概念 xff0c 收益匪浅 xff0c 原来好多东西还能这么玩的 闲言少絮 xff0c 开始正式行动 漏洞检查 由于我这边是做的关于安卓安全相关的事
  • [2019.12.20]strncpy发生stack corruption detected(-fstack-protector)栈溢出

    代码 char line MAX 61 0 strncpy line pBeginObj ptemp pBeginObj 43 1 log如下 解释 char strncpy char dest const char src int n 把
  • libmng.so.1: cannot open shared object file: No such file or directory

    span class token function sudo span span class token function ln span s usr lib x86 64 linux gnu libmng so 2 usr lib x86
  • 企业级数据模型主题域模型划分( IBM-FSDM)

    一 前言 如何构建主题域模型原则是构建企业级数据仓库重要的议题 xff0c 最好的路径就是参照成熟的体系 IBM金融数据模型数据存储模型FSDM xff0c 是金融行业应用极为广泛的数据模型 xff0c 可以作为我们构建企业级数据仓库主题域
  • 关于编程学习上的一些感悟——不忘初心

    序 今天无意中看到以前一起开发过的同学写的技术文章 xff0c 了解到了更多在blog和github以及一些技术交流论坛上面非常活跃 回过头来看看自己 xff0c 好像依然停留在以前的样子 xff0c 似乎与真正在踏实学技术差距好像很大了
  • CentOS下ns-3安装教程

    首先 xff0c 安装ns 3时最好不要使用root权限 xff0c 普通用户安装即可 xff0c 否则后来要找文件会比较麻烦 一 安装依赖软件包 首先安装依赖软件包 根据官网 xff08 https www nsnam org wiki
  • 生产者-消费者模型

    文章来自https github com NieJianJian AndroidNotes xff0c 内容将持续更新 xff0c 欢迎star 一 前言 生产者消费者模式并不是GOF提出的23种设计模式之一 xff0c 23种设计模式都是
  • JAVA 多线程解决高并发、超时线程池耗尽问题

    第一类 问题 项目中遇到了 创建20个固定线程的线程池 在测试环境 多线程如果高并发的调用都没出现问题 但是在实际的项目中 出现了线程池内线程超时等待并将池内的线程耗尽 导致其它的程序走到多线程调用时候出现了执行慢 线程无法执行问题 问题原
  • 31_谈谈你对线程安全的理解?(重点)

    如果这个是面试官直接问你的问题 xff0c 你会怎么回答 xff1f 一个专业的描述是 xff0c 当多个线程访问一个对象时 xff0c 如果不用进行额外的同步控制或其他的协调操作 xff0c 调用这个对象的行为都可以获得正确的结果 xff
  • MariaDB 数据类型

    MariaDB 数据类型 数字数据类型 MariaDB支持的数字数据类型如下 类型描述TINYINT此数据类型表示落入 128到127的有符号范围内的小整数 xff0c 以及0到255的无符号范围 BOOLEAN此数据类型将值0与 fals
  • DBSCAN算法(python代码实现)

    DBSCAN 上次学了kmeans基于划分的方法 xff0c 这次学一个基于密度的聚类算法 xff1a DBSCAN xff08 Density Based Spatial Clustering of Applications with N
  • vs2022(缺少MFC,无法新建项目,控件无法添加事件)的解决

    最近下载安装了最新的vs2022社区版 xff0c 想着把之前的c 43 43 项目能够兼容 xff0c 于是遇到了一些列问题 缺少MFC xff0c 无法新建项目 xff0c 控件无法添加事件 这里首先要吐槽一下 xff1a 也许是我电脑
  • C#多线程加载控件界面卡死的解决

    先听一个故事 xff1a 有一个老板忙不过来 xff0c 于是招一个员工去负责某些事务 这样老板就可以腾出时间处理其它事 后来发现员工干不下去 xff0c 原因是干活需要花费 xff0c 没有老板的认可 xff0c 财务不给批钱 这是原则
  • vs2022账户无法登录的解决

    因为昨天重做系统 xff0c 重装了vs2022 xff0c 又涉及到登录的问题 xff0c 一时想不起来之前怎么解决的了 xff0c 想起来以后决定还是记录下来 我遇到的问题是下面这样的 xff0c 提示脚本错误 xff0c 要求升级最新
  • 使用centos7+bind9构建内网私有dns

    有这样一种场景 xff0c 局域网内有一个为网内用户提供服务的机器 xff0c 我们希望像访问互联网站点一样去访问它 xff0c 而不用记忆ip地址和端口 xff0c 比如在web浏览器地址栏输入http www nx com就可以访问它
  • PowerBuilder制作纸牌游戏

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