def-game 3.0.4 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,2 +1,236 @@
1
1
  # def-game
2
2
  - a framework for creating online board games
3
+
4
+ ---
5
+
6
+ このフレームワークは、オンラインボードゲームを作成する際の開発を支援する。
7
+ フレームワークは、開発者が定義するべき情報を明確に分類する。
8
+
9
+ このフレームワークを使って、ゲームルールを定義した共通モジュールを作成する。
10
+ その共通モジュールはサーバーサイドプロジェクトとクライアントサイドプロジェクトからimportすることを前提とする。
11
+ 開発者は、サーバーサイド側のコードを修正する必要がない。
12
+ 共通モジュールで定義したゲームロジックがそのまま動くようになっているからである。
13
+ また、サーバークライアント間での型共有が容易になるのも利点の一つである。
14
+
15
+ ここからは、このフレームワークが要求するデータ型や関数についての説明を行う。
16
+ `固有の用語`と`データ型`については、インラインコードブロックで示す。
17
+
18
+
19
+ # 設計 | design
20
+
21
+ ## アウトライン
22
+ このフレームワークが要求する関数のすべては、`GameRule`に定義されている。
23
+ ```ts
24
+ export interface GameRule<T extends Map, S extends Map, C extends ReqMap, L extends DefaultGameLogicState<S>, P extends GameParameters> {
25
+ initialGameLogicState: (staticValues: any) => L;
26
+ createRoom: (state: GameState<T, S, C, L, P>, param: GameParameters) => GameState<T, S, C, L, P>;
27
+ onStartGame: (state: GameState<T, S, C, L, P>, joiner: Player) => GameState<T, S, C, L, P>;
28
+ generateTasks(state: GameState<T, S, C, L, P>, event: ToServer<C>): Task<C, T>[];
29
+ prioritizeTasks(newTasks: Task<C, T>[], gameState: GameState<T, S, C, L, P>): GameState<T, S, C, L, P>;
30
+ doTasks(state: GameState<T, S, C, L, P>): GameState<T, S, C, L, P>;
31
+ }
32
+ ```
33
+
34
+ ### initialGameLogicState
35
+ `initialGameLogicState: (staticValues: any) => L;`
36
+ `ゲームロジック状態`のデフォルトを作成する関数である。
37
+ これはプレイヤーが参加する前に仮に作成される`ゲーム状態`である。
38
+ 引数の`staticValues`は、静的な設定値のオブジェクトである。これはプログラム上にハードコードされたものである。
39
+
40
+ ここで重要なのは、できる限り関数(計算)の中で`staticValues`から他の値を算出することである。
41
+ これは、ランダムマップの生成や、ゲーム内の計算で使用される値などを算出することを念頭においている。
42
+ 逆に`initialGameLogicState`の中でのハードコードは避け、`staticValues`にすべてを集約することも大切である。
43
+
44
+ このようにして`ゲームロジック状態`のデフォルト`L`が作成される。これは`ルーム`が作成される前の段階である。
45
+
46
+ ### createRoom
47
+ `createRoom: (state: GameState<T, S, C, L, P>, param: GameParameters) => GameState<T, S, C, L, P>;`
48
+ この関数は、`ルーム`が作成されるタイミングで実行される関数である。
49
+ 開発者は、`GameParameters`を設定することができる。
50
+ これは`ルーム`を作成する段階で、入力可能な設定値のことである。画面から入力されることを想定している。
51
+
52
+ 例えば、プレイヤーの人数や制限時間、ゲームに固有なパラメータなどなんでも`ゲームロジック状態`に設定できる。
53
+ そして、この関数は、`GameState`が持つ`GameParameters`を更新することを行う。
54
+ これは、プレイヤーの待ち合わせ処理などの`ゲームロジック状態`とは分離して処理を行う場合を想定しており、`GameParameters`はそこで使用される。
55
+
56
+ それに加えて、必要であれば、`ゲームロジック状態`に含まれる設定値などもこのタイミングで更新を行う。
57
+ それらを全ての更新を行なった`GameState<T, S, C, L, P>`を返す。
58
+
59
+ この段階で、`ルーム`に参加しているプレイヤーに対しては、UIを提供する必要があり、
60
+ UIに関する情報は、`ゲームロジック状態`の中に保持することを推奨している。
61
+
62
+ ### onStartGame
63
+ `onStartGame: (state: GameState<T, S, C, L, P>, joiner: Player) => GameState<T, S, C, L, P>;`
64
+ これは、プレイヤーの参加ごとに呼び出される関数である。
65
+ プレイヤーの待ち合わせ処理を実装する。
66
+ 参加したプレイヤーに対しては適切なUI情報を返す。
67
+ この関数が実行されている段階ですでにWebSocket接続が確立されている。
68
+
69
+
70
+ ### generateTasks | prioritizeTasks | doTasks
71
+ この3つの関数は、ゲームの進行を定義するのに重要な関数となる。
72
+ サーバーサイドプロジェクトにデフォルトで実装されている処理フローは、`src/simulatir.ts`で確認することができる。
73
+ 以下の部分である。
74
+ ```ts
75
+ // ------ Game Logic ------
76
+ const tasks = this.rules.generateTasks(state, action);
77
+ const updatedQueueState = this.rules.prioritizeTasks(tasks, state);
78
+ const newState = this.rules.doTasks(updatedQueueState);
79
+ ```
80
+
81
+ `タスク`というゲーム状態を更新する最小の単位となる概念を導入している。
82
+ `ゲーム状態`は`タスクキュー`をもつ。
83
+
84
+
85
+ 1. `generateTasks(state: GameState<T, S, C, L, P>, event: ToServer<C>): Task<C, T>[];`
86
+
87
+ プレイヤーからの`イベント`を受け取った時に、実行されるのがこの関数である。
88
+ この関数では`ゲーム状態`を更新しない。新しく発生する`タスク`の配列を返す。
89
+
90
+ この関数では、`イベント`を受け取った際のバリデーションを実装することができる。
91
+
92
+ 2. `prioritizeTasks(newTasks: Task<C, T>[], gameState: GameState<T, S, C, L, P>): GameState<T, S, C, L, P>;`
93
+
94
+ この関数では、`ゲーム状態`が持つ`タスクキュー`と`generateTasks`により生成された新しい`タスク`の配列をマージする処理を実装する。
95
+ `タスク`の優先度に応じて並び替える処理を実装できる。
96
+
97
+ 3. `doTasks(state: GameState<T, S, C, L, P>): GameState<T, S, C, L, P>;`
98
+
99
+ この関数は、`タスクキュー`をループして、一つ一つのタスクを実行する処理を記述する。
100
+ ここで重要なのは、一つのタスクが`タスクリザルト`を返すことである。
101
+
102
+ `タスクリザルト`は、次のタスクを実行するのか、一旦停止して処理を終えるのかと言った情報を持つことができる。
103
+ この処理は、特にユーザー間のやり取りが発生する場合に有用である。
104
+
105
+ - ユーザーA: request
106
+ - タスク生成: (task1, task2, task3, task4)
107
+ - task1はユーザーBからの応答を要請する
108
+ - タスクの実行を一時中断: (task2, task3, task4)
109
+ - ユーザーB: request
110
+ - タスク生成: (task1B)
111
+ - 優先度による並び替え: (task1B, task2, task3, task4)
112
+ - タスクキューの実行再開
113
+
114
+ また、より堅牢なシステムを作るために、次に期待されるタスクを`ゲーム状態`に持たせることが可能である。
115
+ この例でいえば、"task1はユーザーBからの応答を要請する"際に、`タスクリザルト`は、タスクの実行を一時中断するだけでなく、次に期待されるタスクを"task1B"に設定する。
116
+ これにより、再開時に、"task1B"以外の実行をキャンセルする。
117
+
118
+
119
+ ### privaten
120
+ `privaten(destinationId: PlayerId, l: L): L`
121
+
122
+ `privaten(destinationId, gameLogicState): GameLogicState`は情報秘匿のための関数である。
123
+ 基本的には、`ゲームロジック状態`が更新されるたびに、`ゲームロジック状態`をシリアライズしたものをクライアント側に通知する。
124
+ クライアントから`ゲームロジック状態`の一部を隠さなければならない状況に対処するため、この関数を実装する。
125
+
126
+ これはサーバーサイドに実装されている`broadcast`関数であり、各プレイヤーごとに`privaten`を呼び出す。
127
+ ```ts
128
+ async broadcast<T>(result: Game1State) {
129
+ Object.keys(result.gameLogicState.forClient).forEach(async to => {
130
+ await this.sendTo(to, JSON.stringify(gameRule.privaten(to, result.gameLogicState)));
131
+ });
132
+ }
133
+ ```
134
+
135
+
136
+ ## 型による支援
137
+
138
+ 規則的な命名と強い型付によって、型システムやAIによる補完の精度向上を狙っている。
139
+
140
+ `GameRule<T extends Map, S extends Map, C extends ReqMap, L extends DefaultGameLogicState<S>, P extends GameParameters>`
141
+ を見てもらえれば、分かる通りいくつかのRecord型(`Map`)定義を要請している。
142
+
143
+ ### `T extends Map`
144
+ これは、`タスク`を定義するための`Map`である。
145
+
146
+ ```ts
147
+ interface Tasks {
148
+ "sample": SampleTask
149
+ "update": UpdateTask
150
+ }
151
+ ```
152
+ と言った具体である。
153
+ タスクハンドラーは、`ゲームロジック状態`とこのタスク(例えば`SampleTask`型のデータ)を受け取り、`ゲームロジック状態`を更新する処理を行う。
154
+
155
+ ### `S extends ResMap`
156
+ これは、サーバーサイドから返却されるUI状態を定義するための`Map`である。
157
+
158
+ ```ts
159
+ interface Res {
160
+ "updated": Notify<UpdatedRes>
161
+ "accept": Require<AcceptRes>
162
+ }
163
+ ```
164
+
165
+ `ResMap`は、値の型として、`Notify`か`Require`のいずれかでラップすることを要請する。
166
+ これは、UI上で、ただの情報の通知を表すか、ユーザーに対してのなんらかのアクションの要求を表している。
167
+ `Require`は、アクションに関する制限時間を持っており、ユーザーに伝えることが可能である。
168
+
169
+ ### `C extends ReqMap`
170
+ これは、クライアントサイドからイベントは発生させるためのリクエストを定義するための`Map`である。
171
+
172
+ ```ts
173
+ interface Req {
174
+ "propose": Custom<ProposeReq>
175
+ "accept": Simple<AcceptReq>
176
+ }
177
+ ```
178
+ `ReqMap`は、値の型として、`Custom`か`Simple`のいずれかでラップすることを要請する。
179
+ これはサーバーサイド側での実装を簡略化するために導入された型である。
180
+
181
+ なんらかの`Req`を受け取ってから`Task[]`に変換する処理はしばしば冗長である。
182
+ そこでリクエストペイロードをそのまま`タスク`として定義することができるようになっている。
183
+ この例では、`Simple<AcceptReq>`のように`Simple`によってラップされたペイロード(`AcceptReq`)は、そのままタスクとしてキューに追加される。
184
+
185
+ この仕組みは、以下の型定義により、型的にもサポートされている。
186
+ ```ts
187
+ export type TaskMapType<A extends ReqMap, B extends Map> = Merge<SimpleOnlyPayload<A>, CustomTaskMap<B>>;
188
+ export type Task<A extends ReqMap, B extends Map> = {
189
+ [K in keyof TaskMapType<A, B>]: {
190
+ type: K;
191
+ payload: TaskMapType<A, B>[K];
192
+ }
193
+ }[keyof TaskMapType<A, B>];
194
+ ```
195
+
196
+
197
+
198
+
199
+
200
+
201
+ ## その他の設計
202
+
203
+ ### ルームへの接続
204
+
205
+ - プラットフォームAPIにより認証されたユーザーは、ルームIDを指定して入室することができる。
206
+ - このタイミングでroomKeyと呼ばれるJWTを返す。
207
+ `{ playerId: playerId, roomId: body.roomId }`
208
+ - クライアントは、そのJWTをWebSocket接続時のパラメータに加える。
209
+ - これにより、接続とplayerIdが関連づけられる。
210
+ - WebSocket接続を通じて送られる全てのJSONデータはplayerIdプロパティを持っている。
211
+ - サーバーサイドは、そのplayerIdプロパティがWebSocket接続に紐づいたplayerIdと一致することを確認する。
212
+
213
+
214
+ ### 時間制限
215
+
216
+ `ルーム`に接続中のクライアントは、webSocketハートビートを定期的に送信する。
217
+ これは、要求されたアクションの時間制限に関する確認処理をトリガーする。
218
+
219
+ `gameState.nextTaskExpectation`は以下のような情報を持っていて、
220
+ ```js
221
+ {
222
+ expectedTaskType: "accept",
223
+ deadline: 1744589266,
224
+ defaultTask: {
225
+ playerId: "samplePlayer",
226
+ proposerId: "proposer",
227
+ isAccept: false,
228
+ }
229
+ }
230
+ ```
231
+ deadlineを過ぎていれば、`defaultTask`が`タスクキュー`の先頭に配置され、実行が再開するという具体である。
232
+
233
+
234
+
235
+
236
+
package/dist/helper.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- import { Custom, CustomOnly, ReqMap, ReqPayload, Simple, Task, ToServer } from "./types";
1
+ import { Custom, CustomOnly, Notify, ReqMap, ReqPayload, Require, RequireSetting, Simple, Task, ToServer } from "./types";
2
2
  export declare const simple: <T extends ReqPayload>(payload: T) => Simple<T>;
