もくじ

じゃんけん?

こんな感じ。
何人とでもじゃんけんが出来ます。

※まだ仕様が定まってないのでゴーストへの実装は実験目的でのみお願いします。

経緯

「うにゅう@もどき」台本トーク(仮)やりませんか!
http://nar.jpn.org/test/read.cgi/unyu/1096293147/

さとーのweb日記
http://d.hatena.ne.jp/satos/searchdiary?word=%a4%b8%a4%e3%a4%f3%a4%b1%a4%f3

Ver.0.xを作るも技術が足らず挫折

SSP/仕様書/コミュニケート複数送信拡張

1年半後

うかべん 大阪#2 NOBさんの講演
http://study.nanican.net/2007/1124/

Ver.1.x

テンプレートVer4.x

\0に加え\1やユーザも参加するタイプ。

  • 利点
    • 他に起動ゴーストが居なくても可能
    • 初めてユーザが参加できる
  • 難点
    • タイミング調節とかどうよ?
      • 3.x系の拡張なら可能→審判が必要な為、どちらにせよ複数起動するしかない

元ネタ

  • 0.x以前に作った過去の遺物

実装案

  • 3.xの審判が最初に各ゴーストの手を集計するときに\0、\1およびユーザの手もその場で訊く。

Ver4.0

  • Ver3.3のサーバにユーザが命令を与える形式。
    • Ver3.3までは\![raiseother]複数送信に関するバグがありましたのでそれの修正を含みます。
  • サーバ側
  • クライアント側

サンプルゴースト

  • zipの中にnarが3つ入っています。

Ver4.1

  • ゲームを統括するゴーストとサーバの役割を果たすプラグインとに分離
    • 内部辞書は里々をSAORIとして使用しています。
  • クライアント側はプラグインにアクセスするように改造。以前と内容が変わります。

仕様

  • サーバPLUGINのreadmeにまとめてあります。

サンプルゴースト

  • zipの中にnarが5つ入っています。(ゲームマスターGHOST1体、クライアントGHOST3体、サーバーPLUGIN1個)
    • JankenSample_4_1.zip
      • 2008/09/27 新規作成
      • 2008/09/28 プラグインを実行したGhostへの通知イベント名もOnJankenに統一
        プラグインにアクセスするイベント名もOnJankenに統一
        あいこの時、ゲームマスターゴーストに通知し、処理を中断するようにした
        イベント通知で勝った手と全員の出した手別リストを通知
      • 2008/09/29 仕様確定
        ドキュメント整理

他に検討すること

  • 仕様としてはこれで確定でいいと思う。
  • ゲームマスターゴーストのテンプレートも可能な限り簡単にした(つもり)。
  • あとはユーザを参加させる場合どうするか。
    • クライアントを改造してユーザ入力を受け付けるようにする?
  • ゲームに応用する場合はどうしよう。
    • 追加パラメータを送受信しないといけない場合は複雑極まりないものになりそう…。
      • でもできればサンプルを1つくらい用意したいところ。
      • クライアントは3体くらい。里々、YAYA、華和梨。

テンプレートVer3.x

公正な審判を1人おいてクライアントの動作を制御するタイプ。

元ネタ「にこらとてすらの拍手レス」

「じゃんけんテンプレートの新仕様案」
http://home.384.jp/evidence/log2007.html#071129

  • サーバ自身はじゃんけんをしない。審判に徹する。
  1. サーバで最初にクライアントの各種セリフとじゃんけんの手を全部集めてしまう。(OnRequestValuesを使用)
  2. 勝敗が決する。(サーバが頑張って計算する)
  3. 結果をクライアントに通知。最初に集めた該当するセリフを順次喋らせる。(台本コミュニケートを使用)

実装案

  • 1.xの応用?サーバとクライアントを明確に分けてしまえばいいかも
  • だめだ!里々の変数管理が難しすぎて今の俺では作れない!

3.0

http://home.384.jp/evidence/log2007.html#071206

  • 利点
    • 変数やセリフの送受信に既存のシステムを利用。
    • 規格の統一・氾濫の防止。じゃんけん以外のミニゲーム等への仕様拡張。
  • 欠点
    • サーバ側が大変。
    • じゃんけんだけならもっと簡単にできる↓

