2011-09-16 2 views
0

Character Model에 대해 6 개의 통계가있는 Statistic 모델이 있습니다. 사용자는 힘, 지능 등에 대한 값을 입력 할 수 있습니다. 내가하고 싶은 일은 사용자가 입력 한 값에 따라 보너스 나 벌금에 대한 값을 자동으로 할당하는 것입니다. 예를 들어, 10 또는 11이 입력되면 보너스는 0이됩니다. 14 또는 15를 입력하면 2가됩니다.이 방법을 쓰는 방법에 대한 팁은 무엇입니까? 감사!레일 - 모델의 형태로 사용자가 입력 한 데이터에 값 지정?


이것은 큰 도움이되었지만 다른 장애물을 맞았습니다. 내가 같은 캐릭터 컨트롤러에 표시 방법이 정의했습니다 : (이 정보의 대부분이 표시되는 위치)

@con_modifier = @character.statistic.con_modifier 

그래서 내가 문자보기에서 호출 할 수 있습니다 나는 불굴의 인내 모델을 절약 할 수있어 , 그리고 논리를 con_modifier 합계를 계산하는 데 사용하고 싶습니다. 이런 식으로 외국 모델을 올바르게 호출하려면 어떻게해야합니까? 내가 가진 :

def total 
    fortitude_base.to_i + ability.to_i + magic.to_i + misc.to_i 
end 

그리고로 변경 시도 :

def total 
    fortitude_base.to_i + @con_modifier + magic.to_i + misc.to_i 
end 

그러나이 오류 얻을 : 그래서 분명히

nil can't be coerced into Fixnum 

를 올바른 정보를 호출하지 않습니다. 어떤 아이디어? Fortitudes 컨트롤러에서도 정의해야합니까? 아니면 단순히 Fortitude 모델에서 정의하고이를 뷰에서 호출 할 수 있습니까?

답변

1

D &와 같은 냄새 D. 내 이전 Player 's Handbook에 문의하면 속성 값 n의 변경자는 간단히 (n - 10)/2입니다.

그래서 간단한 공식을 통해 속성 값을 얻었으므로 수정자를 가질 수 있습니다. 아마 속성 클래스의 클래스 메소드 거라고 :

class Attribute 
    #... 
    def self.modifier_for(attribute_score) 
     (attribute_score.to_i - 10)/2 
    end 
end 

을 그리고 같은 것을 사용하여 플레이어에 그를 연결 :

class Player 
    #... 
    def wis_modifier 
     Attribute.modifier_for(wis) 
    end 
    def modifier(attr) 
     self.send(attr.to_s + '_modifier') 
    end 
end 

will_save += p.modifier(:wis) 

당신이 원하는 경우에 당신은 아마 애호가 얻을 수 있지만, 간단한 좋은 출발이며 나중에 필요하면 지역 성직자가 코드를 치유하거나 코드 리팩토링의 +3 화염 도끼를 사용할 수 있습니다.

+0

예, DnD! 나는 캐릭터 시트 응용 프로그램을 작성 중이며, 플레이어를 두려워하게 만들고 자동화 할 수있는 것들을 자동화 할 것이라고 생각했습니다. 그러나, 당신이 보여주는 논리가 홀수 점수를 어떻게 처리 할 것입니까? 19는 또한 +4 (18처럼)의 변경자를 가지지 만 논리는 이것을 9/2, 또는 4.5로 나타낼 것입니다. .to_i는 자동으로 4로 반올림할까요, 아니면 소수를 반올림하는 방법이 있습니까? – illbzo1

+0

@ illbzo1 : 필자는 산술 연산을 Fixnum 모드로 강제 실행하여 모든 것이 9/2가 4이고 -5/2가 -3 인 정수로 처리 할 수 ​​있도록 약간의 편집증으로 'to_i'를 추가했습니다. 당신의 점수가 Fixnums라면 이미'to_i'가 필요 없습니다. 부동 소수점으로 끝나면 Float에'floor' 메소드가 있습니다. –

+0

이 질문을 게시하기 전에 시도한 논리와 관련하여 fixnum 관련 오류가 발생했기 때문에 fixnum은 그대로입니다. 오늘 저녁에 보시고 보여 드린 방법을 시도해 보겠습니다. to_i와 반올림에 대한 혼란을 해결해 주셔서 감사합니다, btw! – illbzo1

관련 문제