ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: HHAAMM

[分享] exe版麻将游戏,人机对战!!

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-13 00:34 | 显示全部楼层
更新了,看一楼说明

TA的精华主题

TA的得分主题

发表于 2009-9-13 10:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
太厉害了

TA的精华主题

TA的得分主题

发表于 2009-9-13 11:02 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-13 11:06 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-13 11:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
解决了听牌时出错牌的问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-13 14:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-14 10:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-14 19:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 1楼 HHAAMM 的帖子

先做个记号,今天没带U盘,明天再下载!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-17 22:49 | 显示全部楼层
全部代码
'透明
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_NCLBUTTONDOWN = &HA1
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'播放
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Const SND_SYNC = &H0 '同步调用,声音播放完毕,程序才能继续
Const SND_ASYNC = &H1 '非同步调用,不必等声音播放完毕,程序即可继续
Const SND_LOOP = &H8 '声音播放完毕后,从头重复播放,与SND_ASYNC(=&H1)使用
Const SND_NOSTOP = &H10 '如果其他声音正在播放,则不终止该声音的播放,而返回False
Const SND_MEMORY = &H4 '播放内存中的声音
Dim bArr() As Byte
'暂停
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'给动态添加的控件添加事件
Private WithEvents btnObj As CommandButton
'记录已经使用的个数
Dim GeSu()
'窗体移动
Dim CTYD As Boolean
'听牌限制
Dim TPAIXIANZICANSU As Boolean
'窗体加载
Private Sub Form_Load()
    Dim rtn As Long, A As Integer
    Me.BackColor = &HFF0000
    BorderStyler = 0
    rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
    rtn = rtn Or WS_EX_LAYERED
    SetWindowLong hwnd, GWL_EXSTYLE, rtn
    SetLayeredWindowAttributes hwnd, &HFF0000, 0, LWA_COLORKEY
    A = 1111
    For i = 0 To Image3.Count - 1
        Image3(i).Left = A
        Image3(i).Top = 7300
        Image4(i).Left = A
        Image4(i).Top = 500
        A = A + 367
    Next
End Sub
'单击头像
Private Sub Image1_Click()
    Dim i%, j%, t%, b As Boolean
    Dim A(13) As Integer
    If Label7 = "点击听牌" Then MsgBox "  要先听牌", , "系统提示!!": Exit Sub
        For i = 0 To Text1.Count - 1
            A(i) = Val(Text1(i).Text)
            If A(i) < 28 Then
                A(i) = Int(A(i) / 9.001) * 100 + A(i)
            Else
                A(i) = Int(A(i) / 9.001) * 100 + A(i) * 6
            End If
        Next i
        HUPAI A, b
        If b Then
            Label4.Caption = "开"
            bArr = LoadResData(137, "CUSTOM")
            sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
        End If
End Sub

'单击牌
Private Sub Image3_Click(Index As Integer)
    Dim A As String
    If Text1(13).Text = "" Or Label4.Caption = "开" Then Exit Sub
    If TPAIXIANZICANSU = True Then
        CHUANGJIAN Val(Text1(13).Text)
        Text1(13).Text = ""
    Else
        If Label7 = "已经听牌" Then TPAIXIANZICANSU = True
        A = Text1(Index).Text
        Text1(Index).Text = Text1(13).Text
        Text1(13).Text = ""
        PAIXU "Text1"
        CHUANGJIAN Val(A) '创建
    End If
    Timer1.Interval = 1
End Sub
'单击网址
Private Sub Label1_Click()
    Shell "C:\Program Files\Internet Explorer\IEXPLORE.EXE " & "http://club.excelhome.net/index.php"
End Sub
'单击退
Private Sub Label3_Click()
    End
