@@ -2,10 +2,10 @@ using ArcadeLearningEnvironment, GR
2
2
3
3
export AtariEnv
4
4
5
- struct AtariEnv{To} <: AbstractEnv
5
+ struct AtariEnv{To,F } <: AbstractEnv
6
6
ale:: Ptr{Nothing}
7
7
screen:: Array{UInt8, 1}
8
- getscreen:: Function
8
+ getscreen! :: F
9
9
actions:: Array{Int32, 1}
10
10
action_space:: DiscreteSpace{Int}
11
11
observation_space:: To
@@ -38,44 +38,37 @@ function AtariEnv(name;
38
38
observation_length = getScreenWidth (ale) * getScreenHeight (ale)
39
39
if colorspace == " Grayscale"
40
40
screen = Array {Cuchar} (undef, observation_length)
41
- getscreen = getScreenGrayscale
41
+ getscreen! = ArcadeLearningEnvironment . getScreenGrayscale!
42
42
observation_space = MultiDiscreteSpace (fill (typemax (Cuchar), observation_length), fill (typemin (Cuchar), observation_length))
43
43
elseif colorspace == " RGB"
44
44
screen = Array {Cuchar} (undef, 3 * observation_length)
45
- getscreen = getScreenRGB
45
+ getscreen! = ArcadeLearningEnvironment . getScreenRGB!
46
46
observation_space = MultiDiscreteSpace (fill (typemax (Cuchar), 3 * observation_length), fill (typemin (Cuchar), 3 * observation_length))
47
47
elseif colorspace == " Raw"
48
48
screen = Array {Cuchar} (undef, observation_length)
49
- getscreen = getScreen
49
+ getscreen! = ArcadeLearningEnvironment . getScreen!
50
50
observation_space = MultiDiscreteSpace (fill (typemax (Cuchar), observation_length), fill (typemin (Cuchar), observation_length))
51
51
end
52
52
actions = actionset == :minimal ? getMinimalActionSet (ale) : getLegalActionSet (ale)
53
53
action_space = DiscreteSpace (length (actions))
54
- AtariEnv (ale, screen, getscreen, actions, action_space, observation_space, noopmax)
55
- end
56
-
57
- function getScreen (p:: Ptr , s:: Array{Cuchar, 1} )
58
- sraw = getScreen (p)
59
- for i in 1 : length (s)
60
- s[i] = sraw[i] .>> 1
61
- end
54
+ AtariEnv (ale, screen, getscreen!, actions, action_space, observation_space, noopmax)
62
55
end
63
56
64
57
function interact! (env:: AtariEnv , a)
65
58
r = act (env. ale, env. actions[a])
66
- env. getscreen (env. ale, env. screen)
59
+ env. getscreen! (env. ale, env. screen)
67
60
(observation= env. screen, reward= r, isdone= game_over (env. ale))
68
61
end
69
62
70
63
function observe (env:: AtariEnv )
71
- env. getscreen (env. ale, env. screen)
64
+ env. getscreen! (env. ale, env. screen)
72
65
(observation= env. screen, isdone= game_over (env. ale))
73
66
end
74
67
75
68
function reset! (env:: AtariEnv )
76
69
reset_game (env. ale)
77
70
for _ in 1 : rand (0 : env. noopmax) act (env. ale, Int32 (0 )) end
78
- env. getscreen (env. ale, env. screen)
71
+ env. getscreen! (env. ale, env. screen)
79
72
nothing
80
73
end
81
74
@@ -98,11 +91,9 @@ function imshowcolor(x::Array{UInt8, 1}, dims)
98
91
end
99
92
100
93
function render (env:: AtariEnv )
101
- x = zeros (UInt8, 3 * 160 * 210 )
102
- getScreenRGB ( env. ale, x)
103
- imshowcolor (x, ( 160 , 210 ))
94
+ x = getScreenRGB (env . ale )
95
+ imshowcolor (x, ( Int ( getScreenWidth ( env. ale)),
96
+ Int ( getScreenHeight (env . ale)) ))
104
97
end
105
98
106
- function list_atari_rom_names ()
107
- [splitext (x)[1 ] for x in readdir (joinpath (dirname (pathof (ArcadeLearningEnvironment)), " .." , " deps" , " roms" ))]
108
- end
99
+ list_atari_rom_names () = getROMList ()
0 commit comments