[第二十四只羊] 迷雾森林舞会XVIII 游戏角色设定again_final_final

天亮了 昨晚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

这样我们就设定好了第一个板子全部的游戏角色了
https://ithelp.ithome.com.tw/upload/images/20211009/20131155r5HxhBNsMv.png

阿虎每日选币

$reef 过 $0.02375後起飞

天黑请闭眼


<<:  DAY25神经网路(续三)

>>:  Android学习笔记30

SAML Assertion and OIDC Claim

实体、身份和关联属性 所谓的实体(entity)是指任何具有身份(identity)的人或东西。例...

[day4] 安全签章 - 产生订单 & 签章(Sign)

准备讯息文本 依照参数说明,建立订单的资料结构(DAY3-参考),详细参数规格可以在永丰API技术规...

Day23 ( 游戏设计 ) 射击幽浮

射击幽浮 教学原文参考:射击幽浮 这篇文章会介绍如何使用「建立游戏角色」、「游戏角色座标」、「游戏角...

Day 34 (MySQL)

1.除错 MySQL02影片00:01 2.MAD利用命令列进入MySQL $ % = 终端机 (1...

当你没有意识到,下次就该意识到

今天去做大肠镜,实际上不是个很好的经历。 前几天跟同事聊到这件事的时候,就发现原来大肠镜有无痛这个选...