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

Posted 怪皮蛇皮怪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度强化学习制作森林冰火人游戏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

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

以上是关于深度强化学习制作森林冰火人游戏AI获取窗口部分界面的主要内容,如果未能解决你的问题,请参考以下文章

深度强化学习制作森林冰火人游戏AI识别游戏状态

深度强化学习制作森林冰火人游戏AI获取游戏屏幕

深度强化学习制作森林冰火人游戏AI下载游戏

深度强化学习制作4399小游戏ai

打破深度学习局限,强化学习深度森林或是企业AI决策技术的“良药”

教程 | 深度强化学习入门:用TensorFlow构建你的第一个游戏AI