找回密码
 加入
搜索
查看: 4079|回复: 7

[系统综合] 纸牌程序调用

  [复制链接]
发表于 2016-2-15 10:23:07 | 显示全部楼层 |阅读模式
最近想做个算24的小游戏,想调用win的纸牌图片,怎么去调用的,谢谢

评分

参与人数 1金钱 -10 收起 理由
afan -10

查看全部评分

发表于 2016-2-15 16:01:08 | 显示全部楼层
本帖最后由 love008 于 2016-2-18 19:28 编辑

WIN7 64位系统下还有点问题,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-2-15 20:23:04 | 显示全部楼层



#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>
Opt ("MustDeclareVars", 1)

_Main ( )
_Main (True)

Func _Main ($mixed=False)
    Local $a_hBMP[52][3], $a_hBitmap[52], $hGraphic, $hGUI, $hInstance
        Local $ressource = "cards.dll"
        ; 加载资源DLL到数据文件
        $hInstance = _WinAPI_LoadLibraryEx ($ressource, $LOAD_LIBRARY_AS_DATAFILE)        
        ; 从库加载位图
        ; 数组中的[0]=DLL索引, [1]=真实次序, [2]=BMP句柄
        Local $j = 15
        For $i = 0 To 38
                If $i = 12 Or $i = 25 Or $i =38 Then
                        $a_hBMP[$i][0] = $j -13
                        $a_hBMP[$i][1] = $i +1
                        $a_hBMP[$i][2] = _WinAPI_LoadBitmap ($hInstance, $a_hBMP[$i][0])
                Else
                        $a_hBMP[$i][0] = $j
                        $a_hBMP[$i][1] = $i +1
                        $a_hBMP[$i][2] = _WinAPI_LoadBitmap ($hInstance, $a_hBMP[$i][0])
                EndIf
                $j += 1
        Next
        $j = 2
        For $i = 39 To 50
                $a_hBMP[$i][0] = $j
                $a_hBMP[$i][1] = $i +1
                $a_hBMP[$i][2] = _WinAPI_LoadBitmap ($hInstance, $a_hBMP[$i][0])
                $j += 1
        Next
        $a_hBMP[51][0] = 1
        $a_hBMP[51][1] = 52
        $a_hBMP[51][2] = _WinAPI_LoadBitmap ($hInstance, $a_hBMP[51][0])
    If $mixed Then
                ; 获取随机顺序
                Local $aImagesIndex[52], $RandomIndex
                For $i = 0 To 51
                        Do
                                $RandomIndex = Random(0, 51, 1)
                                _ArraySearch($aImagesIndex, String($RandomIndex))
                                If @error Then $aImagesIndex[$i] = String($RandomIndex)
                        Until $aImagesIndex[$i]
                Next
                ;设置BMP处理随机顺序
                Local $aTmp[52][3]
                For $i = 0 To UBound($aTmp) -1
                        $aTmp[$i][0] = $a_hBMP[$aImagesIndex[$i]][0]
                        $aTmp[$i][1] = $a_hBMP[$aImagesIndex[$i]][1]
                        $aTmp[$i][2] = $a_hBMP[$aImagesIndex[$i]][2]
                Next
                ; 内部排序
        _ArraySort($aTmp, 0, 0, 12, 1)
        _ArraySort($aTmp, 0, 13, 25, 1)
        _ArraySort($aTmp, 0, 26, 38, 1)
        _ArraySort($aTmp, 0, 39, 51, 1)
                $a_hBMP = $aTmp
                $aTmp = 0
        EndIf
        ; 创建GUI
        Local $title='清一色纸牌'
        If $mixed Then $title = '随机纸牌'
        $hGUI = GUICreate ($title, 710, 350)
        GUISetBkColor(0x008000)
        GUISetState ()
    ; 初始化GDI+库
    _GDIPlus_Startup ()
        ; 通过位图句柄创建对象
        For $i = 0 To UBound($a_hBitmap) -1
                $a_hBitmap[$i] = _GDIPlus_BitmapCreateFromHBITMAP ($a_hBMP[$i][2])
        Next
        ; 通过窗口句柄创建一个图形对象
        $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    ; 绘制所有的位图对象
        Local $x = 20, $y = 20, $count
        For $i = 0 To UBound($a_hBitmap) -1
                $count = $i +1
                _GDIPlus_GraphicsDrawImage ($hGraphic, $a_hBitmap[$i], $x, $y)
                If $i > 1 And Mod($count, 13) = 0 Then
                        $x += 100
                Else
                        $x += 20
                EndIf
                If $i = 25 Then
                        $x = 20
                        $y += 140
                EndIf
        Next
        ;循环直到用户退出
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
    ; 清理资源
        For $i = 0 To UBound($a_hBitmap) -1
                _GDIPlus_ImageDispose ($a_hBitmap[$i])
                _WinAPI_DeleteObject ($a_hBMP[$i][2])
        Next
        _WinAPI_FreeLibrary ($hInstance)
    ; 关闭GDI+库
    _GDIPlus_ShutDown ()
        GUIDelete()
EndFunc   ;==>_Main



winxp+autoit3.3.6.1下测试通过

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 5金钱 +170 贡献 +7 收起 理由
xayle + 50 厉害、佩服
ScriptFans + 10 感谢分享!
zldfsz + 50 + 5 测试成功
nmgwddj + 10 原来是这么存放的。
afan + 50 cards.dll 都被你找到了…

查看全部评分

发表于 2016-2-16 13:14:21 | 显示全部楼层
通过窗口句柄创建一个图形对象
发表于 2016-2-16 21:49:29 | 显示全部楼层
测试只有一个绿色窗口
发表于 2016-2-18 09:55:44 | 显示全部楼层
本帖最后由 zldfsz 于 2016-2-18 10:04 编辑

win7用户拷贝XP的cards.dll到脚本目录后测试成功,附上cards.dll网盘下载地址:
点击去百度云网盘下载cards.dll

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-2-18 20:45:04 | 显示全部楼层
测试3楼的确实只有绿屏
发表于 2016-2-18 23:12:42 | 显示全部楼层
非常好,收藏以后作为参考!
感谢分享!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 22:26 , Processed in 0.088419 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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