[例题] 电动扑克比大小问题

 

原题目:

我想仿制一个像游戏机室里的扑克牌机一样游戏
游戏时每次发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




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值