在我的项目的一部分中,我正在分析不同的算法,以查看解决游戏的多种代理的性能。我找到了要实现的游戏,但是它是在Ruby中实现的,我对阅读代码不是很熟悉。我想知道您是否可以帮助我解决这个问题。
一个类看起来像这样:
require 'io/console'
class Player
attr_accessor :x
def initialize
@x = 0
end
def get_input
input = STDIN.getch
if input == 'a'
return :left
elsif input == 'd'
return :right
elsif input == 'q'
exit
end
return :nothing
end
end
而且我相信我可以使用以下方法将其成功转换为Python:
class Player:
def __init__(self, x = 0):
self.x = x
def get_input:
user_input = input("what direction? left = a, right = d, nothing = s")
direction = 'nothing'
if user_input == 'a':
return direction = 'left'
else:
return direction = 'right'
return direction
但是,还有另一个名为Ruby的游戏类,我无法充分理解它。这是代码:
class Game
attr_accessor :score, :map_size
def initialize player
@run = 0
@map_size = 12
@start_position = 3
@player = player
reset
# Clear the console
puts "\e[H\e[2J"
end
…
我想知道您是否知道“ def初始化播放器”这一行的含义。这是否意味着它正在创建一个播放器?但是然后我不确定运行变量在哪里适合所有这些。
我非常感谢您可以提供的所有帮助,如果需要,我将能够提供Game类的完整代码(仅约80行)。感谢您的所有帮助。
答案 0 :(得分:0)
在Ruby def initialize
中定义了一个构造函数。如果没有明确的含义,Ruby不需要为参数加括号,因此Python等效项为def __init__(self, player):
,它定义了一个以Game
作为参数的player
实例。看来您已经想出用@
取代self.
。
对于您的Player
类,构造函数的更准确翻译是:
class Player:
def __init__(self):
self.x = 0
Ruby版本不允许您将x
指定为构造函数的参数,它将初始化初始化为零,而没有任何选择可以覆盖它。
快速浏览this quick intro to Ruby for Python users,您可能会受益。
答案 1 :(得分:0)
对于x[2]
# "/SampleData/exp294/K9"
来说,def initialize player
对于经过Python训练的眼睛来说更具可读性,这也是用Ruby编写的通常方式。它不是在创建玩家,而是在创建游戏实例,并以“玩家”作为参数。