我工作在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