Я пишу палач-игру в рубине, и я хотел использовать аргумент case, чтобы определить, какая часть тела помещается в соответствии с рядом неправильных догадок. Я сделал эту игру, используя класс платы, который я использую для других игр, таких как шахматы и connect-4, потому что у меня есть метод, который сериализует класс доски, позволяющий мне сохранять и загружать игру без дополнительного кода. Чтобы игра была сохранена, мне нужен был способ определения количества неправильных догадок для палача без добавления дополнительных переменных в класс платы. Чтобы решить эту проблему, я использовал переменную экземпляра на классе платы, называемую историей, которая может использоваться для перемещения движений из игры в историю досок. Когда плата становится сериализованной, история также сохраняется, что может быть прочитано в игре и используется для определения неправильных догадок.
В игре палача у меня есть метод, называемый историей чтения (который я использую для всех игр, так как он решает проблему сериализации, описанную выше). Метод read_history отвечает за чтение прошлых догадок, отображение их и определение количества неправильных догадок. Затем это число передается методу зависания, который определяет, какие части тела палача добавить.
def hang(incorrect)
case incorrect
when 0
@hangman = [" ", " ", " "]
break
when 7
@hangman[2][2] = '\\'
when 6
@hangman[2][0] = '/'
when 5
@hangman[2][1] = '*'
when 4
@hangman[1][2] = '\\'
when 3
@hangman[1][0] = '/'
when 2
@hangman[1][1] = '|'
when 1
@hangman[0][1] = 'o'
end
end
Если бы я писал это в java, и значение 5 было передано вышеописанному методу, он бы прочитал инструкцию до тех пор, пока не ударит "когда 5" или в java-терминах "случай 5:". Он заметил бы, что в заявлении нет разрыва и будет перемещаться по списку, выполняющему код в "case 4:", и повторяться до тех пор, пока не будет найден разрыв. Если 0 были переданы, то он выполнил бы код, посмотрел бы разрыв и не выполнил бы и другие утверждения.
Мне интересно, сможет ли Ruby использовать аргументы case так, как это делает Java, таким образом, что они попадают в следующий оператор. Для моей конкретной проблемы я знаю, что я могу использовать цикл 0.upto(неправильный) и запускать такие случаи, но я хотел бы знать сходства и различия в аргументе case, используемом в ruby, а не в случае switch-case используется в java