End Sub
'单击开
Private Sub Label4_Click()
    Dim i As Integer, lngCount As Integer
    If Label4.Caption = "!" Then Exit Sub
    lngCount = Image5.UBound
    For i = 1 To lngCount
        Unload Image5(i)
    Next
    Text4 = 1111: Text5 = 1600: Text6.Text = "": Text7.Text = ""
    ReDim GeSu(1 To 34)
    Label4.Caption = "!"
    Label7 = "点击听牌"
    TPAIXIANZICANSU = False
    Image3(13).Picture = LoadPicture("")
    Image4(13).Picture = LoadPicture("")
    For i = 0 To 34
        m = m & i & ","
    Next
    Text3.Text = Mid(m, 1, Len(m) - 1)
    For i = 0 To Image3.Count - 2
        Text1(i).Text = SUIJISHU
        Text2(i).Text = SUIJISHU
    Next
    PAIXU "Text1"
    PAIXU "Text2"
    Timer1.Interval = 10
End Sub

'文本框1
Private Sub Text1_Change(Index As Integer)
    If Text1(Index).Text <> "" Then
        Image3(Index).Picture = ImageList1.ListImages(Val(Text1(Index).Text)).Picture
    Else
        Image3(Index).Picture = LoadPicture("")
    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-17 22:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'文本框2
