使用文本的Ruby Basic碰撞检测
我正在尝试制作一个简单的基于文本的ruby游戏,它基本上是一个迷宫。我已经计划好了在我建造的区域里把“墙”放在哪里。唯一的问题是,每当我试图检查“玩家”或实体是否发生碰撞时,它不会发生。一切都在继续,就好像没有任何围墙。 代码如下:使用文本的Ruby Basic碰撞检测,ruby,Ruby,我正在尝试制作一个简单的基于文本的ruby游戏,它基本上是一个迷宫。我已经计划好了在我建造的区域里把“墙”放在哪里。唯一的问题是,每当我试图检查“玩家”或实体是否发生碰撞时,它不会发生。一切都在继续,就好像没有任何围墙。 代码如下: #Maze Preset 1 Testing wallpos = [5,1],[1,2],[3,2],[4,2],[2,4],[3,4],[5,4],[3,5] puts wallpos x = gets y = gets pos = Array[x,y] if p
#Maze Preset 1 Testing
wallpos = [5,1],[1,2],[3,2],[4,2],[2,4],[3,4],[5,4],[3,5]
puts wallpos
x = gets
y = gets
pos = Array[x,y]
if pos == wallpos
puts ""
puts "Intersect"
else
puts ""
puts "Nope."
end
注意:我放置了一个puts WALL pos和puts pos,以便查看我得到的值是否正确。关于使用
gets
:
“\n”
字符。正如@7stud在他的评论中指出的,它是输入记录分隔符x = gets.chomp.to_i
y = gets.chomp.to_i
if wallpos.include?(pos)
从字符串的末尾去除换行符
另外,关于
pos==wallpos
:您正在比较您的位置是否等于整个wallpos
数组。将其更改为wallpos.include?(pos)
关于使用get
:
“\n”
字符。正如@7stud在他的评论中指出的,它是输入记录分隔符x = gets.chomp.to_i
y = gets.chomp.to_i
if wallpos.include?(pos)
从字符串的末尾去除换行符
另外,关于
pos==wallpos
:您正在比较您的位置是否等于整个wallpos
数组。将其更改为wallpos。包括?(pos)
正如Petr所说,您需要正确处理您的输入:
x = gets.chomp.to_i
y = gets.chomp.to_i
此外,您正在错误地使用相等运算符(==
)。单个坐标对永远不能等于坐标数组。相反,您应该使用来检查是否在数组中找到坐标。代码如下所示:
x = gets.chomp.to_i
y = gets.chomp.to_i
if wallpos.include?(pos)
顺便说一下,p
方法非常适合调试。如果您不确定程序中的值(例如,foo),可以通过添加以下内容将其打印出来:
p foo
它是
puts foo.inspect
正如Petr所说,您需要正确处理您的输入:
x = gets.chomp.to_i
y = gets.chomp.to_i
此外,您正在错误地使用相等运算符(==
)。单个坐标对永远不能等于坐标数组。相反,您应该使用来检查是否在数组中找到坐标。代码如下所示:
x = gets.chomp.to_i
y = gets.chomp.to_i
if wallpos.include?(pos)
顺便说一下,p
方法非常适合调试。如果您不确定程序中的值(例如,foo),可以通过添加以下内容将其打印出来:
p foo
它是
puts foo.inspect
关于使用gets,有几件事需要注意:它很可能会在字符串末尾追加一个\n字符。-
gets()
不向任何内容追加任何内容——它只读取其中的内容gets()
读取输入记录分隔符,然后停止(这可能是您的意思)。输入记录分隔符是一个ruby全局变量,默认设置为\n
(换行符)。但是,您可以将输入记录分隔符设置为所需的任何值,例如字符串“a”
,在这种情况下,gets()将读取并包括输入中的第一个“a”
。感谢您的评论,我不知道它是一个全局变量。关于使用gets,有几件事需要注意:它很可能在字符串的末尾追加一个\n字符。-gets()
不向任何内容追加任何内容——它只读取其中的内容gets()
读取输入记录分隔符,然后停止(这可能是您的意思)。输入记录分隔符是一个ruby全局变量,默认设置为\n
(换行符)。但是,您可以将输入记录分隔符设置为您想要的任何值,例如字符串“a”
,在这种情况下,gets()将读取并包括输入中的第一个“a”
。感谢您的评论,我不知道它是一个全局变量。虽然您可以指定一个数组,如wallpos=[5,1],[1,2],[3,2],[4,2],[3,4],[5,4],[3,5]
,不要。相反,将元素包装在一组包含的括号中:wallpos=[[5,1],[1,2],[3,2],[4,2],[2,4],[3,4],[5,4],[3,5]
。这是惯用的Ruby。虽然您可以分配一个数组,如wallpos=[5,1]、[1,2]、[3,2]、[4,2]、[2,4]、[3,4]、[5,4]、[3,5]
,但不要这样做。相反,将元素包装在一组包含的括号中:wallpos=[[5,1],[1,2],[3,2],[4,2],[2,4],[3,4],[5,4],[3,5]
。这是惯用的Ruby。