Skip to content

データモデル設計

概要

ぷよぷよゲームアプリケーションのデータモデル設計について説明します。Clean Architectureにおけるドメイン層の中核となるデータ構造と、各層間でのデータフローを定義します。

ドメインモデル

基本データ構造

uml diagram

エンティティ詳細

Game

ゲーム全体の状態を管理するルートエンティティ

属性 説明
id string ゲームの一意識別子
status GameStatus ゲームの状態(waiting, playing, paused, gameover)
score number 現在のスコア
level number 現在のレベル
chainCount number 最大連鎖数
isZenkeshi boolean 全消しフラグ
createdAt Date ゲーム開始時刻
updatedAt Date 最終更新時刻

Field

ゲームフィールドの状態を表現

属性 説明
id string フィールドの一意識別子
width number フィールドの幅(デフォルト: 6)
height number フィールドの高さ(デフォルト: 13)
grid Puyo[][] ぷよの配置状態を表す2次元配列
gameId string 関連するゲームのID

Puyo

個々のぷよを表現

属性 説明
id string ぷよの一意識別子
color PuyoColor ぷよの色(red, green, blue, yellow, purple)
x number X座標(0-5)
y number Y座標(0-12)
fieldId string 所属するフィールドのID
isGhost boolean ゴースト(落下予測位置)表示用フラグ

PuyoPair

落下中のぷよペアを表現

属性 説明
id string ぷよペアの一意識別子
centerPuyo Puyo 中心となるぷよ
rotatePuyo Puyo 回転するぷよ
rotation Rotation 回転状態(0, 90, 180, 270)
x number ペアの中心X座標
y number ペアの中心Y座標
gameId string 関連するゲームのID

Chain

連鎖情報を記録

属性 説明
id string 連鎖の一意識別子
chainNumber number 連鎖数
erasedPuyos Puyo[] 消去されたぷよのリスト
bonus number 連鎖ボーナス
gameId string 関連するゲームのID
timestamp Date 連鎖発生時刻

Score

スコア情報を管理

属性 説明
id string スコアの一意識別子
value number 現在のスコア値
chainBonus number 連鎖によるボーナス
zenkeshiBonus number 全消しボーナス
gameId string 関連するゲームのID

NextQueue

次に落下するぷよの予告キュー

属性 説明
id string キューの一意識別子
queue PuyoPair[] 次に落下するぷよペアのキュー
gameId string 関連するゲームのID

列挙型定義

GameStatus

enum GameStatus {
  WAITING = 'waiting',
  PLAYING = 'playing',
  PAUSED = 'paused',
  GAMEOVER = 'gameover'
}

PuyoColor

enum PuyoColor {
  RED = 'red',
  GREEN = 'green',
  BLUE = 'blue',
  YELLOW = 'yellow',
  PURPLE = 'purple'
}

Rotation

enum Rotation {
  DEG_0 = 0,
  DEG_90 = 90,
  DEG_180 = 180,
  DEG_270 = 270
}

データフロー図

uml diagram

制約と規則

フィールド制約

  • フィールドサイズは6×13マス固定
  • 最上段(y=0)は見えない領域
  • ぷよが最上段に固定されるとゲームオーバー

ぷよ制約

  • 同時に表示される色は3〜5色
  • 必ず2個1組で落下
  • 重力により下方向に落下

連鎖制約

  • 同色4個以上の連結で消去
  • 縦横の連結のみ(斜めは連結しない)
  • 消去後の落下で新たな連結が発生すると連鎖

スコア計算規則

  • 基本点 = 消去ぷよ数 × 10
  • 連鎖ボーナス = 基本点 × 連鎖倍率
  • 全消しボーナス = 固定値(例: 2000点)

パフォーマンス考慮事項

インデックス設計

  • Game.id: プライマリキー
  • Field.gameId: 外部キーインデックス
  • Puyo.(x, y, fieldId): 複合インデックス
  • Chain.gameId: 外部キーインデックス

データ最適化

  • フィールドの状態は2次元配列で効率的に管理
  • 消去済みぷよは即座に削除してメモリ効率を向上
  • 連鎖情報は統計用に別途保存

キャッシュ戦略

  • 現在のゲーム状態はメモリに保持
  • 過去のゲーム履歴は必要に応じて読み込み
  • NEXTキューは先読みして生成