天亮了 昨晚2號玩家死亡
洛神:昨晚2號玩家被殺死了,邪惡陣營獲勝,可以向我許一個願望,我都會幫助勝利的一方實現
5號:好,Lulu肯請洛神讓森林所有 animals 都忘記我跟8號玩家真實身份是狼人
洛神:好,我答應你
迷霧森林的天空在洛神纖細的手一揮
落下一道紫色閃電,洛神便隨著煙雲消散而去
所有人已經忘記剛剛死去的好人、忘了遊戲的輸贏,兩位底牌為邪惡陣營的狼,從粉紅矩形門框中
與3號、10號勾著肩膀像是朋友般的從方舟甲板上悠然自在地回到舞會現場,失去記憶的阿虎,請 animal 合唱團演奏著藍調曲The Thrill Is Gone
那...我們再次調整一下架構(遮臉)
這邊架構實在是有點複雜 但也是一個很好的練習
最後根據昨天列的需求 決定把技能(:skill)抽出來獨立一個table並與villages關聯
原因是因為技能不只是要記住有什麼技能
對技能的需求我們也在這編列一下
因應上面這些條件 最後還是要處理技能能不能倍的用的判段
所以我們還是將技能抽象化出來
這樣同時更符合策略模式
也就是技能可以共用與封裝到每個遊戲角色身上
先創建一個新的model
$ rails g model skill
/models/skill.rb
class Skill < ApplicationRecord
belongs_to :village
PERIODS = %w(once every_day every_night first_night)
enum period: PERIODS
TREES = %w(prophet potion antidote gun shield knife)
enum tree: TREES
end
建立關聯
每個村莊裡的遊戲角色可以有很多技能
/models/village.rb
class Village < ApplicationRecord
has_many :games
has_many :seats, through: :games
has_many :skills
...
因為還是沒有commit(遮臉)
然後再將db還原
$ bundle exec rake db:rollback
$ bundle exec rake db:rollback
並修正db的資料結構
class CreateVillages < ActiveRecord::Migration[6.1]
def change
create_table :villages do |t|
t.string :title
t.string :skill_tree_ids, default: [], array: true
t.integer :role
t.integer :party
t.timestamps
end
end
end
對應上面的需求先暫時新增四個欄位,其中一個對應到遊戲角色(:village)
class CreateSkills < ActiveRecord::Migration[6.1]
def change
create_table :skills do |t|
t.boolean :available, default: true
t.integer :tree
t.integer :period
t.references :village, null: false, foreign_key: true
t.timestamps
end
end
end
然後我們建立一個公版的rake task
/app/libs/tasks/default_roles.rake
namespace :default_role do
desc "Create villager role template"
task generate_villager: :environment do
Village.create(title:'村民', role: 0, party: 0)
Village.create(title:'預言家', role: 1, party: 0)
Village.create(title:'女巫', role: 2, party: 0)
Village.create(title:'獵人', role: 3, party: 0)
Village.create(title:'守衛', role: 4, party: 0)
Village.create(title:'狼王', role: 5, party: 1)
Village.create(title:'小狼', role: 6, party: 1)
end
end
在cli上跑起來
$ bundle exec rake default_role:generate
這樣我們就設定好了第一個板子全部的遊戲角色了
$reef 過 $0.02375後起飛
天黑請閉眼