Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用文本的Ruby Basic碰撞检测_Ruby - Fatal编程技术网

使用文本的Ruby Basic碰撞检测

使用文本的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

我正在尝试制作一个简单的基于文本的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 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。