2015-07-16 15 views
14

Tôi đang viết một trò chơi treo cổ bằng ruby ​​và tôi muốn sử dụng tuyên bố trường hợp để xác định phần thân nào sẽ đặt tương ứng với một số dự đoán không chính xác. Tôi thực hiện trò chơi này bằng cách sử dụng một lớp học hội đồng quản trị tôi sử dụng cho các trò chơi khác như cờ vua và kết nối-4 vì tôi có một phương pháp mà serializes lớp học hội đồng quản trị cho phép tôi lưu và tải các trò chơi mà không cần thêm bất kỳ mã. Đối với các trò chơi được lưu, tôi cần một số cách để xác định số lượng các dự đoán không chính xác cho hangman mà không cần thêm các biến bổ sung cho các lớp học hội đồng quản trị. Để giải quyết điều này, tôi đã sử dụng một biến cá thể trên lớp bảng gọi là lịch sử, có thể được sử dụng để đẩy các chuyển động từ trò chơi đến lịch sử bảng. Khi bảng được sắp xếp theo thứ tự, lịch sử cũng được lưu lại, có thể được đọc bởi trò chơi và được sử dụng để xác định các dự đoán sai.Tuyên bố trường hợp của ruby ​​có rơi qua không?

Trong trò chơi treo cổ, tôi có một phương pháp gọi là lịch sử đọc (mà tôi sử dụng cho tất cả các trò chơi vì nó giải quyết vấn đề serialization được mô tả ở trên). Phương thức read_history chịu trách nhiệm đọc các dự đoán trước đây, hiển thị chúng và xác định số lượng các dự đoán sai. Số này sau đó được chuyển đến một phương thức treo để xác định phần thân nào của hangman cần thêm.

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 

Nếu tôi viết thư này bằng java và giá trị 5 được chuyển sang phương thức trên, nó sẽ đọc câu lệnh cho đến khi nhấn "khi 5" hoặc trong thuật ngữ java "case 5:". Nó sẽ nhận thấy rằng không có một break trong tuyên bố và sẽ di chuyển xuống danh sách thực thi mã trong "case 4:" và lặp lại cho đến khi một break được tìm thấy. Nếu 0 được thông qua, nó sẽ thực thi mã, xem phần ngắt, và sẽ không thực thi và các câu lệnh khác.

Tôi tự hỏi liệu Ruby có khả năng sử dụng các câu lệnh case theo cách java thực hiện theo cách mà chúng rơi vào câu lệnh tiếp theo hay không. Đối với vấn đề cụ thể của tôi, tôi biết rằng tôi có thể sử dụng vòng lặp 0.upto (không chính xác) và chạy các trường hợp theo cách đó, nhưng tôi muốn biết những điểm tương đồng và khác biệt trong tuyên bố trường hợp được sử dụng trong ruby ​​như trái ngược với trường hợp chuyển đổi được sử dụng trong java

+0

Cụm từ bạn đang tìm kiếm là "bỏ qua", như trong "trường hợp này rơi vào trường hợp tiếp theo". – Kenster

Trả lời

8

Nó không rơi qua.

Ruby just doesn't have the same behavior as Java for this type of statement.

Nếu bạn muốn mô phỏng sự sụp đổ thông qua hành vi, bạn có thể làm một cái gì đó như thế này:

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 
+0

Cảm ơn bạn đã chính xác những gì tôi đang tìm kiếm –

+0

Thông tin tài liệu ruby ​​mà bạn liên kết không trực tiếp xác nhận/không xác nhận nếu tuyên bố về trường hợp của Ruby rơi qua. – Magne

30

Không, tuyên bố trường hợp của Ruby không thuộc thông qua như Java. Chỉ có một phần thực sự chạy (hoặc một phần khác). Tuy nhiên, bạn có thể liệt kê nhiều giá trị trong một kết quả phù hợp, ví dụ: như this site shows.

print "Enter your grade: " 
grade = gets.chomp 
case grade 
when "A", "B" 
    puts 'You pretty smart!' 
when "C", "D" 
    puts 'You pretty dumb!!' 
else 
    puts "You can't even use a computer!" 
end 

Nó có chức năng tương đương với người khổng lồ nếu có. Mã số page on it của Học viện mã khuyến nghị sử dụng dấu phẩy để cung cấp nhiều tùy chọn. Nhưng bạn vẫn không thể thực hiện nhiều hơn một nhánh logic.

+6

Không chắc chắn lý do tại sao * this * không phải là câu trả lời được chấp nhận. : -/ – jeffdill2

+0

Đây không phải là câu trả lời được chấp nhận vì nó không hoạt động tốt cho trường hợp sử dụng OP. Nó vẫn là thông tin tốt – richbai90

Các vấn đề liên quan