3
3
  export declare const custom: <T extends ReqPayload>(payload: T) => Custom<T>;
4
+ export declare const requiring: <T extends ReqPayload>(payload: T, setting: RequireSetting) => Require<T>;
5
+ export declare const notifying: <T extends ReqPayload>(payload: T) => Notify<T>;
4
6
  export type CustomEventHander<A extends ReqMap, B extends Record<string, any>> = (r: ToServer<CustomOnly<A>>) => Task<A, B>[];
5
7
  export declare const simplify: <A extends ReqMap, B extends Record<string, any>>(h: CustomEventHander<A, B>) => (a: ToServer<A>) => Task<A, B>[];
6
8
  //# sourceMappingURL=helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAqB,IAAI,EAAe,QAAQ,EAAE,MAAM,SAAS,CAAA;AAExH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,KAAG,MAAM,CAAC,CAAC,CAKjE,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,KAAG,MAAM,CAAC,CAAC,CAKjE,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACvE,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AAGlD,eAAO,MAAM,QAAQ,GAChB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,MACvE,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAe3B,CAAA"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAqB,IAAI,EAAe,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzJ,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,KAAG,MAAM,CAAC,CAAC,CAKjE,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,KAAG,MAAM,CAAC,CAAC,CAKjE,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,CAAC,CAM9F,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,KAAG,MAAM,CAAC,CAAC,CAKpE,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACvE,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AAGlD,eAAO,MAAM,QAAQ,GAChB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,MACvE,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAe3B,CAAA"}
