Skip to content

[スパイク]スモウルビー3から実行可能なスモウルビー甲子園の実行環境を設計する #417

@takaokouji

Description

@takaokouji

スモウルビー3から実行可能なスモウルビー甲子園の実行環境を設計する。

ストーリー: AI作成者がAIを作成して、競技用サーバーを使って、プリセットのAIと対戦する

Participants:

  • AI作成者A
  • スモウルビー3
  • 競技用サーバー

Sequence:

  1. AI作成者Aがスモウルビー3を使って「AI」を作成する。作成した「AI」はスモウルビー3に保持される。
    • 「AI」とは、スモウルビー甲子園というプログラミング競技において、相手と対戦して競技に勝つためのプログラムのこと。
    • Rubyスクリプトとして実装される。
  2. AI作成者Aが作成した「AI」を試すために、AI作成者Aがスモウルビー3を操作して、スモウルビー3から競技用サーバーに「AI」をアップロードする。
    • このとき、対戦相手とマップも指定可能
    • 対戦相手はプリセットの中から選択可能。思考タイプを3つから選択可能。ゴール優先(goal)、アイテム優先(item)、前半アイテム優先して後半ゴール優先 (item_goal)
    • マップは10種類から選択可能 (map1からmap10)
  3. 競技用サーバーが対戦準備を行い、スモウルビー3に競技画面表示用のURLを生成して返す
  4. スモウルビー3が競技画面表示用のURLにアクセスして対戦画面を表示する。
  5. AI作成者Aが対戦画面を操作して、対戦をスタートさせる。
    • 対戦のスタートリクエストはAI作成者Aから直接、競技用サーバーにリクエストされる
  6. 競技用サーバーが競技終了後、対戦結果を表示する
  7. AI作成者Aが対戦結果を確認後、対戦画面を閉じる

シーケンス図:

sequenceDiagram
    participant AI_Creator_A as AI作成者A
    participant Smalruby3 as スモウルビー3
    participant Koshien_Server as 競技用サーバー

    %% ステップ1: AIの作成と保持
    AI_Creator_A->>Smalruby3: (1) AIを作成する (Rubyスクリプト)
    Smalruby3->>Smalruby3: 作成したAIを保持

    %% ステップ2: AIのアップロードと設定
    AI_Creator_A->>Smalruby3: (2) AIアップロードと設定の指示 (先攻/後攻、対戦相手、マップ)
    Smalruby3->>Koshien_Server: AIをアップロードし、設定情報を送信
    Note over AI_Creator_A,Koshien_Server: 対戦相手:<br>ゴール優先(goal), アイテム優先(item),<br>前半アイテム優先して後半ゴール優先(item_goal)<br>マップ:<br>map1〜map10

    %% ステップ3: サーバーの準備とURL生成、競技画面の表示
    Koshien_Server->>Koshien_Server: (3) 対戦準備を行う
    Koshien_Server-->>Smalruby3: 競技画面表示用URLを返す
    Smalruby3->>Koshien_Server: 競技画面表示用URLにアクセス (iframe)
    Koshien_Server-->>AI_Creator_A: 対戦画面を表示

    %% ステップ4: 対戦の開始、結果の表示
    AI_Creator_A->>Koshien_Server: (4) 対戦開始ボタンを押す
    activate Koshien_Server
    Koshien_Server->>Koshien_Server: 対戦を実行
    deactivate Koshien_Server
    Koshien_Server-->>AI_Creator_A: 対戦結果データを送信
    AI_Creator_A->>AI_Creator_A: 対戦結果を確認

    %% ステップ5: 画面を閉じる
    AI_Creator_A->>AI_Creator_A: (5) 対戦画面を閉じる
Loading

ストーリー: AI作成者AとAI作成者BがAIを作成して、競技用サーバーを使って、お互いのAIで対戦する

Participants:

  • AI作成者A
  • AI作成者B
  • スモウルビー3
  • 競技用サーバー

Sequence:

  1. AI作成者Aがスモウルビー3を使って「AI」を作成する。

  2. AI作成者Aが作成したAIを対戦相手として指定可能にするために、AI作成者Aがスモウルビー3を操作して、スモウルビー3から競技用サーバーに「AI」をアップロードする (アップロードしたAIは2日後に削除される)。

  3. AI作成者Bがスモウルビー3を使って「AI」を作成する。

  4. AI作成者Bが作成した「AI」を試すために、AI作成者Bがスモウルビー3を操作して、スモウルビー3から競技用サーバーに「AI」をアップロードする。このとき、対戦相手として、AI作成者Aが作成したAIを指定する。

  5. 競技用サーバーが対戦準備を行い、スモウルビー3に競技画面表示用のURLを生成して返す

  6. スモウルビー3が競技画面表示用のURLにアクセスして対戦画面を表示する。

  7. AI作成者Bが対戦画面を操作して、対戦をスタートさせる。

    • 対戦のスタートリクエストはAI作成者Bから直接、競技用サーバーにリクエストされる
  8. 競技用サーバーが競技終了後、対戦結果を表示する

  9. AI作成者Bが対戦結果を確認後、対戦画面を閉じる

シーケンス図:

sequenceDiagram
    participant AI_Creator_A as AI作成者A
    participant AI_Creator_B as AI作成者B
    participant Smalruby3 as スモウルビー3
    participant Koshien_Server as 競技用サーバー

    %% ステップ1: AI作成者AのAI作成とアップロード
    AI_Creator_A->>Smalruby3: (1) AIを作成する (Rubyスクリプト)
    Smalruby3->>Smalruby3: 作成したAIを保持
    AI_Creator_A->>Smalruby3: (2) AIアップロードを指示
    Smalruby3->>Koshien_Server: AIをアップロード (2日後に削除)
    Note right of Koshien_Server: AI作成者AのAIを保存

    %% ステップ2: AI作成者BのAI作成と対戦設定
    AI_Creator_B->>Smalruby3: (3) AIを作成する (Rubyスクリプト)
    Smalruby3->>Smalruby3: 作成したAIを保持
    AI_Creator_B->>Smalruby3: (4) AIアップロードと対戦設定を指示
    Note over AI_Creator_B,Smalruby3: 対戦相手としてAI作成者AのAIを指定
    Smalruby3->>Koshien_Server: AIをアップロードし、対戦設定を送信

    %% ステップ3: サーバーの準備と画面表示
    Koshien_Server->>Koshien_Server: (5) 対戦準備を行う
    Koshien_Server-->>Smalruby3: 競技画面表示用URLを返す
    Smalruby3->>Koshien_Server: (6) URLにアクセスして対戦画面を表示 (iframe)

    %% ステップ4: 対戦の開始と結果の表示
    AI_Creator_B->>Koshien_Server: (7) 対戦開始ボタンを押す
    activate Koshien_Server
    Koshien_Server->>Koshien_Server: 2つのAIで対戦を実行
    Koshien_Server-->>AI_Creator_B: (8) 対戦結果データを送信
    deactivate Koshien_Server

    %% ステップ5: 画面を閉じる
    AI_Creator_B->>AI_Creator_B: (9) 対戦画面を閉じる
Loading

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions