カードゲームを作る　その４（基本データの作成）

##この記事は
とある[カードゲーム](http://arcana.vector.co.jp)が非常に面白く、
そのゲームの見た目クローンを作ろうと一人のプログラマーが奮闘していくブログのような記事です。

その３の続き
ここでは、カードやユーザ情報等の基本的なデータの作成しています。

## データ作成(実装)

```text:ユーザ情報
$ rails g model Avatar ¥
   UserId:string ¥
   Name:string ¥
   Password:string ¥
   Lv:integer ¥
   Exp:integer ¥
   DeckCurrentNo:integer ¥
   DeckDefenceNo:integer ¥
   Icon:string

(TBD:Guild
 + BelongGuildId:string)
```
```text:手持ちカード
$ rails g model StockMonster UserId:string CardId:string
```
```text:デッキ情報
$ rails g model DeckInfo UserId:string DeckNo:integer SlotNo:integer Name:string 
```
```text:ユーザカード情報
$ rails g model UserStockCards UserId:string UserStockNo:integer CardId:string CardExp:integer AddSkillNos:string 
```
```text:モンスター情報(マスタ)
$ rails g scaffold MonsterInfo CardId:string Name:string Hp:integer Atk:integer Cost:integer Wait:integer Lv:integer Exp:integer Rare:integer Race:integer ImageId:string SkillNos:string
```
```text:スキル情報(マスタ)
$ rails g model SkillInfo SkillNo:integer ActionId:integer Rank:integer  
```
```text:スキル効果
(データを作らず、後のプログラムで全て実装していく。
Action(ActionId, Rank, MyDeck, YourDeck, TurnNo, BattleStatus){ 
}
ActionInfo(ActionId, Rank){
  Return Name, Description
}
)
```
```text:ギルド情報
(TBD:Guild)
```
```text:ユーザフレンド情報
(TBD:Friend)
```
```bash:ユーザ状態
$ rails g model UserStatus UserId:string Stamina:integer SessionId:string 
+ Labyrinth (地下迷宮)
+ Tower
+ ArenaRank
+ ArenaWonCount
+ ArenaTotalCount
+ Dungeon(予備)
+ Story)
```
```rb:app/models/const.rb
class Const < ActiveRecord::Base
  enum Race: { Kingdom: 1, Spritual: 2, Tribal: 3, Pluto: 4, Lilith: 97, Devil: 100 }
  # リリス、魔神　種族はイベント専用の種族
  enum Rare: { C: 1, UC: 2, R: 3, SR: 4, SSR: 5, UR: 6, Miracle: 7 }
　# オリジナルゲームは　現在　5 まで。UR,Miracle は将来の予約
end
```

### 一部修正
モンスター情報について、コマンドで書くのは長すぎるなーと感じたので、先ほど作ったモノをベースに
手作業で変更しました。

```ruby:db/migrate/20160117160640_create_monster_infos.rb
class CreateMonsterInfos < ActiveRecord::Migration
  def change
    create_table :monster_infos do |t|
      t.string :CardId
      t.string :Name
      t.integer :Race
      t.integer :Rare
      t.string :ImageId
      t.string :SkillNos
      t.integer :Lv
      t.integer :Hp
      t.integer :Atk
      t.integer :Cost
      t.integer :Wait
      t.integer :Exp

      t.integer :Lv1
      t.integer :Hp1
      t.integer :Atk1
      t.integer :Cost1
      t.integer :Wait1
      t.integer :Exp1
      t.integer :Lv2
      t.integer :Hp2
      t.integer :Atk2
      t.integer :Cost2
      t.integer :Wait2
      t.integer :Exp2
      t.integer :Lv3
      t.integer :Hp3
      t.integer :Atk3
      t.integer :Cost3
      t.integer :Wait3
      t.integer :Exp3
      t.integer :Lv4
      t.integer :Hp4
      t.integer :Atk4
      t.integer :Cost4
      t.integer :Wait4
      t.integer :Exp4
      t.integer :Lv5
      t.integer :Hp5
      t.integer :Atk5
      t.integer :Cost5
      t.integer :Wait5
      t.integer :Exp5
      t.integer :Lv6
      t.integer :Hp6
      t.integer :Atk6
      t.integer :Cost6
      t.integer :Wait6
      t.integer :Exp6
      t.integer :Lv7
      t.integer :Hp7
      t.integer :Atk7
      t.integer :Cost7
      t.integer :Wait7
      t.integer :Exp7
      t.integer :Lv8
      t.integer :Hp8
      t.integer :Atk8
      t.integer :Cost8
      t.integer :Wait8
      t.integer :Exp8
      t.integer :Lv9
      t.integer :Hp9
      t.integer :Atk9
      t.integer :Cost9
      t.integer :Wait9
      t.integer :Exp9
      t.integer :Lv10
      t.integer :Hp10
      t.integer :Atk10
      t.integer :Cost10
      t.integer :Wait10
      t.integer :Exp10
      t.integer :Lv11
      t.integer :Hp11
      t.integer :Atk11
      t.integer :Cost11
      t.integer :Wait11
      t.integer :Exp11
      t.integer :Lv12
      t.integer :Hp12
      t.integer :Atk12
      t.integer :Cost12
      t.integer :Wait12
      t.integer :Exp12
      t.integer :Lv13
      t.integer :Hp13
      t.integer :Atk13
      t.integer :Cost13
      t.integer :Wait13
      t.integer :Exp13
      t.integer :Lv14
      t.integer :Hp14
      t.integer :Atk14
      t.integer :Cost14
      t.integer :Wait14
      t.integer :Exp14
      t.integer :Lv15
      t.integer :Hp15
      t.integer :Atk15
      t.integer :Cost15
      t.integer :Wait15
      t.integer :Exp15
      t.timestamps null: false
    end
  end
end
```

## DB作成

```bash
$ rake db:migrate
```
>
```text
   :（割愛)
== 20160120154117 CreateMonsterInfos: migrating ===============================
-- create_table(:monster_infos)
   -> 0.0019s
== 20160120154117 CreateMonsterInfos: migrated (0.0020s) ======================
```
エラーが出ていないことを確認
>

##備考
間違えて一回作り直したくなったら以下のようなコマンドで削除してやり直す。

```bash:消すコマンド
$ rails d model Avatar
$ rails d model DeckInfo 
...
```

一部修正とかなら、、、、（TBD)

```bash:列の追加
$ rails g migration Addクラス名
$ vi 生成されたファイル
```
```bash:列の削除
$ rails g migration Removeクラス名
$ vi 生成されたファイル
```


##試しに動かしてみた。

```bash:起動確認
$ rails server -p 3333
$ curl http://localhost:3333/monster_infos
```
>
```
[]
```
>

出力がこれだけだったので、ちょっと寂しいけど、
データは何も入れてないし、反応してくれてるからOK


-----
いくつか言い訳

* 不定期連載です。
* 多分途中で挫折します。
* 筆者のメモも兼ねているため過去の記事も遠慮なく随時編集いたします。
* プログラミングの開発経験はあってもゲームの開発経験はこれが初めてです。

等色々ありますが、生暖かい目で応援してくださると光栄です。