package/dist/helper.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.simplify = exports.custom = exports.simple = void 0;
3
+ exports.simplify = exports.notifying = exports.requiring = exports.custom = exports.simple = void 0;
4
4
  const simple = (payload) => {
5
5
  return {
6
6
  kind: "simple",
@@ -15,6 +15,21 @@ const custom = (payload) => {
15
15
  };
16
16
  };
17
17
  exports.custom = custom;
18
+ const requiring = (payload, setting) => {
19
+ return {
20
+ kind: "require",
21
+ value: payload,
22
+ setting
23
+ };
24
+ };
25
+ exports.requiring = requiring;
26
+ const notifying = (payload) => {
27
+ return {
28
+ kind: "notify",
29
+ value: payload
30
+ };
31
+ };
32
+ exports.notifying = notifying;
18
33
  const simplify = (h) => (a) => {
19
34
  switch (a.payload.kind) {
20
35
  case "simple":
package/dist/types.d.ts CHANGED
@@ -5,7 +5,12 @@ type Merge<A, B> = {
5
5
  export interface ReqPayload {
6
6
  playerId: PlayerId;
7
7
  }
8
+ export type Second = number;
8
9
  export type ReqMap = Record<string, Simple<ReqPayload> | Custom<ReqPayload>>;
10
+ export interface RequireSetting {
11
+ limitedTime: Second;
12
+ }
13
+ export type ResMap = Record<string, Require<any> | Notify<any>>;
9
14
  export type Simple<T extends ReqPayload> = {
10
15
  kind: "simple";
11
16
  value: T;
@@ -14,7 +19,16 @@ export type Custom<T extends ReqPayload> = {
14
19
  kind: "custom";
15
20
  value: T;
16
21
  };
17
- export type FromServerMap<T extends Map> = T;
22
+ export type Require<T> = {
23
+ kind: "require";
24
+ value: T;
25
+ setting: RequireSetting;
26
+ };
27
+ export type Notify<T> = {
28
+ kind: "notify";
29
+ value: T;
30
+ };
31
+ export type FromServerMap<T extends ResMap> = T;
18
32
  export type ToServerMap<T extends ReqMap> = T;
19
33
  export type CustomTaskMap<T extends Map> = T;
20
34
  export type ExtractSimplePayload<T> = T extends Simple<infer U> ? U : never;
@@ -28,6 +42,12 @@ export type CustomOnlyPayload<T extends ReqMap> = {
28
42
  export type CustomOnly<T extends ReqMap> = {
29
43
  [K in keyof T as T[K] extends Custom<any> ? K : never]: T[K];
30
44
  };
45
+ export type RequireOnly<T extends ReqMap> = {
46
+ [K in keyof T as T[K] extends Require<any> ? K : never]: T[K];
47
+ };
48
+ export type NotifyOnly<T extends ReqMap> = {
49
+ [K in keyof T as T[K] extends Notify<any> ? K : never]: T[K];
50
+ };
31
51
  export type TaskMapType<A extends ReqMap, B extends Map> = Merge<SimpleOnlyPayload<A>, CustomTaskMap<B>>;
32
52
  export type Player = {
33
53
  id: PlayerId;
@@ -46,7 +66,7 @@ export interface DefaultGameLogicState<S extends Map> {
46
66
  }
47
67
  export type FromServerDataType<T extends Map> = keyof FromServerMap<T>;
48
68
  export type ToServerDataType<T extends Map> = keyof ToServerMap<T>;
49
- export type FromServerData<T extends Map> = {
69
+ export type FromServerData<T extends ResMap> = {
50
70
  [K in keyof T]: {
51
71
  type: K;
52
72
  payload: T[K];
@@ -58,7 +78,7 @@ export type ToServerData<T extends ReqMap> = {
58
78
  payload: T[K];
59
79
  };
60
80
  }[keyof T];
61
- export type FromServer<S extends Map> = FromServerData<S>;
81
+ export type FromServer<S extends ResMap> = FromServerData<S>;
62
82
  export type ToServer<C extends ReqMap> = ToServerData<C>;
63
83
  export type ToServerWithNonStringKey<C extends ReqMap> = {
64
84
  [K in keyof C]: {
@@ -67,7 +87,7 @@ export type ToServerWithNonStringKey<C extends ReqMap> = {
67
87
  };
68
88
  }[keyof C];
69
89
  export type PlayerId = string;
70
- export type ForUI<S extends Map> = {
90
+ export type ForUI<S extends ResMap> = {
71
91
  requiredAction: FromServer<S> | null;
72
92
  notifications: FromServer<S>[];
73
93
  };
@@ -96,6 +116,7 @@ export interface GameRule<T extends Map, S extends Map, C extends ReqMap, L exte
96
116
  generateTasks(state: GameState<T, S, C, L, P>, event: ToServer<C>): Task<C, T>[];
97
117
  prioritizeTasks(newTasks: Task<C, T>[], gameState: GameState<T, S, C, L, P>): GameState<T, S, C, L, P>;
98
118
  doTasks(state: GameState<T, S, C, L, P>): GameState<T, S, C, L, P>;
119
+ privaten(destinationId: PlayerId, l: L): L;
99
120
  }
100
121
  export {};
101
122
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "def-game",
3
- "version": "3.0.4",
3
+ "version": "3.1.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,4 +14,4 @@
14
14
  "devDependencies": {
15
15
  "typescript": "^5.8.2"
16
16
  }
17
- }
17
+ }