仕様を大幅に変更する案

「ゴースト同士でじゃんけん」テンプレート Ver3.1案
サーバ用
http://www5.pf-x.net/~legokichi/nar/dicJanken3.1.txt
クライアント用
http://www5.pf-x.net/~legokichi/nar/dicJanken3.1c.txt

  • 台本や大根2の使用を断念
    • ネガティブな理由
      • 変数が多くて処理が大変。
    • ポジティブな理由
      • 処理が軽くなった。
      • クライアント側は大根台本関係なく辞書を入れるだけでOK。ssuすら必要ない。

独自イベント

クライアント側

  • OnJanken
    • OnComunicateの代わり
    • Reference0: 送信元
    • Reference1: Janken3.1
    • Reference2: セリフ_○○
      • (セリフ_○○)を呼び出して喋る。
  • OnRequestJanken
    • OnRequestValueの代わり
    • Reference0: 送信元
    • Reference1: Janken3.1
      • サーバからの手を返す指示。 サーバ側
  • OnGetJanken
    • OnGetValueの代わり
    • Reference0: 送信元
    • Reference1: Janken3.1
    • Reference2: 1~3の手
      • クライアントの手が返って来る。

Ver3.2

  • OnJanken
    • Reference0 : バージョン     例:"Version=Janken/3.2"
    • Reference1 : 送信元       例:"From=JankenSampleServer"
    • Reference2 : Jankenイベント名  例:"Event=OnTurn"
      • Reference2以降はVer3.1の仕様に準ずる。

サンプルゴースト

  • zipの中にnarが3つ入っています。
    • JankenSample_3_2.zip
      • 2008/09/23 新規作成
      • 2008/09/24 関数・変数の接頭辞など厳格に統一、その他リファクタリング

Ver3.3

  • サーバ自身もゲームに参加するタイプ。
    • Ver3.2のクライアント用辞書をサーバに持たせただけ。クライアント側辞書はversion以外は完全互換。
    • サーバは改造すれば勿論イカサマし放題。

サンプルゴースト

展望

  • サーバがユーザの入力を受け付けることでユーザとゴーストの対戦形式に改造する。
    • Ver4.xへの布石。

テンプレートVer2.x

サーバが存在しない、人間のじゃんけんに一番近いタイプ。

オリジナル

