了解です。
ここでは 数学OSの「事件ゲームプロトコル」を Roblox Studio 上で実装するためのデータ構造と、Studio 内での配置(フォルダ構成) を、完全に実装可能なレベルで設計します。
これは数学OSの中核になる部分なので、
問題投入 → 先生の教え → 説得者モジュール
をすべて「データとして外部化」することが重要です。
🎒 1. 問題の投入(Problem Injection)
■ データ構造(Problem Object)
Problem = {
id = "coloring_cycle",
title = "サイクル C_n の4彩色数",
steps = { Step1, Step2, Step3, ... },
metadata = {
difficulty = 3,
tags = {"graph", "coloring", "cycle"},
}
}
必須フィールド
- id:問題の識別子
- title:問題名
- steps:先生の教え(LineDiagramPair の列)
- metadata:難易度・タグなど
👨🏫 2. 最初の先生の教え(Teaching Steps)
数学OSでは、先生の教えは 「1行の説明 + 図の提案」 のペアとして扱う。
■ データ構造(Step / LineDiagramPair)
Step = {
line = "直線 P_n の最初の頂点は4通りで塗れる。",
diagram = {
type = "suggestion",
description = "1つの頂点があり、4色の候補が並んでいるイメージ"
}
}
フィールド説明
- line:説明文(1行)
- diagram:図の提案(実際の図は生成しない)
- type = "suggestion"
- description = 図のイメージを文章で記述
🎭 3. 説得者モジュール(Negotiator Modules)
説得者は「理解できない」時に呼び出される別視点の説明者。
■ データ構造(Negotiator)
Negotiator = {
id = "concrete_example",
type = "Concrete",
trigger = {"abstract_too_high"},
message = "n=5 の場合だけを実際に数えてみよう。",
diagram = {
type = "suggestion",
description = "5つの頂点を直線に並べて、色を順に選ぶイメージ"
}
}
フィールド説明
- id:識別子
- type:具体化型 / 抽象化型 / 図解型 / 逆向き型 / 反例型 / 物語型
- trigger:どんな「理解できない」状態で呼ばれるか
- message:説得者の説明
- diagram:図の提案
🗂 4. Roblox Studio での配置(Folder Structure)
Studio 内では、すべてを ServerStorage または ReplicatedStorage に置くのが良い。
📁 ReplicatedStorage/MathOS/
MathOS
├─ Problems
│ ├─ coloring_cycle
│ │ ├─ ProblemData (ModuleScript)
│ │ └─ Steps
│ │ ├─ Step1 (ModuleScript)
│ │ ├─ Step2 (ModuleScript)
│ │ └─ Step3 (ModuleScript)
│ └─ ...
│
├─ Negotiators
│ ├─ Concrete (Folder)
│ │ ├─ example1 (ModuleScript)
│ │ ├─ example2 (ModuleScript)
│ │ └─ ...
│ ├─ Abstract (Folder)
│ ├─ Diagrammatic (Folder)
│ ├─ Reverse (Folder)
│ ├─ Counterexample (Folder)
│ └─ Narrative (Folder)
│
├─ Protocol
│ ├─ StateMachine (ModuleScript)
│ ├─ NegotiatorSelector (ModuleScript)
│ └─ StepRunner (ModuleScript)
│
└─ UI
├─ StepDisplay (ScreenGui)
├─ NegotiatorDisplay (ScreenGui)
└─ ComprehensionButtons (ScreenGui)
🧠 5. 実行フロー(数学OSの動作)
① 問題投入
local problem = require(MathOS.Problems.coloring_cycle.ProblemData)
② StepRunner が最初の先生の教えを提示
- line を表示
- diagram.description を表示
- 「理解できた / 理解できない」ボタンを出す
③ 理解できない → StateMachine が S1(立て籠もり)へ
④ NegotiatorSelector が適切な説得者を選ぶ
- trigger に応じて選択
- 例:抽象的すぎる → Concrete Negotiator
⑤ 説得者の message と diagram.description を表示
⑥ 理解できた → S2 → S0 に戻る
次の Step へ進む
🌱 6. あなたの思想との一致
この構造は:
- 問題を外部化する(ProblemData)
- 先生の教えを最小単位に分解する(Step)
- 理解の停滞を状態として扱う(StateMachine)
- 別視点を制度化する(Negotiator Modules)
- Studio 上で制度として配置する(Folder Structure)
という、あなたの「制度OS」思想をそのまま具現化しています。
次に進むなら…
- NegotiatorSelector のアルゴリズムを設計する
- 彩色数問題を実際にこの構造で流すデモを作る
- UI の具体的な配置を設計する
- 問題データのテンプレートを作る
どれを深めますか。