原题目:
我想仿制一个像游戏机室里的扑克牌机一样游戏
游戏时每次发5张牌,(共有54张牌)有两张王,大王和小王可以当作52张牌中任意的一张牌,这五张牌的中奖方式和大小顺序如下:
五个相同的(比如:五个A)
同花顺(比如:A.K.Q.J.10,五张牌的花色是一样的)
四个相同的,带一张其他的牌(比如:四个A带一个2)
三个相同的,带一对其他的牌(比如:三个A带一对2)
同花(比如:五张牌的花色都是一样的)
顺子(比如:A.K.Q.J.10,五张牌的花色是不相同的)
三个相同的,带两张其他的牌(比如:三个A带 2 .3)
两对相同的带一张其他的牌(比如:一对A和一对K带一张2)
一对相同的带四张其他的牌(比如:一对A和3,4,5,6)
=============cike 例题==========
例题名字:牌
窗体2个 form1 form2
form1 包括 1个text 3个list 3个command
form2 包括 1个command 1个label 1个list
例题执行步骤:把各控件放入各自窗体内 复制各自窗体代码 运行既可
================================
form1 代码:
- VBScript code
-
Private Sub Command1_Click() Call 发牌 End Sub Private Sub Command2_Click() Call 王的分配 '先把王变成可分辨的牌 List2.Clear '用这个存储花色 List3.Clear '用这个存储牌码 把花色和牌码分开处理比较方便后来的判断 a = Split(Text1.Text, ",") '分割成5 段 ' 下面这个的判断认识吧!若5个相等则 一等奖 If a(1) = a(2) And a(2) = a(3) And a(3) = a(4) And a(4) = a(0) Then MsgBox "抽取的5张牌相等 恭喜您中了一等奖": Exit Sub For i = 0 To 4 '这个循环的作用是把5张牌的花色和号码区分出来 List2.AddItem Left(a(i), 2) List3.AddItem Right(a(i), Len(a(i)) - 2) If List3.List(i) = "J" Then List3.List(i) = "11" '把J 他们全部还原成数字 If List3.List(i) = "Q" Then List3.List(i) = "12" If List3.List(i) = "K" Then List3.List(i) = "13" If List3.List(i) = "A" Then List3.List(i) = "14" '注意A 要当14 处理 因为它最大 Next i ReDim 花色次数(4) As Integer '用这个打算记录同样的花色出现的次数 ReDim 牌号次数(4) As Integer '用这个打算记录同样牌出现的次数 For i = 0 To 4 '这个循环获得它们各自出现的次数 也许有点复杂请仔细研究 For j = 4 To i Step -1 If List2.List(i) = List2.List(j) Then 花色次数(i) = 花色次数(i) + 1 If List3.List(i) = List3.List(j) Then 牌号次数(i) = 牌号次数(i) + 1 Next j Next i Dim b As String '用来存储出现的次数 用字符辨别比较方便 Dim c As String b = "" '给初值 c = "" For i = 0 To 4 '数组元素化为字串 If 花色次数(i) <> 1 Then b = b & 花色次数(i) End If If 牌号次数(i) <> 1 Then '数组元素化为字串 c = c & 牌号次数(i) End If Next i Dim min As Integer '用来记录5张牌中最小的数 Dim max As Integer '用来记录5张牌中最大的数 min = List3.List(0) ' 下面是具体获得他们的方法 max = List3.List(0) For i = 1 To 4 If max < List3.List(i) Then max = List3.List(i) Else max = max End If If min > List3.List(i) Then min = List3.List(i) Else min = min End If Next i '有了花色的出现的次数 最大 最小值 等信息后就可以判断出所有的条件了 '应该从高往下一个一个判断 记得有返回就要退出了 别让它还继续做下面奖项的判断 '最后一句代码的作用是 提示都没中奖 因为若中奖了已经退出该过程了! If InStr(b, "5") > 0 And c = "" And max - min = 4 Then MsgBox "同花顺,小子行啊,二等奖": Exit Sub If InStr(c, "4") > 0 Then MsgBox "有4张相同,恭喜您中了三等奖": Exit Sub If InStr(c, "3") > 0 And InStr(c, "2") > 0 Then MsgBox "有一对+三条 恭喜您中了四等奖": Exit Sub If InStr(b, "5") > 0 Then MsgBox "5个花色一样 恭喜您获得五等奖": Exit Sub If c = "" And max - min = 4 Then MsgBox "顺子 恭喜您获得六等奖": Exit Sub If InStr(c, "3") > 0 Then MsgBox "有个三条 恭喜您获得七等奖": Exit Sub If c = "22" Then MsgBox "有2对 恭喜您获得八等奖": Exit Sub If InStr(c, "2") > 0 Then MsgBox "有一对 恭喜您获得九等奖": Exit Sub MsgBox "sorry 没有中奖 请再接再厉 " End Sub Private Sub Command3_Click() Call 洗牌 End Sub Private Sub Form_Load() ' 载入的一些设置 Command3.Caption = "洗牌" Command1.Caption = "发牌" Command2.Caption = "中奖情况" Call 洗牌 End Sub Private Sub 洗牌() '这个过程是重新把54张牌写到list中 List1.Clear Text1 = "" For i = 1 To 13 For j = 1 To 4 If i = 1 Then a = "A" ElseIf i = "11" Then a = "J" ElseIf i = "12" Then a = "Q" ElseIf i = 13 Then a = "K" Else a = i End If If j = 1 Then b = "铁头" If j = 2 Then b = "红心" If j = 3 Then b = "梅花" If j = 4 Then b = "方块" List1.AddItem b & a Next j Next i List1.AddItem "大王" List1.AddItem "小王" End Sub Private Sub 发牌() '这个过程负责把牌发到 text中 [随机的] 当然同时减掉list中的牌 If List1.ListCount < 9 Then MsgBox "牌不够发了:需要重新洗牌": Exit Sub Text1 = "" Randomize For i = 1 To 5 a = Int(Rnd * List1.ListCount) Text1.Text = Text1.Text & List1.List(a) & "," List1.RemoveItem a Next i End Sub Private Sub 王的分配() '这个过程处理当遇到王时 如何替换要替换的牌 我用了另一个窗体来处理这个 If InStr(Text1, "大王") > 0 Or InStr(Text1, "小王") > 0 Then Form2.Show 1 End If End Sub
下面是form2 的代码:
- VBScript code
-
Private Sub Command1_Click() If List1.ListIndex <> -1 Then '如果选中状态 就执行 Form1.Text1 = Replace(Form1.Text1, "大王", List1.List(List1.ListIndex)) '替换函数替换掉 Form1.Text1 = Replace(Form1.Text1, "小王", List1.List(List1.ListIndex)) Me.Hide End If End Sub Private Sub Form_Load() Command1.Caption = "确定" Label1.Caption = "请选择要变换的牌" List1.Clear Text1 = "" For i = 1 To 13 '这里把牌写到list 不用装入王了 For j = 1 To 4 If i = 1 Then a = "A" ElseIf i = "11" Then a = "J" ElseIf i = "12" Then a = "Q" ElseIf i = 13 Then a = "K" Else a = i End If If j = 1 Then b = "铁头" If j = 2 Then b = "红心" If j = 3 Then b = "梅花" If j = 4 Then b = "方块" List1.AddItem b & a Next j Next i End Sub