我工作在Rails Web應用程序的小模擬的棋盤遊戲Agricola一個記分卡。阿格里科拉棋盤遊戲分數卡建模Rails中
的問題是:什麼/如何是最好的(閱讀:正確)的方式在Rails的評分卡模型?
目前,我有一個ScoreCard
模型,其中列是計入最終分數的'類別'。這就像一句:
class ScoreCard < ActiveRecord::Base
validates :field_tile,
:pasture,
:grain,
:vegetable,
:sheep,
:wild_boar,
:cattle,
:unused_space,
:fenced_stable,
:clay_room,
:stone_room,
:family_member,
:victory_point,
:bonus_point,
:numericality => true
end
計分機制描述in this game manual(參見第8頁上的「計分」部分)。下面是從手動片段:
領域:所有領域瓦片上 玩家的農場進行評分, 不管他們是否是 當前休耕或播種。有0或1場的玩家 失1分。所述第一得分之後的每個 字段1點, 高達5個或 多個字段的最大的4個點。球員得分-1/1/2/3/4 點0-1/2/3/4/5 +字段。
牧場:分數是 圍欄區域(「牧場」),而不是爲 數的農家空間是 圍欄(「牧場空間」)的。個別牧場的大小 是 無關。沒有牧場的玩家 失去1分。每個牧場分數1個 點,最多的4點 4個或更多的牧場。玩家對0/1/2/3/4 +牧場的得分爲 -1/1/2/3/4點。
由於每個「類別」(牧場,穀物等)具有不同的評分機構,我定義返回的每個「類別」最終得分一些私有方法:
private
def calculate_field_tiles_score
case field_tile
when 0..1 then -1
when 2..4 then field_tile - 1
else 4
end
end
def calculate_pasture_score
# return proper score
end
我也有一個(公)calculate
方法,其中計算最終得分模式:
def calculate
calculate_field_tiles_score +
calculate_pasture_score +
# ... other scores
end
這是一個好辦法?我不確定建模的正確方式是什麼,但它不「感覺正確」。
我不太明白你的第二段代碼(帶有'map'和'inject'的代碼片段)。你能簡單解釋一下嗎? – ryanprayogo 2011-03-24 20:25:30
「地圖」將每位得分人都稱爲「@ farmyard」,從而生成個性化得分列表。 'inject'遍歷該分數列表,並通過調用具有先前結果的塊(從0開始)和列表中的當前項目給出總分數來對它們進行求和。 – oconnor0 2011-03-24 21:57:28
是的,就是這樣。以每位得分者給出的分數爲準,然後添加它們。很簡單,真的:-) – regularfry 2011-03-25 10:38:09