组织足球(足球)管理模拟的数据

时间:2016-07-11 12:27:40

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试使用Ruby on Rails创建一个在线足球(足球)管理游戏,因为它对我来说非常雄心勃勃,我发现一些部分相当具有挑战性。我编写了一个基本的匹配引擎,但是当谈到战术,阵容,编队等时,我发现组织各种数据并在ActiveRecord中创建关系更加困难。这同样适用于联赛和杯赛系统。

我将尝试在此提供简要概述:

  • 一个国家/俱乐部有一个团队和一个青年/ u21团队
  • 一个国家/俱乐部/团队有球员
  • 一个国家/俱乐部/团队在联赛和杯赛系统中与其他人进行比赛
  • 联盟系统每个分区有三个联赛(金字塔系统:1个升级,3个降级)
  • 一个杯赛系统有淘汰赛(有时是小联盟小组赛阶段),包括加时赛和点球大战
  • 联盟/杯赛每个赛季都有轮次/比赛日
  • 比赛/比赛日有比赛
  • 匹配有详细信息,例如分数/评分
  • 匹配有动作,例如目标/协助
  • 比赛有每个球队的战术/阵容,例如形成/播放器

任何想法如何最好地在模型中组织这个?

编辑:我主要遇到的问题是将球员与比赛联系起来(通过阵容?)。两支球队都需要选择11名球员参赛:1球进球,其余10名外场球员分布在防守/中场/进攻外场位置,例如: 4-4-2等等因此可以选择玩家11在中场,玩家9在攻击,玩家1在目标等等。可能的阵型包括3-5-2,3-4-3,4-4- 2,4-5-1,4-3-3等

以下是我尝试使用的架构示例:

create_table "teams", force: :cascade do |t|
  t.integer  "nation_id"
  ...
end

create_table "players", force: :cascade do |t|
  t.integer  "nation_id"
  t.integer  "team_id"
  ...
end

create_table "matches", force: :cascade do |t|
  t.integer  "home_team_id"
  t.integer  "away_team_id"
  ...
end

create_table "lineups", force: :cascade do |t|
  t.integer  "match_id"
  t.integer  "team_id"
  ...
end

create_table "formations", force: :cascade do |t|
  t.string   "name"
  ...
end

create_table "positions", force: :cascade do |t|
  t.integer  "formation_id"
  t.string   "name"
  ...
end

这样的事情会起作用吗?我不确定是否需要编队或职位表,或者这是否有效。

1 个答案:

答案 0 :(得分:2)

这本身不是Rails问题 - 这是一个通用的建模问题。应该有大量关于面向对象建模的书籍,文章和教程。

这里没有详细说明:

  • 基本上,您也可以通过写清单来完成大部分工作。
  • 在您的描述中,每一个实质性的词都会导致(候选人)模型。即:国家,俱乐部,球队,球员,比赛,联赛系统,杯赛,联赛,分区,比赛日等。
  • 在框中绘制(谷歌“UML类图”,如果你想这样做的话)。这些框对应于文件app/models/*.rb
  • 在每个框之间画一条线,它们之间有某种关系(例如,关联)。
  • 标出每个可以相关的数量(即“每个玩家可以拥有零个或一个团队”,“每个团队可以拥有多个玩家”等)。这样,您就可以使用has_manyhas_onebelongs_to关联。

最后,寻找那些过于微不足道的模型来获得实际的Rails类。例如,“day”可能是或者可能不是类值得的(即,它可能只是您的匹配的日期属性;但是如果您想要将更多信息与日期本身相关联,或者您想要计划匹配这是在同一天发生的,在规划阶段还没有实际日期,然后继续)。这很大程度上取决于风格,观点和经验,这里没有严格的规则。

查看 建模介绍中的经典作品“设计模式”。