金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 技巧实践 >> 文章详情
用Delphi再现Windows纸牌游戏(图)

尤一浩 中国电脑教育报 2001-11-10

  使用过Windows 98的用户对其自带的纸牌游戏一定不会陌生,在您的鼠标点击、拖动等操作之下,扑克牌上下翻飞、腾挪组合;在您不经意的操作中,其实您已经触发了一系列预设事件,这些事件过程的响应最终让您体会到成功的喜悦和失败的痛苦。但您想不想体会一下借助于某种开发工具自己去编程实现的感觉呢,充分体会Delphi的事件驱动机制,这将是另外一番享受,并且理解了事件驱动机制后,再作其他更深层次的开发,这样您会变得更加得心应手。

 
  一、单张牌的实现

  Delphi编程环境中提供了图形按钮控件,设计时采用了一个按钮就是一张牌,我们可以将选定的图形(如BMP图形,大小合适)作为其背面和前面。在Delphi中,图形的装入显示的方法为:

  图形按钮.glyph.loadfromfile('图形文件路径+文件名')

  在设计中可以事先准备52张扑克正面图形和几张背景图形,用控件(控件数组)动态生成的方法(Create(Self))逐一调用。

  二、关于图形按钮

  在游戏中要对扑克牌进行正确的操作还要借助在其图形按钮上增加几个属性(如图1) 


图1

  HS:标识一张牌的花色(方块、黑桃、红心或梅花)。

  DS:标识一张牌的点数(1-13即A-K)。

  HB:标识一张牌的黑色和红色。

  Over:标识本张牌上面是否有牌压着。

  Look:标识本张牌的正面或背面。

  Area:指定本张牌的操作区域,在设计中将各操作区定义为如图2所示各操作区。

  发牌源区(Source):即左上角两叠牌。 

  回归区(Home):即右上角四门回收处。

  操作拖放区(Operate):即下排(7叠)主要拖放区。

  PTR属性:用于支持多张扑克牌的拖动操作,为一指针,指向单张牌。笔者用此属性来实现一叠牌的拉单向链表。也可以再加一属性拉双向链表方便操作。

  三、扑克牌的操作

  扑克牌的操作多数是通过Delphi提供的事件驱动编程实现的,开始一个拖动牌操作:Delphi是从OnMouseDown事件开始。请参考OnMouseDown模块。

  接受/拒绝被拖动的牌:这里由OnDragOver事件决定,要接受被拖动的牌,必须把图形按钮的Accept属性设为TRUE。

  释放处理被拖动的牌:这里由EndDrag和DragDrop事件被激发来处理,这里选用了DragDrop事件来处理,因为该事件只有当DragOver事件的Accept设为TRUE时,只有这个事件被激发。


图2

  另外,扑克牌的位置改动是通过Top和Left属性实现的。 

  这里在设计时,52个控件共享Click、OnMouseDown、OnDragOver、OnDragDrop事件。

  在运行时是动态赋予的。程序中如下例赋予事件代码:

  Mainpk[i].OnMouseDown:=pk1mousedown;

  Mainpk[i].OnDragOver:=pk1DragOver;

  Mainpk[i].OnDragDrop:=pk1Dragdrop;

  Mainpk[i].OnClick:=pk1Click;

  四、程序的实现

  程序开始时先动态生成52张牌(图形按钮),赋予花色、点数、正面图形等,接着利用Delphi提供的随机函数RANDOM(), 将52张牌次序打乱,完成洗牌。接着开始发牌,动态赋予事件代码。之后由接受用户选择进入游戏,游戏处理过程实际上就是相应事件代码在运作。

  游戏调试通过后,笔者还查阅了其他相关资料,有的系统还提供了专门的关于扑克牌方面类库或API函数供程序员直接调用,减少了程序员的设计复杂性,有兴趣的读者也可以不妨一试。

  发表评论 写信给编辑 关闭窗口
同栏目内容
· 让你的电脑启动画面绚起来 2007-09-12
· 小技巧帮大忙 极点五笔 2007-09-05
· 如何提高迅雷的下载速度? 2007-09-03
· Vista小技巧 消除红眼 2007-09-03
· 千千静听实用小功能 2007-08-29
· 四大妙招帮你成功的隐藏文件 2007-08-20
相关内容
近期主推
我国首架自主产权飞机完成
·我国首架自主产权飞机完成
·机器人版"千手观音"惊艳亮相
·西藏发现青藏高原最大冰川群
·中日: "月亮女神"携手"嫦娥"
·行星大碰撞砸死恐龙催生人类
·美研制会飞汽车定价9万美元
近期热门
科学家解开中子星爆发之谜
·科学家解开中子星爆发之谜
·英海域惊现大龙虾为普通龙虾5倍
·新物种金蛙体表有剧毒
·我国嫦娥工程计划测量月球
·精神病药物可治多种癌症
·视觉震撼:来自海底的精灵
近期焦点
美国发现极其罕见的白化银鲛(图)
·美国发现极其罕见的白化银鲛(图)
·美国展出罕见连体双胎双头龟
·波罗的海发现罕见短吻真海豚
·能帮你做大扫除的机器人[组图]
·法老墓3000年前坚果保存完好
·广西发现罕见溶洞钟乳石有30万年
金桥科普是一个公益性栏目,内容由作者提供或摘自互联网,其目的是向广大网民普及科学技术知识。如果您发现本网站转载或摘编了您拥有著作权的作品,请通知我们(电话:023-63659911),我们立即删除。
关于我们 | 网站地图 | 用户注册 | 广告客户 | 招聘信息 | 业务信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重庆科技咨询中心.重庆网得信息技术有限公司.版权所有
Email:webmaster@jqinfo.com
重庆数据通信局提供网络带宽. 渝ICP备05002327号