-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathdomain-model.puml
126 lines (105 loc) · 3.34 KB
/
domain-model.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
@startuml
skinparam PackageStyle rectangle
package ゲーム集約 {
object ゲーム {
ゲームID
白プレイヤー
黒プレイヤー
ゲームステータス
セーブデータID
}
}
package セーブデータ集約 {
object セーブデータ{
ID
ゲームID
更新日時
}
object ターン情報 {
ターン数
スキップ数
行動可能な色
}
object 盤面 {
マス<List>
}
object コマ {
カラー
}
}
ゲーム "1" -down- "1..n" セーブデータ
セーブデータ "1" *-down- "1" ターン情報
セーブデータ "1" *-down- "1" 盤面
盤面 "1" *-down- "0..n" コマ
note right of ゲーム
* プレイヤーにはゲスト/登録ユーザ/CPUを設定できる
* 最低一人の人間のプレイヤーが必要
* ゲームのステータスはプレイ中・白勝利・黒勝利・引き分け・中断・放棄
end note
package 汎用 {
object カラー {
カラーコード
}
object 座標 {
x
y
}
}
object ゲームルール {
}
note right of ゲームルール
初期条件
* 原則的に白色プレイヤーが先攻
ゲーム中
* ターン中は片方の色だけ行動可能
* 毎ターンプレイヤーが交代する
* 「盤面の配置」と「置く石の色」によって行動できるかどうか決まる
ゲームの終了条件
* 2連続でスキップが続いた場合
* 盤が全て埋まった場合
勝敗条件
* 終了時、相手より自分の色の石の数が多い方の勝ち
* 途中経過の石の数は勝敗に影響しない
end note
note left of ターン情報
* ターン数は1から始まり、必ず1ずつ増える
* 行動(変更)できるのは1ターンに1回だけ
* 行動できない場合はスキップ数が増える
* スキップ数は0から始まる。スキップされると1ずつ増える。それ以外の場合は常に0にリセット。
end note
note right of 盤面
* 初期状態では白2黒2を中央に市松模様に配置
* 同じ色で連続する別の色をはさむことができるときだけ置くことができる
* はさまれた石は色が反転する
* 盤面は原則8x8マス
* 盤面外には置けない
end note
' package ターンフロー集約 {
' object ターンフロー {
' 現在のターン
' 次のターン
' }
' }
' note right of ターンフロー
' 前後のターンの変化と行動を管理
' * プレイヤーは毎ターン必ず交代する
' * 行動する度、ターン数が1増加する
' * 行動は「置く」と「スキップ」だけ
' * 1ターンに行動できるのは一回だけ
' * 次のターンが通常行動かスキップか判定
' * ひっくり返された石の位置などを保管
' end note
' note right of プレイヤー
' * ユーザ登録をしている場合、自動で設定可能
' * ゲストの場合は自分で入力(デフォルのままもOK)
' end note
' ゲーム "1" *-down- "2" プレイヤー
' package プレイヤー集約(仮) {
' object プレイヤー {
' プレイヤーID
' 色
' 名前
' 人間orCPU
' }
' }
@enduml