我正在用ruby编写一个hang子游戏,我想使用一个case语句来确定哪个身体部位对应于一些不正确的猜测.我使用我用于象棋和连接-4等其他游戏的棋盘类,因为我有一种方法来序列化棋盘类,允许我保存和加载游戏而没有任何额外的代码.对于要保存的游戏,我需要一些方法来确定hang子手的错误猜测的数量,而不需要向板类添加额外的变量.为了解决这个问题,我在一个名为history的板子类上使用了一个实例变量,它可以用来将游戏从游戏推向棋盘历史.当棋盘被序列化时,历史也被保存,游戏中可以读取历史记录,并用于确定不正确的猜测.
在蝙蝠侠游戏中,我有一个叫做阅读历史的方法(我用于所有的游戏,因为它解决了上述的序列化问题). read_history方法负责读取过去的猜测,显示它们,并确定错误猜测的数量.然后将该号码传递给一个挂起方法,该方法可确定要添加的hangman的哪些身体部位.
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术语“case 5:”时.它会注意到在语句中没有中断,并且将向下移动执行“情况4:”代码的列表,并重复直到找到中断.如果0被传递,那么它将执行代码,看到break,并且不会执行和其他语句.
我想知道Ruby是否有能力使用case语句,方式是java的方式,直到下一个语句.对于我的特殊问题,我知道我可以使用一个0.upto(不正确的)循环并以这种方式运行这些例子,但是我想知道在ruby中使用的case语句的相似点和不同之处,而不是switch-case用于java
解决方法
它不会通过.
Ruby just doesn’t have the same behavior as Java for this type of statement.
如果你想通过行为模拟堕落,你可以这样做:
def hang(incorrect) @hangman = [" "," "] @hangman[2][2] = '\\' if incorrect > 6 @hangman[2][0] = '/' if incorrect > 5 @hangman[2][1] = '*' if incorrect > 4 @hangman[1][2] = '\\' if incorrect > 3 @hangman[1][0] = '/' if incorrect > 2 @hangman[1][1] = '|' if incorrect > 1 @hangman[0][1] = 'o' if incorrect > 0 @hangman end