はじめに
これはメモ帳です。
TECH CAMPというプログラミング教室に通っている添野といいます。
TECH CAMPでは「ChatSpace」という簡単なwebチャットアプリを開発しますが、
私はこれを改造し、ゲームアプリ化を図っています。この経緯をここに示し、更新していきます。
使用言語、ライブラリ等
Ruby,Rails,HTML,CSS,JavaScript,jQuery,SQL
エディタ:vscode
ゲームタイトル(アプリ名)
ChatSpace -CHARACTER'S WAR-です。
どんなゲーム?
チャットアプリ内で戦争を行います。
ChatSpaceはチャットアプリなので、文字列を投稿できます。
私はその文字列たちを戦闘させる仕組みを作っていきます。
ユーザーがやることはシンプルで、文字列を登録するだけです。
ルール
ユーザーは「チーム」を編成できます。
チームとは、字数4~16文字で編成された文字列です。
ユーザーはCPUもしくは他のユーザーが登録した「チーム」と対戦できます。
文字ごとの個性
・アルファベット、日本語が使用できます。記号などその他の文字は使用できません。
・文字は「体力」「攻撃力」「スピード」「戦闘型」「移動型」「属性」の6つのステータスを持ちます。
・ステータスはユーザーが任意に割り振ることはできず、文字ごとに予めランダムで設定されています。
例:「力」という文字のパラメータは以下です。
体力:10pt、攻撃力:5pt、スピード:0.5pt、属性:火
移動型:散策 (完全にランダムで移動します)
戦闘型:直線前方3 (毎ターン直線前方3マスに攻撃します)
※開発中のため色々と変更になる可能性が高いです
属性について
属性は火、水、木、光、闇の5つです。
属性によって有利不利の概念があります。
火は木に有利、水は火に有利、木は水に有利です。光と闇はお互いに有利です。
ゲームについての説明は以上です。以下は開発にあたり使用するデータになります。
(以下、随時更新しています)
[WIP]データベース(2020.03.04 14:30更新)
はじめに、データベース設計をしていきます。
上記で説明した「チーム」や「文字ごとの個性」という概念について、それぞれテーブル分けして定義します。
usersテーブル
ユーザーを識別します。
・ 複数のチームを所有できます。
Column | Type | Options |
---|---|---|
name | string | null: false |
password | string | null: false |
string | null: false | |
team_id | integer | null: false, foreign_key: true |
Assosiation
has_many :teams
teamsテーブル
チームを定義します。
・ 1人のユーザーによって所有されます。
・ 複数の文字(chars)を所有できます。
・ 文字数は4~16の制限を設けます。
Column | Type | Options |
---|---|---|
name | string | null: false |
user_id | integer | null: false, foreign_key: true |
char_id | integer | null: false, foreign_key: true |
Assosiation
belongs_to :user
has_many :chars
Validation
validates :char_id, length: { in: 4..16 } ←文字数制限の定義方法を調査中
charsテーブル
・ ユーザーの指定した文字の情報がテーブルに存在すれば情報を渡します。
・ ユーザーの指定した文字の情報がテーブルに存在しなければ新たに情報をランダム生成して格納します。
・ 1つのチームに所有されます。
・ 1つの戦闘型(btype)を所有します。
・ 1つの移動型(mtype)を所有します。
・ 1つの属性(element)を所有します。
Column | Type | Options |
---|---|---|
name | string | null: false |
vitality | integer | null: false |
attack | integer | null: false |
speed | integer | null: false |
team_id | integer | null: false, foreign_key: true |
btype_id | integer | null: false, foreign_key: true |
mtype_id | integer | null: false, foreign_key: true |
element_id | integer | null: false, foreign_key: true |
Assosiation
belongs_to: team
belongs_to: btype
belongs_to: mtype
belongs_to: element
btypesテーブル
・ このテーブルは予め情報を入れ、編集しません。
・ 1つのcharによって所有されます。
・ "space"には攻撃する座標の位置を指定します。←恐らく、もう一つテーブルの追加が必要?
Column | Type | Options |
---|---|---|
name | string | null: false |
space | integer | null: false |
Assosiation
belongs_to: char
mtypesテーブル
・ このテーブルは予め情報を入れ、編集しません。
・ 1つのcharによって所有されます。
・ "move"には移動方法の種類を定義します。←恐らく、もう一つテーブルの追加が必要?
Column | Type | Options |
---|---|---|
name | string | null: false |
move | integer | null: false |
Assosiation
belongs_to: char
elementsテーブル
・ このテーブルは予め情報を入れ、編集しません。
・ 1つのcharによって所有されます。
・ "ratio-to"には各属性に与える攻撃力の倍率が入ります。
・ "ratio-from"には各属性から受ける攻撃力の倍率が入ります。
Column | Type | Options |
---|---|---|
name | string | null: false |
ratio-to-fire | double | null: false |
ratio-to-water | double | null: false |
ratio-to-wood | double | null: false |
ratio-to-lightness | double | null: false |
ratio-to-darkness | double | null: false |
ratio-from-fire | double | null: false |
ratio-from-water | double | null: false |
ratio-from-wood | double | null: false |
ratio-from-lightness | double | null: false |
ratio-from-darkness | double | null: false |
Assosiation
belongs_to: char