电动扑克比大小问题---希望帮忙解决!
我想仿制一个像游戏机室里的扑克牌机一样游戏
游戏时每次发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)每次发完5张牌后,怎样比出这五张牌是和上面任意的一种中奖方式相同的,我弄了好久都不行,希望高手给我指点一下程序的流程和思路,或是在您有时间的情况下帮我写一个程序示例,麻烦您了!谢谢

解决方案 »

  1.   

    一等奖:五个相同的(比如:五个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) 一共用时 2 小时40 分 =============cike 例题==========
    例题名字:牌
    窗体2个  form1 form2
    form1 包括 1个text 3个list 3个command
    form2 包括 1个command 1个label 1个list
    例题执行步骤:把各控件放入各自窗体内 复制各自窗体代码 运行既可
    ================================
    form1 代码:
    Private Sub Command1_Click()
    Call 发牌
    End SubPrivate 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 SubFor 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 iReDim 花色次数(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 iDim b As String      '用来存储出现的次数 用字符辨别比较方便
    Dim c As String
    b = ""               '给初值
    c = ""For i = 0 To 4           '数组元素化为字串
    If 花色次数(i) <> 1 Then
    b = b & 花色次数(i)
    End IfIf 牌号次数(i) <> 1 Then '数组元素化为字串
    c = c & 牌号次数(i)
    End If
    Next iDim 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 SubPrivate Sub Form_Load() ' 载入的一些设置
    Command3.Caption = "洗牌"
    Command1.Caption = "发牌"
    Command2.Caption = "中奖情况"
    Call 洗牌End SubPrivate 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 SubPrivate 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 的代码:
    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 SubPrivate 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
    楼主给分吧! 我想要50 ^_^ 若实现不了LZ 所说的 请联系我 我们一起学习 我的学习方法是 通过回答问题来提高自己 
    程序这东西靠的是练习。。越熟练越好
      

  2.   

    cike_1111 谢谢你!
    我这段时间有点忙!等我忙完后马上测试的源代码!有什么问题我再发Email给你!请留下电子信箱.
    Email:[email protected]