深度强化学习制作森林冰火人游戏AI(四)获取窗口部分界面

概述

这篇主要讲述如何用python获取森林冰火人窗口部分界面
在获取部分界面的图片之后通过图片识别/分类来判断当前游戏所属的状态

前篇:深度强化学习制作森林冰火人游戏AI(三)向游戏输出键盘控制信息
后篇:深度强化学习制作森林冰火人游戏AI(五)识别游戏状态

森林冰火人游戏界面介绍

游戏开始界面

游戏开始界面很简单,只有一个开始游戏与右上角的背景音乐控制按钮
程序其实不太需要控制开始界面,手动点进去就可以节省很多代码工作量
在这里插入图片描述

选关界面

选关界面可以选择的按钮就多了,而且选关界面是固定的
也就是说后续控制选关界面只需要计算固定点坐标点击就好了
在这里插入图片描述

游戏界面

游戏界面需要注意,游戏界面具有两个不同背景
其次,游戏界面左上角的红钻石就是算法的奖励函数的需要识别的对象
在这里插入图片描述
在这里插入图片描述

游戏界面区分方法

因为几个状态其实差别蛮大的,所以本文就简单的做截图识别来区分几个界面的状态

截图界面选取

游戏左上角有一块区域,在不同界面不一样,但在同一截面基本一致
区域起点坐标(左上角为0,0)(20,40) 区域高宽(70,265)
关卡选择界面
在这里插入图片描述
游戏界面
在这里插入图片描述
游戏开始界面
在这里插入图片描述

获取 部分窗口截屏 代码

class window_capture():
    def __init__(self,window_name):
        self.__handle = windll.user32.FindWindowW(None, window_name)
 	def capture_part(self,start_x,start_y,height,width):
        # 获取窗口客户区的大小
        # r = RECT()
        windll.user32.SetProcessDPIAware()
        # windll.user32.GetClientRect(self.__handle, byref(r))
        # width, height = r.right, r.bottom
        # 开始截图
        dc = windll.user32.GetDC(self.__handle)
        cdc = windll.gdi32.CreateCompatibleDC(dc)
        bitmap = windll.gdi32.CreateCompatibleBitmap(dc, width, height)
        windll.gdi32.SelectObject(cdc, bitmap)
        windll.gdi32.BitBlt(cdc, 0,0, width, height, dc, start_x, start_y, 0x00CC0020)
        # 截图是BGRA排列,因此总元素个数需要乘以4
        total_bytes = width*height*4
        buffer = bytearray(total_bytes)
        byte_array = c_ubyte*total_bytes
        windll.gdi32.GetBitmapBits(bitmap, total_bytes, byte_array.from_buffer(buffer))
        windll.gdi32.DeleteObject(bitmap)
        windll.gdi32.DeleteObject(cdc)
        windll.user32.ReleaseDC(self.__handle, dc)
        img_arr=np.frombuffer(buffer, dtype=np.uint8).reshape(height, width, 4)
        image_resize = Image.fromarray(img_arr).resize((self.__reshape_width,self.__reshape_height))
        return image_resize

主体还是之前的后台截屏,不过这次是部分截取

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值