読者です 読者をやめる 読者になる 読者になる

アルパカDiary Pro

はてなブログProではありません

Aramakiをテスト公開しました

http://a.ramaki.net/


元は東京Node学園のハッカソンで作ったもので、
せっかくなのでWebサービスっぽくなるまで作ってみました。
まだまだやりたいことはありますが
ひと通りの実装は出来たのでα版としてテスト公開してみます。

概要

荒巻が眠っているのでみんなでクリックして叩き起こす!
ただそれだけのサービスですw

バトルフロー

  • バトル発生:定期的に荒巻が目覚めます
  • 部屋入室:目覚めるとバトル部屋へ入室することが出来ます
  • バトル:あとはひたすら荒巻をクリック!
  • 討伐:「倒した人」「一番ダメージを与えた人」が表彰されます。
荒巻の目覚め

数時間毎に目覚めます。
https://twitter.com/#!/aramakinet
こちらのアカウントをフォローしてバトル情報をGETしましょう。

バトル部屋への入室

荒巻が出現するとバトル部屋への入室が可能です。

ゲストアカウントでも入室可能ですが
荒巻とバトルすることは出来ません。
ただし戦っている様子をうかがうことは出来ます。

バトル

クリック!クリック!

残りHPによってアニメーションするよ。

討伐

「倒した人」「一番ダメージを与えた人」が表彰されます。
倒した人 > 一番ダメージを与えた人 > 参加者
の順で経験値がたくさんもらえます。

簡単な図

- バトル部屋 練習部屋 経験値 表彰 チャット
ログインユーザ
ゲストユーザ × × ×

今後のTodo(優先度順)

スマホ用UI対応
・ランキング(レベル/荒巻を倒した数/バトル貢献度)
・キング荒巻を出現させる
会心の一撃
・カウントダウンタイマー
・アニメーション
・荒巻パターンを増やす

技術的な話

オールNode.jsです。
使ってるライブラリはだいたいこんな感じ。
・matador
・express
・ejs
・socket.io
・mongoose
・oauth
・connect-redis
・logger
・config
・connect
・sanitizer
・forever

matadorについて

expressをMVCっぽく書けないかなーと思い使ってみました。
あと、コントローラのサンプル見ると
以下の様な感じでconfigの値を受け取れそうなのですが…

module.exports = function (app, config) {
  return app.getController("Application", true).extend()
  .methods({
      index: function (req, res) {
        var _self = this

実際はconfigには何も入ってこなかったために
結局自前でnode-configを使ってコンフィグ管理しました。*1
他にはデフォルトのテンプレートがいまいち使いづらかったのでejsに変更してます。

matador(express)とsocket.ioのセッション共有

こちらの記事をほぼそのまま流用させていただいております。
http://d.hatena.ne.jp/Jxck/20110809/1312847290

動的にチャットルーム追加

バトルが発生するたびにダメージの通知やチャットの通知を制限する必要があったので
動的にnamespaceを追加しています。
これは別記事で補足したいと思います。


よろしければ暇つぶしに遊んでみてください!

*1:実際にソースを追ってみたところconfigには何も設定していないし、パッチ書こうにもどう直したらいいか思いつきませんでした…