週末にサーバ作るかな

作って公開することに意義があるのでずるずる先延ばしにしてないでこん週末だけで完成させられるくらいにやることを削る。

  • 人間がGUIで遊べるようなサーバを作る
  • Twistedで接続方法を抽象化してソケットつなぎっぱなしでのアクセスでも人間がブラウザでHTTPするのでも同じロジックを使えるようにしようとか思っていたけども、それは今回はやらない。
  • サーバの確保とかが面倒なので今週末はやらない。Google App Engineでやる。
  • セキュアなユーザ管理は今回はサポートしないことにしたいけど、やっぱり自分の名前でプレイしたいと思うので可能ならやる。
  • 最低限、最中限のプレイを人間が楽しめることと、今後の研究のためにログが保管され、せっかく収集したのだからそれを人間が閲覧できることを目指す。
  • 三者がHTTPアクセスでのボット(AI)を作りやすいようにAPIを用意する。
  • ソースコードCodeReposに置く。
  • 将来的にGoogle App Engineのサーバ上でC++で書いたAIを走らせられるかどうか(できないと予想)不明、調査する。
  • プロセスがそれなりの時間生き続けて誰かのAIとソケットを維持することが出来るかどうか調査する。
  • モデルの設計:盤面情報での検索はやらないので検索が容易なスキーマである必要性はない。
    • ゲーム情報
      • ゲームID(auto increment)
      • プレイヤー情報(FK * 3)
      • 盤面情報(pickled)
    • プレイヤー情報
      • プレイヤーID(auto increment)
      • 名前
      • プレイ回数
      • 総得点

って感じかな。

  • AIは今あるランダムなやつと、ちょっと手を加えたやつ、ただしプレイ時にどのAIなのかはわからないようにする(人間は「こいつは○○に弱い」なんてのをすぐ学習するから)
  • とりあえずHello, worldをやって、次はランダムにカードを表示するのを作る。個々までは状態を持たないからデータベースがいらない。
  • それが出来たら次は何かな。
  • 対人戦とか、対戦中のチャットとかあると面白いだろうなぁ。
  • stateを持つ必要がある。将来的に対人戦に拡張するなら3人それぞれが出したか出してないかで8通りある。1,2,4
  • ゲーム中は3ターン×5ラウンド×8通り
  • ゲーム開始前に何状態かと、ゲーム終了状態が必要だな
  • アシストモードとして、伏せられたカードが何なのかとか、あとどのカードが残っているのか、を表示するモードとかがあってもいいのかもなぁ。他人の手札は見えないけども、一度表になった情報に関してはメモを取れば済む話だから隠す必要がない。

他に思いついたら徐々に追加する。