diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-08-08 21:39:45 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-08 21:39:45 +0900 |
| commit | ed20805b10f4e332f50d4579c700058cb74c942c (patch) | |
| tree | 1c19708fc73173ddbc86f6202b48d6e138a2c65d /src/docs/ru-RU/advanced/reversi-bot.md | |
| parent | Update crowdin.yml (diff) | |
| download | misskey-ed20805b10f4e332f50d4579c700058cb74c942c.tar.gz misskey-ed20805b10f4e332f50d4579c700058cb74c942c.tar.bz2 misskey-ed20805b10f4e332f50d4579c700058cb74c942c.zip | |
New Crowdin updates (#7616)
* New translations troubleshooting.md (Indonesian)
* New translations troubleshooting.md (Chinese Traditional)
* New translations troubleshooting.md (German)
* New translations troubleshooting.md (Chinese Simplified)
* New translations troubleshooting.md (Ukrainian)
* New translations troubleshooting.md (Russian)
* New translations troubleshooting.md (Portuguese)
* New translations troubleshooting.md (Polish)
* New translations troubleshooting.md (Norwegian)
* New translations troubleshooting.md (Dutch)
* New translations troubleshooting.md (Korean)
* New translations troubleshooting.md (Italian)
* New translations report-issue.md (Korean)
* New translations report-issue.md (German)
* New translations links.md (Portuguese)
* New translations links.md (Kannada)
* New translations misskey.md (German)
* New translations misskey.md (Danish)
* New translations misskey.md (Czech)
* New translations misskey.md (Arabic)
* New translations misskey.md (Spanish)
* New translations misskey.md (French)
* New translations links.md (Japanese, Kansai)
* New translations links.md (Kabyle)
* New translations links.md (Haitian Creole)
* New translations links.md (Lojban)
* New translations misskey.md (Korean)
* New translations links.md (Uyghur)
* New translations links.md (Esperanto)
* New translations links.md (Thai)
* New translations links.md (Indonesian)
* New translations links.md (English)
* New translations links.md (Chinese Traditional)
* New translations links.md (Chinese Simplified)
* New translations links.md (Ukrainian)
* New translations links.md (Russian)
* New translations misskey.md (Italian)
* New translations misskey.md (Dutch)
* New translations report-issue.md (Danish)
* New translations misskey.md (Uyghur)
* New translations report-issue.md (Czech)
* New translations report-issue.md (Arabic)
* New translations report-issue.md (Spanish)
* New translations report-issue.md (French)
* New translations misskey.md (Japanese, Kansai)
* New translations misskey.md (Kabyle)
* New translations misskey.md (Haitian Creole)
* New translations misskey.md (Kannada)
* New translations misskey.md (Lojban)
* New translations misskey.md (Esperanto)
* New translations misskey.md (Norwegian)
* New translations misskey.md (Thai)
* New translations misskey.md (Indonesian)
* New translations misskey.md (English)
* New translations misskey.md (Chinese Traditional)
* New translations misskey.md (Chinese Simplified)
* New translations misskey.md (Ukrainian)
* New translations misskey.md (Russian)
* New translations misskey.md (Portuguese)
* New translations misskey.md (Polish)
* New translations widgets.md (Lojban)
* New translations reaction.md (Polish)
* New translations widgets.md (Esperanto)
* New translations pages.md (Esperanto)
* New translations reaction.md (Spanish)
* New translations reaction.md (French)
* New translations pages.md (Japanese, Kansai)
* New translations pages.md (Kabyle)
* New translations pages.md (Haitian Creole)
* New translations pages.md (Kannada)
* New translations pages.md (Lojban)
* New translations pages.md (Uyghur)
* New translations pages.md (Thai)
* New translations reaction.md (Czech)
* New translations pages.md (Indonesian)
* New translations pages.md (English)
* New translations pages.md (Chinese Traditional)
* New translations pages.md (Chinese Simplified)
* New translations pages.md (Ukrainian)
* New translations pages.md (Russian)
* New translations pages.md (Portuguese)
* New translations pages.md (Polish)
* New translations pages.md (Norwegian)
* New translations reaction.md (Arabic)
* New translations reaction.md (Danish)
* New translations pages.md (Korean)
* New translations reaction.md (Indonesian)
* New translations silence.md (French)
* New translations reaction.md (Japanese, Kansai)
* New translations reaction.md (Kabyle)
* New translations reaction.md (Haitian Creole)
* New translations reaction.md (Kannada)
* New translations reaction.md (Lojban)
* New translations reaction.md (Uyghur)
* New translations reaction.md (Esperanto)
* New translations reaction.md (Thai)
* New translations reaction.md (English)
* New translations reaction.md (German)
* New translations reaction.md (Chinese Traditional)
* New translations reaction.md (Chinese Simplified)
* New translations reaction.md (Ukrainian)
* New translations reaction.md (Russian)
* New translations reaction.md (Portuguese)
* New translations reaction.md (Norwegian)
* New translations reaction.md (Dutch)
* New translations reaction.md (Korean)
* New translations reaction.md (Italian)
* New translations pages.md (Dutch)
* New translations pages.md (Italian)
* New translations silence.md (Arabic)
* New translations mute.md (Kabyle)
* New translations note.md (Italian)
* New translations note.md (German)
* New translations note.md (Danish)
* New translations note.md (Czech)
* New translations note.md (Arabic)
* New translations note.md (Spanish)
* New translations note.md (French)
* New translations mute.md (Japanese, Kansai)
* New translations mute.md (Haitian Creole)
* New translations note.md (Dutch)
* New translations mute.md (Kannada)
* New translations mute.md (Lojban)
* New translations mute.md (Uyghur)
* New translations mute.md (Esperanto)
* New translations mute.md (Thai)
* New translations mute.md (Indonesian)
* New translations mute.md (English)
* New translations mute.md (Chinese Traditional)
* New translations mute.md (Chinese Simplified)
* New translations note.md (Korean)
* New translations note.md (Norwegian)
* New translations pages.md (German)
* New translations note.md (Lojban)
* New translations pages.md (Danish)
* New translations pages.md (Czech)
* New translations pages.md (Arabic)
* New translations pages.md (Spanish)
* New translations pages.md (French)
* New translations note.md (Japanese, Kansai)
* New translations note.md (Kabyle)
* New translations note.md (Haitian Creole)
* New translations note.md (Kannada)
* New translations note.md (Uyghur)
* New translations note.md (Polish)
* New translations note.md (Esperanto)
* New translations note.md (Thai)
* New translations note.md (Indonesian)
* New translations note.md (English)
* New translations note.md (Chinese Traditional)
* New translations note.md (Chinese Simplified)
* New translations note.md (Ukrainian)
* New translations note.md (Russian)
* New translations note.md (Portuguese)
* New translations silence.md (Spanish)
* New translations silence.md (Czech)
* New translations widgets.md (Thai)
* New translations timeline.md (Portuguese)
* New translations timeline.md (Esperanto)
* New translations timeline.md (Thai)
* New translations timeline.md (Indonesian)
* New translations timeline.md (English)
* New translations timeline.md (Chinese Traditional)
* New translations timeline.md (Chinese Simplified)
* New translations timeline.md (Ukrainian)
* New translations timeline.md (Russian)
* New translations timeline.md (Polish)
* New translations timeline.md (Lojban)
* New translations timeline.md (Norwegian)
* New translations timeline.md (Dutch)
* New translations timeline.md (Korean)
* New translations timeline.md (Italian)
* New translations timeline.md (German)
* New translations timeline.md (Danish)
* New translations timeline.md (Czech)
* New translations timeline.md (Arabic)
* New translations timeline.md (Spanish)
* New translations timeline.md (Uyghur)
* New translations timeline.md (Kannada)
* New translations theme.md (Japanese, Kansai)
* New translations widgets.md (Dutch)
* New translations widgets.md (Indonesian)
* New translations widgets.md (English)
* New translations widgets.md (Chinese Traditional)
* New translations widgets.md (Chinese Simplified)
* New translations widgets.md (Ukrainian)
* New translations widgets.md (Russian)
* New translations widgets.md (Portuguese)
* New translations widgets.md (Polish)
* New translations widgets.md (Norwegian)
* New translations widgets.md (Korean)
* New translations timeline.md (Haitian Creole)
* New translations widgets.md (Italian)
* New translations widgets.md (German)
* New translations widgets.md (Danish)
* New translations widgets.md (Czech)
* New translations widgets.md (Arabic)
* New translations widgets.md (Spanish)
* New translations widgets.md (French)
* New translations timeline.md (Japanese, Kansai)
* New translations timeline.md (Kabyle)
* New translations timeline.md (French)
* New translations theme.md (Kabyle)
* New translations silence.md (Danish)
* New translations silence.md (Chinese Traditional)
* New translations silence.md (Kabyle)
* New translations silence.md (Haitian Creole)
* New translations silence.md (Kannada)
* New translations silence.md (Lojban)
* New translations silence.md (Uyghur)
* New translations silence.md (Esperanto)
* New translations silence.md (Thai)
* New translations silence.md (Indonesian)
* New translations silence.md (English)
* New translations silence.md (Chinese Simplified)
* New translations theme.md (French)
* New translations silence.md (Ukrainian)
* New translations silence.md (Russian)
* New translations silence.md (Portuguese)
* New translations silence.md (Polish)
* New translations silence.md (Norwegian)
* New translations silence.md (Dutch)
* New translations silence.md (Korean)
* New translations silence.md (Italian)
* New translations silence.md (German)
* New translations silence.md (Japanese, Kansai)
* New translations theme.md (Spanish)
* New translations theme.md (Haitian Creole)
* New translations theme.md (Ukrainian)
* New translations theme.md (Kannada)
* New translations theme.md (Lojban)
* New translations theme.md (Uyghur)
* New translations theme.md (Esperanto)
* New translations theme.md (Thai)
* New translations theme.md (Indonesian)
* New translations theme.md (English)
* New translations theme.md (Chinese Traditional)
* New translations theme.md (Chinese Simplified)
* New translations theme.md (Russian)
* New translations theme.md (Arabic)
* New translations theme.md (Portuguese)
* New translations theme.md (Polish)
* New translations theme.md (Norwegian)
* New translations theme.md (Dutch)
* New translations theme.md (Korean)
* New translations theme.md (Italian)
* New translations theme.md (German)
* New translations theme.md (Danish)
* New translations theme.md (Czech)
* New translations troubleshooting.md (Japanese, Kansai)
Diffstat (limited to 'src/docs/ru-RU/advanced/reversi-bot.md')
| -rw-r--r-- | src/docs/ru-RU/advanced/reversi-bot.md | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/src/docs/ru-RU/advanced/reversi-bot.md b/src/docs/ru-RU/advanced/reversi-bot.md new file mode 100644 index 0000000000..16eb25a607 --- /dev/null +++ b/src/docs/ru-RU/advanced/reversi-bot.md @@ -0,0 +1,160 @@ +# MisskeyリバーシBotの開発 +Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。 + +1. `games/reversi`ストリームに以下のパラメータを付けて接続する: + * `i`: botアカウントのAPIキー + +2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる + * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている + +3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する + +4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する: + * `i`: botアカウントのAPIキー + * `game`: `game`の`id` + +5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う + +6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する + +7. ゲームが開始すると、`started`イベントが流れてくる + * イベントの中身にはゲーム情報が含まれている + +8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述) + +9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる + * `color`として石の色が含まれている + * `pos`として位置情報が含まれている + +## 位置の計算法 +8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています: +``` ++--+--+--+--+--+--+--+--+ +| 0| 1| 2| 3| 4| 5| 6| 7| ++--+--+--+--+--+--+--+--+ +| 8| 9|10|11|12|13|14|15| ++--+--+--+--+--+--+--+--+ +|16|17|18|19|20|21|22|23| +... +``` + +### X,Y座標 から インデックス に変換する +``` +pos = x + (y * mapWidth) +``` +`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます: +``` +mapWidth = map[0].length +``` + +### インデックス から X,Y座標 に変換する +``` +x = pos % mapWidth +y = Math.floor(pos / mapWidth) +``` + +## マップ情報 +マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます: +* `(スペース)` ... マス無し +* `-` ... マス +* `b` ... 初期配置される黒石 +* `w` ... 初期配置される白石 + +例えば、4*4の次のような単純なマップがあるとします: +```text ++---+---+---+---+ +| | | | | ++---+---+---+---+ +| | ○ | ● | | ++---+---+---+---+ +| | ● | ○ | | ++---+---+---+---+ +| | | | | ++---+---+---+---+ +``` + +この場合、マップデータはこのようになります: +```javascript +['----', '-wb-', '-bw-', '----'] +``` + +## ユーザーにフォームを提示して対話可能Botを作成する +ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。 + +フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します: +```javascript +{ + type: 'init-form', + body: [フォームコントロールの配列] +} +``` + +フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです: +```javascript +{ + id: 'switch1', + type: 'switch', + label: 'Enable hoge', + value: false +} +``` +`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。 + +### フォームの操作を受け取る +ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます: +```javascript +{ + id: 'switch1', + value: true +} +``` + +### フォームコントロールの種類 +#### Выключатель +type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。 + +##### プロパティ +`label` ... スイッチに表記するテキスト。 + +#### ラジオボタン +type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。 + +##### プロパティ +`items` ... ラジオボタンの選択肢。例: +```javascript +items: [{ + label: '弱', + value: 1 +}, { + label: '中', + value: 2 +}, { + label: '強', + value: 3 +}] +``` + +#### スライダー +type: `slider` スライダーを表示します。 + +##### プロパティ +`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。 + +#### テキストボックス +type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。 + +## ユーザーにメッセージを表示する +設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します: +```javascript +{ + type: 'message', + body: { + text: 'メッセージ内容', + type: 'メッセージの種類' + } +} +``` +メッセージの種類: `success`, `info`, `warning`, `error`。 + +## 投了する +投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。 |