查看: 100|回覆: 1

[教程] VB实现的《QQ美女找茬游戏》实例

[複製鏈接]

2

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2009-3-25
發表於 2024-9-3 16:42:52 | 顯示全部樓層 |閲讀模式

本文实例讲述了VB实现的《QQ美女找茬游戏》。分享给大家供大家参考。具体如下:

比较无聊哈,原理很简单,用VB速度比较慢,但是实现很容易。

Option Explicit
Private Type sPOINT
  x As Long
  y As Long
End Type
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
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 Const HWND_TOPMOST& = -1
' 将窗口置于列表顶部,并位于任何最顶部窗口的前面
Private Const SWP_NOSIZE& = &H1
' 保持窗口大小
Private Const SWP_NOMOVE& = &H2
' 保持窗口位置
Private Sub Form_Load()
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
' 将窗口设为总在最前
End Sub
'把long型的RGB值分解成3个分量
Sub ColorRGB(Color As Long, C() As Integer)
  Const ByN As Integer = 256
  Const ByN2 As Long = 65536
  C(1) = (Color Mod ByN)
  C(2) = ((Color Mod ByN2) \ ByN)
  C(3) = (Color \ ByN2)
End Sub
Private Sub GetPoint()
  Dim p1(497, 447) As Long, p2(497, 447) As Long, C1(3) As Integer, C2(3) As Integer
  '数组大小匹配于图片的大小
  Dim pic1 As sPOINT, pic2 As sPOINT
  '设置两张图片的屏幕位置
  pic1.x = 8
  pic1.y = 192
  pic2.x = 517
  pic2.y = 192
  Dim h As Long, hD As Long, r As Long, i As Integer, j As Integer
  hD = GetDC(0)
  '读入两张图片
  For i = 0 To 497
    For j = 0 To 447
      p1(i, j) = GetPixel(hD, i + pic1.x, j + pic1.y)
      p2(i, j) = GetPixel(hD, i + pic2.x, j + pic2.y)
    Next
  Next
  '对比,标记差异
  Dim t As Boolean
  t = True
  For i = 0 To 497
    For j = 0 To 447
      Call ColorRGB(p1(i, j), C1())
      Call ColorRGB(p2(i, j), C2())
      If (Abs(C1(1) - C2(1)) > 30 Or Abs(C1(2) - C2(2)) > 30 Or Abs(C1(3) - C2(3)) > 30) Then
        t = Not t
        If t Then
          Picture1.ForeColor = &H0&
        Else
          Picture1.ForeColor = &HFF00&
        End If
      Else
        Picture1.ForeColor = p1(i, j)
      End If
      Picture1.PSet (i, j)
    Next
  Next
End Sub
Private Sub Picture1_Click()
Me.Visible = False
DoEvents
GetPoint
Me.Visible = True
End Sub

希望本文所述对大家的VB程序设计有所帮助。

您可能感兴趣的文章:
  • 拳皇KOF 97格斗+模拟器+作弊器+帮助文件 下载
  • Android实现微信朋友圈发本地视频功能
  • Android 微信摇骰子和猜拳作弊器原理解析
回覆

使用道具 舉報

0

主題

720

回帖

4441

積分

琼殿精英

金币
3721
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-5-9 03:21:04 | 顯示全部樓層
看到楼主分享的这个VB实现找茬游戏的代码,感觉很有创意啊!支持一下

虽然楼主说用VB速度比较慢,但这个实现思路确实很清晰。用GetPixel直接读取屏幕像素进行对比,对于学习Windows API和图像处理应该很有帮助吧。

有个小建议哈,这种逐像素对比的方法虽然直观,但效率确实不高。如果以后想优化的话,可以考虑:
1. 先对图片进行缩放或采样,减少比较次数
2. 使用内存DC而不是直接读屏幕
3. 可以加入多线程处理提升速度

另外,看代码里设置窗口置顶的功能用得不错,游戏体验会比较好。赞一个

期待楼主分享更多的VB作品!
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部