Private Sub Text2_Change(Index As Integer)
    Dim i%, j%, k%, t%, b As Boolean, m%, m1$, m2$, n%, g%, TTEEXXTT As String, MM$, tt%
    Dim A() As Integer, A34() As String, JA(13) As Integer, c() As Integer, BM1() As String, BM2() As String, BCF() As String, GDS() As Integer, SULIANG() As Integer
    ReDim A(13)
        If Text2(Index).Text <> "" Then
            Image4(Index).Picture = ImageList1.ListImages(Val(Text2(Index).Text)).Picture
            If Index = 13 Then
                DoEvents
                Sleep (266)
                For i = 0 To Text2.Count - 1
                    A(i) = Val(Text2(i).Text)
                    If A(i) < 28 Then
                        A(i) = Int(A(i) / 9.001) * 100 + A(i)
                    Else
                        A(i) = Int(A(i) / 9.001) * 100 + A(i) * 6
                    End If
                Next i
                HUPAI A, b
                If b Then
                    Label4.Caption = "开"
                    bArr = LoadResData(137, "CUSTOM")
                    sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
                    DoEvents
                    Sleep (1200)
                    Exit Sub
                End If
                If Text6.Text = "听牌" Then
                    CHUANGJIAN Val(Text2(13).Text)
                    Text2(13).Text = ""
                End If
                If Len(Text3.Text) < 3 Then Exit Sub
                If Text6.Text <> "听牌" Then
                    A34 = Split(Text3.Text, ",") '调用胡牌函数,找出所有能胡的牌,再在已经打掉的牌中查找剩余最多的,然后听牌
                    For i = 0 To 13
                        If A(i) <> t Then
                            t = A(i)
                            For j = 1 To UBound(A34)
                                m = Val(A34(j))
                                If m < 28 Then
                                    m = Int(m / 9.001) * 100 + m
                                Else
                                    m = Int(m / 9.001) * 100 + m * 6
                                End If
                                For g = 0 To 13
                                    JA(g) = A(g)
                                Next
                                JA(i) = m
                                HUPAI JA, b
                                If b Then
                                    m1 = m1 & "," & i
                                    m2 = m2 & "," & j
                                    b = False
                                End If
                            Next j
                        End If
                    Next i
                    
                    If m1 <> "" Then
                           
                            BM1 = Split(0 & m1, ",")
                            BM2 = Split(0 & m2, ",")
                           
                            For i = 1 To UBound(BM1) '提取不重复
                                If BM1(i) <> MM Then
                                   tt = tt + 1
                                   ReDim Preserve BCF(tt)
                                   BCF(tt) = BM1(i)
                                   MM = BM1(i)
                                End If
                            Next i
                           
                            ReDim GDS(UBound(BM2))
                            For i = 1 To UBound(BM2) '获得剩余牌的数量
                                GDS(i) = 4 - GeSu(A34(BM2(1)))
                            Next i
                           
                            ReDim SULIANG(UBound(BCF))
                            For i = 1 To UBound(BCF) '相同的合计
                                For j = 1 To UBound(BM1)
                                    If BCF(i) = BM1(j) Then SULIANG(i) = GDS(j)
                                Next j
                            Next i
                           
                            For i = 2 To UBound(BCF)
                                If SULIANG(i - 1) > SULIANG(i) Then
                                    SULIANG(i) = SULIANG(i - 1)
                                    BCF(i) = BCF(i - 1)
                                End If
                            Next i
                            'MsgBox A(BCF(UBound(BCF)))
                           
                            If SULIANG(UBound(SULIANG)) > 1 Then
                                For i = 0 To 13
                                    m = Text2(i).Text
                                    If m < 28 Then
                                        m = Int(m / 9.001) * 100 + m
                                    Else
                                        m = Int(m / 9.001) * 100 + m * 6
                                    End If
                                    If m = A(BCF(UBound(BCF))) Then
                                        CHUANGJIAN Val(Text2(i).Text)
                                        Text2(i).Text = Text2(13).Text
                                        Text2(13).Text = ""
                                        Text6.Text = "听牌"
                                        PAIXU "Text2"
                                        bArr = LoadResData(136, "CUSTOM")
                                        sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
                                        DoEvents
                                        Sleep (1200)
                                        Exit For
                                    End If
                                Next i
                                'Exit Sub代''''''码待补充
                            End If
                        Else
                        '调用筛选函数,得到一个数组,打出最不好的一张
                        ReDim c(0)
                        SAIXUAN A, c, 3, 3
                        ZAOZUIBUHAODEPAI c, n
                        For i = 0 To Text2.Count - 1
                            m = Val(Text2(i).Text)
                            If m < 28 Then
                                m = Int(m / 9.001) * 100 + m
                            Else
                                m = Int(m / 9.001) * 100 + m * 6
                            End If
                            If m = n Then
                                CHUANGJIAN Val(Val(Text2(i).Text)) '创建
                                Text2(i).Text = Text2(13).Text
                                Text2(13).Text = ""
                                PAIXU "Text2"
                                Exit For
                            End If
                        Next i
                    End If
                End If
            End If
        Else
            Image4(Index).Picture = LoadPicture("")
        End If
        Timer1.Interval = 1
End Sub
'文本框4
Private Sub Text4_Change()
    If Text4.Text = "5623" Then
        Text5.Text = Val(Text5.Text) + 500
        Text4.Text = 1111
    End If
End Sub
'时钟
Private Sub Timer1_Timer()
    Static t As Boolean
    If Timer1.Interval = 10 Then Timer1.Interval = 1: t = False
    DoEvents
    If Command3.Visible = False Then Command3.Visible = True
    Command3.Top = Command3.Top + 1000 * (IIf(t, -1, 1))
    If Command3.Top > 7270 Or Command3.Top < 530 Then
        bArr = LoadResData(135, "CUSTOM")
        sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
        Timer1.Interval = 0
        Command3.Visible = False
        Command3.Top = 3720
        If t Then
            t = False
            If Len(Text3.Text) > 2 Then Text2(13).Text = SUIJISHU Else MsgBox "没牌了": Label4.Caption = "开": Exit Sub
            'Timer2.Interval = 1
        Else
            t = True
            If Len(Text3.Text) > 2 Then Text1(13).Text = SUIJISHU Else MsgBox "没牌了": Label4.Caption = "开": Exit Sub
        End If
    End If
End Sub

''''''随机数
Public Function SUIJISHU() As Integer
    Dim A() As String, i As Integer, d As Integer, m$, n$
    A = Split(Text3.Text, ",")
    Randomize
    i = Int(Rnd() * UBound(A)) + 1
    d = Val(A(i))
    GeSu(d) = GeSu(d) + 1
    If GeSu(d) = 4 Then
        m = d & ","
        n = Text3.Text & ","
        n = Replace(n, m, "", 1, 1, vbBinaryCompare)
        Text3.Text = Mid(n, 1, Len(n) - 1)
    End If
    SUIJISHU = d
End Function
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 11:50 , Processed in 0.031287 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表