「ゴースト同士でじゃんけん」テンプレート Ver2.0
http://www5.pf-x.net/~legokichi/nar/dicJanken2.0.txt

  • たまに誰かの掛け声が1秒遅れる(ぇ

「にこらとてすらの拍手レス」にての改善バージョン

「ゴースト同士でじゃんけん」テンプレート Ver.2.0.1
http://home.384.jp/evidence/log2007.html#071123

  • たまに表示が1秒遅れる点を改善(したつもり)

さらに改造

「ゴースト同士でじゃんけん」テンプレート Ver2.0.2
http://www5.pf-x.net/~legokichi/nar/dicJanken2.02.txt

  • Donさんの2.0.1をさらに少しいじったもの。
    • 2.0.1との互換性なし
    • 「ポン」の後、応答なしの場合に喋るようにした。
    • 終了判定にエラー表示を入れた
    • じゃんけん勝敗判定と手関数の改良
    • \![raiseother]で送信するとき(R0)に名前、(R1)に手を入れるようにした

さらに改造

「ゴースト同士でじゃんけん」テンプレート Ver2.1
http://www5.pf-x.net/~legokichi/nar/dicJanken2.1.txt

  • 2.0.2との互換性なし
  • \![raiseother]で送信するイベント名をOnJanken~にした。
  • これでもかと言わんばかりに誤爆回避。
  • テンプレートの充実(ラベル名どうにかしてorz

さらに改造

「ゴースト同士でじゃんけん」テンプレート Ver2.1.2
http://www5.pf-x.net/~legokichi/nar/dicJanken2.12.txt

  • デバッグとトークの追加。

仕組み

2.1時の概略。

  サーバ側         クライアント側
  ┌→*ユーザにじゃんけんを開始しろと命令されたが今はじゃんけんしたくない気分の時
  ├→*起動しているゴーストが自分だけだった時
  |            ┌→*じゃんけんに参加しない――全送信――→*OnJankenRetire
  *じゃんけん開始―全送信→*OnJankenReceive――全送信――→…他のゴースト
  |┗完全初期化      │┗完全初期化
  |            │
  ↓3秒間応答なし     │
  *じゃんけんが出来るゴーストがいなかった時
   ┗完全初期化      │
               │
  ┌――――――――――――┘
  |イベント実行
  ↓※以下サーバとクライアントは同じ動作
  *OnJankenTimeSet←―――――――――――――…他のゴースト
  |
  ↓2秒
  *「最初はグー」
  |
  ↓2秒
  *「じゃんけん」
  |
  ↓2秒
┌→*「ポン」――――――全送信―――――→…他のゴースト
| ||┗自分の手の決定 ┗自分の名前と手含む ¦
| |↓3秒間応答なし             ¦
| |*じゃんけん音信不通           ¦
| ↓相手の手が規格外   *OnJankenWait←…他のゴースト
| *じゃんけん強制終了  |    ┗相手の名前と手含む
| ┌―――――――――――┘
| ↓2秒
| *終了判定
| |↓勝敗が決した
| |*「勝った」or「負けた」
| | ┣完全初期化
| | ┗プログラム終了
| |
| ↓あいこの場合
| *「あいこで」
| |┗初期化
| |2秒
└―┘

他の栞での実装

よくわからないorz

テンプレートVer1.x

サーバと同期して勝敗判定だけ各自で行うタイプ。

  • 1.0よりも1.01の方が良いです。
  • 1.xと2.xの互換性はありません。
  • 1.xの方が重くて非効率的。でもちゃんと動く。
  • 2.xの方が軽くてスマート。でもたまにサーバが1秒遅れる。
  • 2.xはコミュを使ってないので大根非対応のゴーストにも使用できる。

オリジナル

「ゴースト同士でじゃんけん」テンプレート Ver1.0 ~たぶん安定版~
http://www5.pf-x.net/~legokichi/nar/dicJanken1.0.txt

  • 大根コミュを使用しています。
  • 大根コミュを既に搭載しているゴーストはこのテンプレート内の大根コミュの記述を削除してください!
  • 「*じゃんけん開始」を呼び出せば後は勝手に動きます。

「にこらとてすらの拍手レス」にての改善バージョン

「ゴースト同士でじゃんけん」テンプレート Ver.1.0.1
http://home.384.jp/evidence/nar/log2007.html#071122

Donさんに感謝。

  • 大根コミュの送信に\![raiseother]も交えて使用。
  • 大根コミュを既に搭載しているゴーストはこのテンプレート内の大根コミュの記述を削除してください!
  • トーク表示が同期するようになり、見た目には後出ししなくなりました。
  • Ver.1.0と完全互換です。

仕組み

混迷を極めるフローチャート

  サーバ側                 クライアント側
  *じゃんけん開始――――全送信―――――→*大根でじゃんけん     ←完全初期化
  ↓3秒間応答なし             │
  *誰も居ない               │
                       │
  *大根で参加表明←―――(R0)―――――┘
  ↓2秒
  *「最初はグー」――――全送信―――――→*大根で「最初はグー」   ←これを喋る必要性はない
  ↓2秒
  *「じゃんけん」――――全送信―――――→*大根で「じゃんけん」   ←この時点で手を決定しておくのがマナー
  |┗出す手を決定             ┗出す手を決定
  ↓2秒                ┌―――――――――――――――――――――――――→……その他のクライアント
┌→*「ポン」―――――――全送信――――┴→*大根で「ポン」――――――全送信――――――┬→……その他のクライアント
| |         ┗自分の手含む┛   ↓2回目以降  1回目 ┗自分の手含む┛   |
| | *大根で「ポン」←―――――┐    *待機                    |
| | ↓フラグで1回目回避    └―――――――――――――――――――――――――――┘
| | *待機
| | ┗今回は喋らない
| ↓2秒
| *終了判定
| | ↓>による分岐
| | *勝敗表示―――――全送信―――――→*大根で勝敗表示      ←完全初期化
| | ┗プログラム終了           ┗プログラム終了
| ↓>による分岐
| *「あいこで」―――――全送信―――――→*大根で「あいこで」    ←初期化
└―┘2秒
  • 終了判定はサーバ
  • 勝敗判定は各ゴーストまかせ

各ゴーストは自分の手公開するとき、サーバだけにコミュ送信するのではなく、起動している全てのゴーストにコミュ送信する。
つまり、起動している全てのゴーストが「誰が何の手を出したのか」が分かる。

テンプレートVer0.x

バケツリレーで情報を伝達するタイプ。

オリジナル

「ねこ詩作零号機&ねこ実験初号機&ねこ実用弐号機」の辞書Ver0.5
http://www5.pf-x.net/~legokichi/nar/dicJanken0.5.txt

  • __SYSYTEM_ALL_GHOST__がなかったころの遺物。
  • P2Pっぽいコミュ。
  • まだ伺か。の知識がなかった頃のに作ったので無茶苦茶。
  • たぶんバグってる。

こめんと

  • 2人対戦の場合には仕様上、サーバ側のゴーストは早出しとなるのでクライアント側のゴーストは事実上後だしとなる。 -- レゴキチ 2007-11-22 (木) 20:52:23
  • 「あいこの時ssu.dllのiflistの呼び出しでエラー」が出るバグについては現在調査中。どこかで(自分の手)が初期化されているのが原因なのだが・・・ -- レゴキチ 2007-11-22 (木) 23:58:50
  • Ver1.0:判定を==から(compare,~.~)に変更。さらに様々なバグ修正とよく分からない解説文を追加。 -- レゴキチ 2007-11-23 (金) 01:47:36
  • 現在の課題:コミュる度にイベントってるのでゴーストの手やその他会話ログが最後まで表示しきれていない。 -- レゴキチ 2007-11-23 (金) 02:08:54
  • ご指摘頂いていた記述ミスを修正しましたのでご報告。 -- Don 2007-11-23 (金) 14:38:31
  • \![raiseother]でOnCommunicateを投げた場合、OnCommunicateの記述が無くても"COMMUNICATE該当なし"に飛んでいくことを今初めて知った。無用な混乱を避けるため記述を統一しておきます。 -- Don 2007-11-23 (金) 15:02:32
  • どもです。\![raiseother]に触発されてさらに2.xなる仕様を考えてみたものの確実に同期できない!1秒がこれほど短かったとはorz -- レゴキチ 2007-11-23 (金) 20:40:18
  • Ver2.xでサーバ側ゴーストが終了判定を言ってくれません・・・。なんでだろ。 -- Don 2007-11-23 (金) 20:44:55
  • すんません、自己解決しましたorz -- Don 2007-11-23 (金) 21:11:49
  • たまに表示が1秒遅れる点が改善できました。2.xの方がスッキリしてて良さそうですね。 -- Don 2007-11-23 (金) 22:19:19
  • なんという仕事の速さ。こちらの環境では何十回やっても遅れませんでした。ありがとうございます! -- レゴキチ 2007-11-24 (土) 00:06:26
  • こちらの環境=SSP/2.00.22[B]&里々phase Mc133-4を積んだすかりおんx3 -- レゴキチ 2007-11-24 (土) 00:16:51
  • こちらの環境=SSP/2.00.22[C]&里々phase Mc133-4を積んだ「にこらとてすら」「たっち&ごう」「パクリとチクリで。」 -- Don 2007-11-24 (土) 00:38:38
  • *「ポン」の後に応答がない場合の回避コードを組んだ -- レゴキチ 2007-11-24 (土) 12:53:10
  • TODO:テンプレの充実化 じゃんけん中の2秒にどういうトークが仕込めるかの検証 他栞での実装を考えてイベント名を半角英数にする よりよい3.0的な仕様を考えてみる 等。 -- レゴキチ 2007-11-25 (日) 00:30:28
  • 2.1的仕様では参加表明も全送信にして「ポン」と同じような動作にしよ。全員の情報量が平等だし。「最初はグー」タイマセットも共用にできそう。しかしテンプレがややこしい。 -- レゴキチ 2007-11-26 (月) 12:43:39
  • 経緯←歴史の長いものだったんですね・・・知らなかった。てか、審判ゴーストとか既に検討されてるし/(^o^)\ -- Don 2007-11-29 (木) 22:17:05
  • 当時の0.xは初めてのプログラミングだったもんで技術が足りなくてオワタ\(^o^)/ -- レゴキチ 2007-11-29 (木) 22:52:10
  • 興味深いものを見つけたのでペタリ http://marilan.at.webry.info/200809/article_6.html -- Don 2008-09-21 (日) 22:52:02
  • そろそろ仕様をまとめて、汎用的に使えるサンプルの作成などしてみませんか。 -- Don 2008-09-21 (日) 22:54:56
  • 個人的にはVer3.1案がお気に入りです。ssuすら必要ない軽い動作は魅力的。 -- Don 2008-09-21 (日) 23:05:47
  • サーバ自身はカスタマイズ可能な状態が望ましいですね。GHOSTでなくPLUGINでも実現できそうですけど、そうなるとYAYA限定になるので、まず里々でそれっぽいサンプルゴーストが欲しいところ。 -- Don 2008-09-21 (日) 23:10:00
  • 新しく仕様を立ち上げるとなるとイベント名とかも他と被らないよう配慮する必要が?OnJankenが他で使われているという話は聞かないですが、他のゲームに流用するなら独自にイベント名を決めてもらうか、あくまでOnJanken内のバージョン名等を流用して区別する方が望ましいですかね。そのあたりはLRさんのバーチャルバトルが参考になりそう。 -- Don 2008-09-21 (日) 23:25:45
  • 「サーバ自身はカスタマイズ可能な状態」というのはアレですか、通常のじゃんけんと気力システムが併用できるようにということですか。 -- レゴキチ 2008-09-21 (日) 23:47:40
  • ゲームの進行及び判定はサーバが行い、クライアントは呼ばれたときに喋るだけ。 -- レゴキチ 2008-09-21 (日) 23:50:19
  • しかしライフ制の複数技つきだと戦略性が高いからそこをどうしよう。 -- レゴキチ 2008-09-21 (日) 23:52:44
  • このケースで要求されるのは「ユーザも参加」であることなので、Ver3.1にもうひと工夫必要でしょうか。ユーザの入力欄はサーバゴーストが用意する形でいいと思う。 -- Don 2008-09-22 (月) 00:05:33
  • そうなるとサーバ自身を改変可能にする必要が出てくる(通常のじゃんけんと気力システムが併用)。本当はじゃんけんモジュールとサーバの(ゲームの)仕様は分けたいところだけれど。 -- Don 2008-09-22 (月) 00:08:59
  • 「AIゴーストVSユーザ」か「AIゴーストVSAIゴースト」か「AIゴーストVSユーザの指令を受けたゴースト」かで意味合いが変わってくる気が。 -- レゴキチ 2008-09-22 (月) 00:17:52
  • 「AIゴーストVSユーザ」は「AIゴーストVSユーザの指令を受けたゴースト」のゴーストを無機物化した状態で代替できそう。「AIゴーストVSAIゴースト」も個人的に出来るようにはしたいです。サンプルは拡張性があった方がいいですし。 -- Don 2008-09-22 (月) 00:27:21
  • 「AIゴースト」をどうしましょ。ランダムでいいのかな。 -- レゴキチ 2008-09-22 (月) 00:42:29
  • とりあえずユーザを含めた「普通のじゃんけんモジュール」と、ゲームへ応用するサンプル「あっちむいてホイ」とか、2つ用意してみるのはどうでしょう。 -- Don 2008-09-22 (月) 00:52:43
  • 「あっち向いてホイ」はダメだな…。また通信処理が必要になる。すんません、もうちょっと考えてきます。 -- Don 2008-09-22 (月) 00:54:41
  • 「普通のじゃんけんを取り仕切るプラグイン」を作って、「それを利用したゲームを持ったゴースト」を作ればいいのではないでしょうか。 -- レゴキチ 2008-09-22 (月) 02:05:17
  • じゃんけんプラグインを使うゴーストがこの世に1体だけならわざわざプラグイン化しなくてもゴーストに積んでおけばいいですね。 -- レゴキチ 2008-09-22 (月) 02:07:49
  • 難しい方向に移行する前に、とりあえず気掛かりだったイベント名濫立防止策を講じてみました。Ver3.2。サンプルゴースト付きです。 -- Don 2008-09-23 (火) 19:05:57
  • イベント名濫立防止策が必要かどうかは疑問です。イベントの呼び出し方が変わっただけで結局存在することにはかわりありませんし。 -- レゴキチ 2008-09-23 (火) 20:10:14
  • あ、いや、やっぱ要りますね。クライアント側の誤爆防止ですね。 -- レゴキチ 2008-09-23 (火) 20:15:49
  • 一気にver4.0まで作ってみたのはいいけど少し整理しないと……。 -- Don 2008-09-24 (Wed) 06:49:53
  • 鯖ゴ、ルールゴの分離はすごくいいと思った -- Don 2008-09-26 (Fri) 18:00:18
  • http://nikolat.tumblr.com/post/51880581 -- Don 2008-09-26 (Fri) 18:02:10
  • ユーザはルールのみ差し替えて遊べる。ルールゴ作者の負担を減らし、参加ゴは好きなゲームのみ対応すればいい。 -- Don 2008-09-26 (Fri) 18:02:55
  • ルールゴが「俺が鯖ゴも兼任するから鯖ゴイラネ」にならないような仕組みにする -- Don 2008-09-26 (Fri) 18:03:26
  • 鯖ゴは中立的な立場で正しいジャッジを機械的に下す信頼性が必要 -- Don 2008-09-26 (Fri) 18:03:50
  • 参加ゴが「信頼できる鯖ゴからの通知」か「イカサマの可能性があるルールゴからの通知」か判別できないといけない -- Don 2008-09-26 (Fri) 18:04:14
  • 鯖ゴをプラグイン化する。\![raiseother]でなく\![raiseplugin]にすることで必ず鯖プラグインを経由させる。 -- Don 2008-09-26 (Fri) 18:04:46
  • \![raiseother]の場合Senderがsakura.nameになるので(Sender)で見破れる。プラグインからの通知ってSenderどうだったっけ? -- Don 2008-09-26 (Fri) 18:05:55
  • HandUtil.dllとか使えばDSSTPでSenderも偽装できるけど…そこまで考える前にまず作ってみよう -- Don 2008-09-26 (Fri) 18:06:27
  • 鯖をPLUGIN化してみたけど仕様がいまいちしっくりこない…。ルールゴへの情報通知とかどうしよう。 -- Don 2008-09-27 (Sat) 03:26:24
  • 現在はあいこの時は自動でやり直しにしてるけど、そこはルールゴの裁量にまかせるべきですよね。次で改善予定。 -- Don 2008-09-27 (Sat) 04:06:34
  • そこまでイカサマを気にする必要があるのか少し疑問です。不正を行うゴーストは淘汰されると思いますが。 -- レゴキチ 2008-09-27 (土) 22:34:29
  • 鯖プラグインは「じゃんけん送受信及び集計機」と割り切るのがいいと思います。 -- レゴキチ 2008-09-27 (土) 22:37:33
  • 鯖プラグインはルールゴに参加ゴ全員の出した手及び勝敗別リストを送り込むのがいいのかな。 -- レゴキチ 2008-09-27 (土) 22:48:36
  • いや、勝った手と、全員の出した手別リストで十分ですね。 -- レゴキチ 2008-09-27 (土) 22:49:26
  • 放送局(ルールゴ)→中継衛星(鯖プラグイン)→各端末(参加ゴ) -- レゴキチ 2008-09-27 (土) 22:51:01
  • ルールゴと鯖を分ける利点がちょっと弱い気がしてきた…。ゲームへの応用を考えた時とか特に。結局改造が必要になるかも。 -- Don 2008-09-29 (Mon) 05:38:03
  • 鯖の情報はOnJankenを通して常にルールゴに通知しているので改造自体はPLUGINを弄らなくてもできるようにはしてあるけど -- Don 2008-09-29 (Mon) 05:38:38
  • ゲームへの応用とか考えない方がよかったかな -- Don 2008-09-29 (Mon) 05:39:02
  • でも「じゃんけんの要領で」勝ち負けを決するゲームを作ろうという人が仮にいたとして、ここで検討されてきたことが全く使い物にならない事態だけは避けたかったので -- Don 2008-09-29 (Mon) 05:39:46
  • とりあえず動く、何かしら応用の利く、すぐに使えるサンプルはでっち上げておく -- Don 2008-09-29 (Mon) 05:40:32

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-11-02 (日) 10:07:27