ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

强化学习实战 | 自定义gym环境之显示字符串

2022-01-08 19:36:39  阅读:177  来源: 互联网

标签:自定义 text gym label pyglet anchor 字符串 screen self


如果想用强化学习去实现扫雷、2048这种带有数字提示信息的游戏,自然是希望自定义 gym 环境时能把字符显示出来。上网查了很久,没有找到gym自带的图形工具Viewer可以显示字符串的信息,反而是通过pyglet

import pyglet
from gym.envs.classic_control import rendering

class DrawText:
    def __init__(self, label:pyglet.text.Label):
        self.label=label
    def render(self):
        self.label.draw()

screen_width = 500
screen_height = 500

viewer = rendering.Viewer(screen_width, screen_height + 20)
text = 'hello world'
label = pyglet.text.Label(text, font_size=36,
                          x=100, y=250, anchor_x='left', anchor_y='bottom',
                          color=(255, 123, 255, 255))
label.draw()
viewer.add_geom(DrawText(label))
viewer.render(return_rgb_array=False)

其中,lable的坐标x y是以左下两边为x y轴(而Viewer是以左上边为轴,这意味着显示图案和文字还得用两套坐标系...),anchor_x 和 anchor_y 指的是label对象的锚点,即如何将label对象视为一个点,有top / bottom / center / baseline四种选择。

效果:

再配合 Python动态变量名定义与调用 的方法,就可以批量地显示字符串了:

import pyglet
from gym.envs.classic_control import rendering

class DrawText:
    def __init__(self, label:pyglet.text.Label):
        self.label=label
    def render(self):
        self.label.draw()

screen_width = 500
screen_height = 500
viewer = rendering.Viewer(screen_width, screen_height)

for i in range(10):
    for j in range(10):
        exec('label_{}_{} = {}'.format(i, j, None))
        names = locals()
        names['label_' + str(i) + '_' + str(j)] = pyglet.text.Label('{}'.format(j), font_size=15,
                                  x=i*50+25, y=j*50+25, anchor_x='left', anchor_y='bottom',
                                  color=(i*10, i*20, i*25, 255))
        label = names['label_{}_{}'.format(i, j)]
        label.draw()
        viewer.add_geom(DrawText(label))

viewer.render(return_rgb_array=False)

效果:

 

标签:自定义,text,gym,label,pyglet,anchor,字符串,screen,self
来源: https://www.cnblogs.com/wsy950409/p/15779211.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有