2015-09-03 8 views
0

Я делаю простую игру командной строки с Ruby, и у меня возникают проблемы с сохранением некоторой информации без динамической базы данных/HTTP.Сохранение данных в командной строке, без базы данных [Ruby]

Например, скажем, я должен сделать сэндвич (в игре). Я представил с массивом ингредиентов, чтобы выбрать из, например, так:

[1] Carrot 
[2] Banana 
[3] Cheese 
[4] Tomato 

Я не могу жёстко прямое соответствие между номером и ингредиента, потому что до этого, мне было запрещено использовать несколько ингредиентов, в случайном порядке (поэтому полный массив ингредиентов - два предмета дольше). И я не хочу представлять список с номером [1] [2] [4] [6], потому что он запутывается.

То, что я делаю прямо сейчас жестко прописывать прямое соответствие между письмом и пунктом, поэтому для Banana печати B, для Cheese печати C и так далее. Но это не так идеально, особенно потому, что это шаблон, используемый во время игры, и в некоторых контекстах это будет очень неудобно, как для меня, так и для игрока.

Итак, есть ли лучший способ для меня сделать это? Как я могу связать вход с элементом списка, который генерируется случайным образом, а также сохранить эту информацию для дальнейшего использования по строке)?

+0

жёстко прописанные хэш на начало игры ...? то есть. {'B' => 'Banana', 'C' => 'Cheese'} –

+0

Но тогда будут конфликты в ключах. например 'C' для моркови и сыра. –

+0

Вот что я делаю прямо сейчас, используя хеши для жесткого кодирования прямых соответствий между входом и данными. Я хотел бы иметь возможность просто представить данные сначала и создать корреспонденцию, сохранить данные, как только произойдет вход, так, как это обычно делается в веб-среде. –

ответ

0

Вот как я ее решил:

Mario Zannone's comment заставил меня понять, что я мог бы использовать index элементов массива в качестве id, в то время как я смотрел на все это, как если бы это был своего рода просто текст.

Так вот код, который я придумал, чтобы воспользоваться этим:

([email protected]).each do |i| 
    puts "[#{i+1}] #{@ingredients[i]}" 
end 

Таким образом, теперь у меня есть прямое соответствие между элементом и вход с:

choice = gets.chomp.to_i - 1 
@selected_ingredient = @ingredients[choice]