2016-06-17 3 views
0

Я пытаюсь создать простую текстовую рубиновую игру, которая в основном представляет собой лабиринт. Я уже планировал, где разместить «стены» в районе, который я построил. Единственная проблема заключается в том, что всякий раз, когда я пытаюсь проверить, сталкивается ли «игрок» или сущность, это не так. Это продолжается, как будто не было никаких стен. Вот код:Ruby Basic Collision Detection с использованием текста

#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 

Примечание: Я поместил Кладет wallpos и ставлю позы, так что я мог видеть, если значения, которые я получил правильно.

+0

Пока вы * можете * присвоить массив как '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. –

ответ

2

Как сказал Петр, вы должны обработать ввод правильно:

x = gets.chomp.to_i 
y = gets.chomp.to_i 

Кроме того, вы используете оператор равенства (==) неверно. Одна координатная пара никогда не может быть равна массиву координат. Вместо этого вы должны использовать Array#include?, чтобы проверить, найдены ли координаты в массиве. Код будет выглядеть следующим образом:

if wallpos.include?(pos) 

Кстати, метод p отлично подходит для отладки. Если вы не уверены в ценности в вашей программе (например, Foo), вы можете распечатать его, добавив:

p foo 

который короток для

puts foo.inspect 
3

Пара вещей об использовании gets:

  1. Она включает в себя "\n" символ после ввода пользователя. Как отметил в своем комментарии @ 7stud, это разделитель входных записей .
  2. Он возвращает строку.

Чтобы устранить проблему, используйте его так:

x = gets.chomp.to_i 
y = gets.chomp.to_i 

chomp полосы символ новой строки из конца строки.

также, что касается pos == wallpos: Вы сравниваете, что ваше положение равно всему массиву wallpos. Измените его на wallpos.include?(pos).

+1

* Несколько вещей об использовании gets: он скорее всего добавляет символ \ n в конец строки. * - 'gets()' ничего не добавляет к чему-либо - он просто читает, что там есть. 'gets()' считывает ввод до и включает разделитель входных данных *, а затем останавливается (это, вероятно, то, что вы имели в виду). Разделитель входных данных * - глобальная переменная ruby, которая по умолчанию установлена ​​в '\ n' (новая строка). Однако вы можете установить разделитель входных данных на все, что хотите, например. строка '' a '', и в этом случае gets() будет считывать и включать первый' 'a'' на вход. – 7stud

+0

Спасибо за ваш комментарий, я не знал, что это глобальная переменная. –