组
一、设计题目:自动发牌
二、目的与要求
1.目的
培养学生综合利用VB语言进行程序设计,解决实际问题的能力。
2.基本要求
程序模拟扑克牌的洗牌、发牌过程。通过相应的命令按钮,在新弹出的窗口中显示每人手中持有的扑克牌。
3.创新要求
在基本要求达到后,进行创新设计,创新方向提示如下:
★对每人手中的牌按不同花色由大到小排序。
★把每人手中持有的扑克牌图片按扇形排列显示,图片之间相互遮挡,点击图片,置于顶层显示。
★其他你能够想到或者希望实现的功能
三、设计方法和基本原理
1. 问题描述
一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S (Spaces)表示;红桃用H (Hearts)表示;方块用D (Diamonds)表示;梅花用C(Clubs)表示。按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行“洗牌”,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:西、北、东、南;将52张牌按花色顺序编号:如黑桃用S1-S13表示;红桃用H1-H13表示;红桃用H1-H13表示;红桃用H1-H13表示;然后从52张牌中随机的为每个人抽牌。
2. 问题的解决方案
①设计程序界面。
主窗体如上图。点击发牌按钮后,再点击西、北、东、南按钮弹出新的一个窗口显示手中的13张牌。
②分析程序构成
在“发牌”按钮完成洗牌——产生一个随机序列,对随机序列排序,完成洗牌;发牌——把52数组元素的值(52张牌)分别赋值给代表西、北、东、南四方的数组。西、北、东、南按钮弹出新窗口,用Image控件数组显示13张扑克牌。13个Image控件数组元素上下叠放,鼠标点中的图片通过Zorder方法把图片提前显示。在每个新弹出窗口的Load事件里加载Image控件数组元素,在Activate事件里加载图片。
③编写代码
在标准模块里说明用户自定义类型:
Type Cards
Num As String * 3
Seq As Integer
End Type
Num存放扑克牌编码,如S13表示黑桃K,Seq存放本张牌在52张牌中的序号。对Seq赋值随机数,然后排序,模拟洗牌过程。
定义:
Public WPlayer(1 To 13) As String
Public EPlayer(1 To 13) As String
Public SPlayer(1 To 13) As String
Public NPlayer(1 To 13) As String
4个数组存放每人手里的13张牌。
把Card.Num赋值给WPlayer模拟发牌过程。
图片的加载代码:
.Picture = LoadPicture(App.Path & "\GIF\" & Trim(NPlayer(I + 1)) & ".GIF")
四、主要技术问题的描述
本题技术重点除了上述用户类型之外,还要用到多维数组排序以及Image控件数组动态加载图片、对象的叠放顺序等。
五、参考资料
★Visual Basic 程序设计教程 及 Visual Basic 实验教程
★VB6.0程序员指南
★VB6.0控件参考手册
★MSDN中文版,课程设计网站上提供的其它资料。
在本题设计素材中还提供了如下本题专用资料:
扑克图片
谢谢大家,我真的着急