火车拉纸牌

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、题目:扑克牌模拟-“拉大车”
二、目的与要求:
1.目的:
培养学生综合利用Visual Basic语言进行程序设计的能力,主要是培养学生利用数组进行程序设计的能力。

2.基本要求:
①要求用Visual Basic的动态数组来完成程序的设计。

②在设计程序的过程中,要求会动态进行数组的分配和使用。

③欲完成此设计题目,要求必须熟练游戏的基本思路,程序设计的整体构思。

④要求在程序中能够运用结构化程序设计的选择和循环结构,并熟练使用相关的语句(如select case 、for等)。

3.创新要求:
①在基本要求达到后,进行创新设计,本程序中在界面显示上比较简单,可以在这个方面进行扩展,另外,可以加入牌类型的显示。

三、设计方法和基本原理:
1.问题描述:
“拉大车”游戏的方式很简单,双方分到牌后,依次轮流出底部的一张,如果牌值和前面出的任意一张相同,则从相同的牌开始以后的牌都属该人所有,并且下次发牌权也归该人,依次轮流直到某人手中牌出完为止。

2.问题的解决方案:
根据问题描述,可以将问题解决分为以下几个方面:
①牌的存储,因为牌数时多时少,所以应该能够动态变化。

②牌的收取,如果有相同的牌,则应该将其及其以后的牌都收归某一方,并放在该人牌序列的前面。

③出牌的时序问题,如果有相同的,则当前出牌者占据下一次的出牌权,否则轮流。

④洗牌的随机问题,要求牌能够随即分配给双方并且不重复。

四、主要技术问题的描述:
牌的存储可以利用动态数组来完成,假设游戏双方为A和B,则至少需要三个数组,存储A,B双方的PukeA,PukeB和牌桌上的PukeOut,每出一次牌以后,这些数组的元素要在三个数组间进行移动。

洗牌可以采用如下方式:首先按照牌值顺序填充一个52(不包括大小王)的数组,然后采取取随机值的办法指定两个下标的元素并进行互换。

一定次数以后牌值的顺序即可认为是乱序的。

如下:
For i = 0 To 3
For j = 1 To 13
Puke52(i * 13 + j) = j
Next j
Next i
'打乱牌
For i = 0 To 50
Randomize
RandPai1 = Int(1 + 52 * Rnd())
RandPai2 = Int(1 + 52 * Rnd())
t = Puke52(RandPai1)
Puke52(RandPai1) = Puke52(RandPai2)
Puke52(RandPai2) = t
Next i
在整个程序里面,涉及到数组操作可以用UBound函数来得到数组的最大下标,建议下标从1开始,这样,UBound得到的也即是数组的长度。

出牌的模拟可以用Timer控件来实现,在其Timer事件中去完成牌的移动和检测。

牌的显示可以用Picture控件的Print方法来实现,CLS可以清除上一次的输出。

相关文档
最新文档