BakuretuKen の紹介

爆裂健です。大昔JavaAppletでゲームなど作ってました。

ブラウザでワンナイト人狼 最近の更新変更


最近、なかなかブログを更新できてませんね。
多少時間があるときに、「プログラム開発」か「ブログ更新」か?
となったときに、「プログラム更新」を優先してしまっている感じです。
まぁ、私が文章を書くのが苦手なだけかもしれませんが。。。

最近、何点か「プラウザでワンナイト人狼」のプログラムを改良(変更)しました。

まず1点目は、2013年07月23日に「狂人」の勝利条件を変えました。

今までは「狂人」がサポートする「人狼」がメンバーにいなかったら、プログラムがそれを検知してカードの配り直しをしていました。
これで、「自分が吊られても人狼を助ける」といった、より本家(?)人狼ゲームに近い行動が取れるようにしたのですが、
この場合、人狼2、狂人1とすると、平和な村が存在しなくなります (´・ω・`)

これに対して何通かご意見メールをいただきました。
まったくの盲点でしたし、頂いたメールは非常に参考になるものばかりでした。
この場をお借りしてお礼申し上げます。

私も、「平和な村」なのにプレイヤーが疑心暗鬼になるのは、ワンナイト人狼の素晴らしいシチュエーションの一つだと思います。
ですので、まずは配り直しを廃止しました。

そうなると問題になるのは、狂人がいるのに村に人狼プレイヤーがいない場合です。
その場合は、狂人を人狼として扱う等のアイディアや、いろいろご意見いただいたんですが、
「一致団結して平和な村を勝ち取るスチュエーション」や「ルールが複雑化するのでは?」といったことを考え、

村に人狼プレイヤーがいない場合、狂人は「人間チーム」にしました!(村人と一緒)

※「狂人」として村に生まれたけど、「人狼」がいないので「狂人化」しなかった。というストーリーです(こじつけですがw)

(※ゲームバランスによっては今後また勝利条件が変更される可能性があります)

詳しくは、狂人について を見てください。


2点目ですが、2013年07月28日に「ゲームマスター鑑賞モード」を追加しました。

これは何かというと、「ゲームマスターがプレイヤーとしてゲームに参加しないオプション」です。

( ゚Д゚)ハァ?

と、聞こえてきそうですが、このモードをONにすると、ゲームマスター画面では全てのカードが最初から最後までオープンになっています(ゲームマスターはゲームに参加出来ません)
ゲーム見学者がゲームマスターの画面を覗きこんで、ゲーム進行を楽しむものです。。。

「何に使うの?」とか言われると微妙ですが、私の知人のリクエストで

ゲームに参加しない人が、すべてカードオープンされたゲーム画面を見ながら、ゲーム進行をニヤニヤ見られるようにしたい!

というリクエストがあったので対応しました。
ものすごーーーーーく、需要は少ないと思いますwww

「ゲーム実況用」や「ゲーム非参加者向けにゲーム画面が見られる画面が欲しい」というメールも数通頂いてたので、いい機会だと思い実装しました。

そろそろ「ブラウザ 爆弾ゲーム Bakuretu Bomb」もバージョンアップしたいので、次はそっちに取り掛かりたいと思ってます。
(`・ω・´)ゞ

【注意】
このバージョンアップは「ブラウザでワンナイト人狼」というWEBブラウザで動作するゲームの話です。
オオカミさん氏作成の「オリジナルゲームルール」とは、関係ありませんのでご注意ください。

node.jsの自動再起動


先日、WebSocket通信 で使用している node.js が停止してしまい、「ブラウザでワンナイト人狼」ゲームが動かなくなっていました。ご迷惑をお掛けしました。

【関連記事】 node.js 止まってたわ(´・ω・`)

原因は解らなかったのですが、node.js をあまり長い間動かすとメモリリーク等で固まるのかもしれません。そこで、定期的に node.js を自動で再起動させることにしました。

こんな数行のシェルを組んでみました。

[bash]
#!/bin/sh

pid=`ps -elf | grep “app.js” | grep -v grep | awk ‘{print $4}’`
if [ “${pid}” != “” ]; then
kill ${pid}
echo “kill ${pid}”
fi
sleep 2
nohup /XXXXXX/node /XXXXXX/app.js > /dev/null &
[/bash]

このシェルを実行すると、今動いている node.js を kill して、新しい node.js を2秒後に起動します。後はこのシェルを自動実行するべく、cron設定を行いました。

[text]
# Node.js 定期リスタート処理
0 6 1 * * /XXXXXX/restartNodeJs.sh >/dev/null 2>&1
[/text]

これで、毎月1日 早朝6時に node.js が再起動するはずです。
標準エラー出力(STDERR) を /dev/null に流しているので、シェルの実行に失敗した時に気が付かないというツッコミがあると思いますが、このcron処理とは別に定期的なサービス監視が動いているので、node.jsが立ち上がらなかった場合はそちらで障害検知します。

さて、最初の自動再起動は 2013年8月1日 早朝6時ですね。
うまくいきますように!( ・`ω・´)/

[2013.09.13 追記]
現在は週に一回、月曜日の早朝 6:00 に再起動するようにしています。

[2016.02.23 追記]
現在は毎日一回、早朝 6:00 に再起動するようにしています。

最近趣味で料理してます


今年(2013年)のゴールデンウィークがあまりに暇だったんで、趣味を増やすべく「料理」を始めました。
まだ全然大したものは作れないのですが、つい Amazon で「フードプロセッサー」を買ったりして、地味にはまってますwww

130707140602

まぁ、TVで「料理ができる男性はモテる」と聞いて始めただけなんですよwww
中学生がモテようとしてギターを始めるのと一緒ですねwww

そんな訳で、作った料理や失敗談などをこのブログに載せると面白いかなーと思ったりしたんですが、料理の話を載せると、何を目的としているのか解らないブログになりそうです (´・ω・`)

もともと 大昔のホームーページ のように、プログラムの紹介などをやろうと始めたブログなので、「プログラムの紹介」と「料理の話題」が混在するブログはカオス化しそうです \(^o^)/

でも、せっかくハマっているので、たまには料理ネタを書きたいと思います。ご容赦くださいw

ブラウザでワンナイト人狼「狂人」勝利条件変更のお知らせ


本日(7/15)、「ブラウザでワンナイト人狼」を大幅(?)バージョンアップしました。

【注意】
このバージョンアップは「ブラウザでワンナイト人狼」というWEBブラウザで動作するゲームの話です。
オオカミさん氏作成の「オリジナルゲームルール」とは、関係ありませんのでご注意ください。

今回ポイントは2つで、1つめは「狂人」の勝利条件を変えました

[2013.07.23]  この投稿後、「狂人」の勝利条件を変更しました。この「狂人」の内容は古くなっています。最新情報は下記のリンク先を見てください。

→ ブラウザ ワンナイト人狼「上級者向けオプション」について

c5

いままで「狂人」は狼チームで、「狂人」が吊られると人間チームの勝ちでした。
元祖(?)人狼ゲームの「狂人」とは、かなり役割が違いました。
本来は人間チームのふりをして、人狼を勝利に導く役職です。

「狂人」に違和感を感じていた方がいらっしゃったようで、ブラウザでワンナイト人狼の「狂人」については何通かご意見を頂き、大変参考になりました。この場を借りて御礼申し上げます。

そこで、「狂人」が吊られても人狼チームが勝利した場合、狂人も勝利としました。
これで「狂人」は、元祖(?)人狼ゲームのように、「人狼を庇って自分が犠牲になる戦略」が取れます。

で、問題になるのはプレイヤーに人狼がいない場合、狂人が吊られた場合です。
元祖(?)人狼ゲームは必ず「狂人」がサポートするべき「人狼」がプレイヤーに存在します。

ですので、それを真似することにしました。
ゲーム開始時にプログラムがカードを配るときに、狂人プレイヤーがいた場合、必ず人狼プレイヤーが1人以上いるようにしています。
ですので、あなたにもし「狂人」カードが配られた場合は、他のプレイヤーの誰か1人以上が人狼です。

あと、現在は占い師に占われると「狂人」であることがバレてしまいます。
これはこれで面白いと思っているのですが、今後「上級者向けオプション」で「狂人が占われても村人になるオプション機能」をつけようかと思っています。

「狂人」カードをゲームで使用する場合は、8名プレイを行うか、「上級者向けオプション」でカード構成に「狂人」を含めてください(狂人のカード番号は 5 です)

2つ目は新役職「てるてる」の追加です。

jinrou3003

こちらも何名かの方々からリクエストメールをいただきました。
メールを頂くまで「てるてる」という役職をまったく知りませんでした。
メールをくださった方、ありがとうございます。

メールを頂いてググったんですが、こんな面白い役職があるのですね (^◇^)

「てるてる」は吊られるのを目的としている役職です。人間チームでも、人狼チームでもありません。
「てるてる」が吊られると、「てるてる」の一人勝ちになります。

「てるてる」カードをゲームで使用する場合は、「上級者向けオプション」でカード構成に「てるてる」を含めてください(てるてるのカード番号は 6 です)

※「てるてる」のカードデザインは現在イラスト担当の友人に依頼中です。そのうちちゃんとしたカードに置き換えます。

あと、細かい所では最大プレイ人数を8名に変更しました。
7名、8名プレイのカード構成は、オリジナルカード構成となっています(ゲームバランスによっては今後変えるかもしれません)

詳しくは、ブラウザ「ワンナイト人狼」遊び方 をご確認ください。

node.js 止まってたわ(´・ω・`)


何通メールをもらってで気がついたのですが、2013年7月6日(月)に「ブラウザでワンナイト人狼」が動かなかったようです。

2013年7月6日(月)夜に復旧しました。
ユーザーの皆さんにはご迷惑をおかけしました。

原因は WebSocket 通信に使用していた node.js サーバの停止です (´・ω・`)
この node.js は何をしているかというと、ゲーム中に「各プレイヤーのブラウザ」と「ゲームマスターのブラウザ」間の通信を中継してくれています。

node.jsは、まだあまり安定していないとかメモリーリークがあるとかは聞いていたので、定期的にプロセス監視(node.js、ちゃんとサーバ上に居るかな?)を入れてたんですが、プロセスは存在しているのにサービスが動かなくなっていました(ちゃんとサーバ上にいるのに働いていない状態)

そこで、今は定期的なサービス監視(node.js、ちゃんと働いているかな?)を行うようにしました。
ですので、今後同様の問題が発生した場合は、発見が早くなると思います ( ー`дー´)

これからも「爆裂健ホームページ」と「ブラウザでワンナイト人狼」をよろしくお願いします。

ブラウザ爆弾ゲーム Bakuretu Bomb 公開


ブラウザで動作する萌え(?)爆弾ゲーム Bakuretu Bomb が完成したので、公開しました!

爆弾ゲーム Bakuretu Bomb

ブラウザ爆弾ゲーム Bakuretu Bomb

先日知人にネタフリされたやつですw

enchant.js が面白かったので、勉強を兼ねて作成しました。

詳細は 爆弾ゲーム Bakuretu Bomb を見てください。

私はイラストが描けない人なので、もしこれを使ってゲームを公開してくれる絵師の方がいらっしゃると、嬉しい限りです (・∀・)

WordPressグローバルナビに挑戦


ブログ上部のグローバルメニューを自由にカスタマイズできたらいいなぁ。と日々思っていました。

wordpress13062501

でも「WordPress の PHP プログラムを改造しないとダメなんだろうなぁ」 「大変そうだなぁ」 と日々思い続けていました。

で、さっき試しに「WordPress グローバルメニュー」でググったら、なんか簡単にできることが判明 orz  できないと思ってた。思い込みって怖い。。。

WordPressのメニュー機能を使ってグローバルナビゲーションを作る
http://www.seotemplate.biz/blog/wordpress-tips/9761/

すごいぞ、WordPress。

あとは、このグローバルメニューの各項目に画像アイコンを配置したいんだけど、さすがにそれはプログラムの改造(もしくはCSSの書き換え)が必要だろうなぁ。。。

と思ってググったら、またも出て来ました ( ゚д゚)

グローバルメニューの文字の部分を画像にする
http://bizvektor.com/bizvektor_urawaza/gmenu_img/

WordPressの機能が気が利いているのか、それとも単に私の「WordPress力」不足か。。。

ブラウザ ワンナイト人狼「上級者向けオプション」について


「カード構成を自由に行いたい!」というリクエストを頂いたので、対応致しました。

またカード構成変更時に 狂人」 「てるてる」 を選べるようにしてあります。

[2013.07.22]
さらに「狂人」の勝利条件変更しました。
[2013.07.15]
「狂人」の勝利条件変更しました。役職「てるてる」追加しました。プレイ人数の上限を8名にしました

apple-touch-icon

ブラウザで「ワンナイト人狼」
http://oj.bakuretuken.com/

■ 「カード構成」変更方法

ゲーム開始時に、カード種類番号を枚数分ダイレクトに設定する 仕様となってます(*1)。

設定されていないとオリジナルルールのカード枚数が使用されます。

jinrou3001

カードの番号は以下のとおりとなっております。

 1: 村人
 2: 占い師
 3: 怪盗
 4: 人狼
 5: 狂人
 6: てるてる

これを半角数字で「カード構成」の部分に入力してください。

5枚のカードを設定すると、3人プレイのゲームでカード構成が変更されます。
6枚のカードを設定すると、4人プレイのゲームでカード構成が変更されます。
7枚のカードを設定すると、5人プレイのゲームでカード構成が変更されます。
8枚のカードを設定すると、6人プレイのゲームでカード構成が変更されます。
9枚のカードを設定すると、7人プレイのゲームでカード構成が変更されます。
10枚のカードを設定すると、8人プレイのゲームでカード構成が変更されます。

プレイヤーの人数に合わせて、カード枚数を設定してください。

例えば、村人2、占い師2、怪盗1、人狼2、狂人1 の場合は、

11223445

と入力します。6人プレイのゲームがスタートすると、このカード構成が適用になります。
ちなみに順番はなんでもいいので、54411223 でも同じになります。

制限として「怪盗」は1枚しか選べません。
制限として「狂人」は1枚しか選べません。
制限として「てるてる」は1枚しか選べません。

ちなみにオリジナルルールのカード構成は以下になっています。

3人プレイ 12344
4人プレイ 112344
5人プレイ 1112344
6人プレイ 11112344

拡張ルールの7名、8名プレイでのデフォルトカード構成は以下になっています。
(ゲームバランスによっては今後変更する可能性があります)

7人プレイ 111122344
8人プレイ 1111223445

新キャラ「狂人」のルールは以下になります。



■ 「狂人」について
c5

[2013.07.23]  狂人ルールを変更しました。人狼が村にいれば狂人は人狼チームとなり、人狼が村にいない場合は人間チームになります。

狂人はオオカミさん作成のオリジナルルールに無いキャラクターです。
もちろん通常(?)の「人狼ゲーム」では、おなじみのキャラです。
現在、「ブラウザでワンナイト人狼」では、「狂人」は下記の独自ルールのキャラとなっています(2013.07.23更新)。

ブラウザで「ワンナイト人狼」 狂人 ルール

  • プレイヤーに人狼がいる場合、「人狼チーム」となります。自分が吊られても、人狼チームが勝てば勝ちになります。
  • プレイヤーに人狼がいない場合、「人間チーム」となります(村人と同等となります)。
  • 特殊能力は無しです。夜のターンでは他の人のカードは一切見られません。
  • 占い師に占われると、狂人であることがバレます

「自分が吊られても人狼を助ける」といった、より元祖(?)人狼ゲームに近い行動が取れるようにしました。

また、平和な村(プレイヤーに人狼がいない)だった場合、「狂人」は人間チームとなります。
※「狂人」として村に生まれたけど、「人狼」がいないので「狂人化」しなかった。というストーリーです。

「狂人」のプレイヤーはまず自分がどちらのチームなのか(プレイヤーに人狼がいるのか)、周りのプレイヤーの会話から推測してください。平和な村だと思ったら「狂人」をカミング・アウトしても良いかもしれません。

上級者向けオプション「カード構成」でカード番号 5 を設定するか、8人プレイの時に「狂人」が使用されます。



■ 「てるてる」について

card_teltel_c6

「てるてる」はオオカミさん作成のオリジナルルールに無いキャラクターです。

現在、「ブラウザでワンナイト人狼」では、「てるてる」は下記の独自ルールのキャラとなっています。(ネット人狼ゲームでは「てるてる」は有名らしいです)

ブラウザで「ワンナイト人狼」 てるてる ルール

  • 吊られるのを目標としている役職です。人間でも人狼でもない独自の勢力です
  • 吊られると一人勝ちとなります。
  • 占い師に占われると、「てるてる」であることがバレます

上級者向けオプション「カード構成」でカード番号 6 を設定すると「てるてる」が使用されます。


【注意】
役職「狂人」と「てるてる」及びプレイ人数7名,8名は「ブラウザでワンナイト人狼」というWEBブラウザで動作するゲームの「オリジナルルール」となります。
オオカミさん氏作成の「オリジナルゲームルール」とは、関係ありませんのでご注意ください。

2013.07.15 のバージョンアップで比較的大きくプログラムを変更したので、もし不具合やバグを見つけたらご連絡していただけるとありがたいです。
また、上級者オプションでわかりづらいという部分がありましたら、こちらもご連絡いただけるとありがたいです。

(*1)プログラムで管理しているいわゆるマジックナンバーでの指定です。我ながらイケてないですね。本当は各カード枚数を選べるページを用意したほうがいいのですが。。。そのうち作るかもしれません。

enchant js でハマった


「最近、10年ぶりくらいにホームページ(ブログ)を始めたよ」と、本ブログを昔からの知人に話したら、

「爆裂健なら、昔みたいに ふざけたミニゲーム を作ってくれよ!」と言われた。

node.js の勉強を兼ねてカードゲームを作ったんだけどなぁ~。
知人はこういう(↓)ネタゲームが好きなようだwww

爆裂ブロック崩し

 

しかし、今更 JavaApplet などでネタゲームを作る訳にはいかない。。。

そんなわけで今度は最近お気に入りの enchant.js で萌系(?)ゲーム制作を開始。
久しぶりに集中して趣味でゲーム(?)プログラムを制作。

で、いきなりハマったw

Surface で作った全画面Spriteの上に別のSpriteを置いたら、上に置いたSpriteの「touchstartイベント」が全画面に反映されてしまった。

小一時間ほどハマって、「これ?encjant.jsの問題では?」という結論に行き着いたので、さしあたり enchant.js を最新版(Ver 0.7.0)にバージョンアップ。(0.6.3 で開発してました)

おお!治った。

でも、違う問題が発生www

今度は、Sprite を複数シーンで使いまわしている部分で、表示されなくなってしまった。

( ゚Д゚) ハァ?

という顔になりながらもデバッグを進めると、原因は私のコードでした。

enchat.js ではゲーム(フレーム)の進行を Game.frame で管理しているようだったので、つい勝手に

game.frame = 0;

てな感じで 0 にして、勝手にタイミング調整に使ってたんですが、これがダメだった模様。
多分、内部のタイミング処理に使ってますね、この変数。。。

思わぬ所で、ハマったわぁ~

でも近々、enchant.js で萌えゲー(?)を公開できそうです。

<ご意見頂きました>

「ブラウザでワンナイト人狼」のリクエストメールを何通か頂いています。
ありがとうございます。

今頂いているご意見で特に多かったのは、以下です。

  1. 最大参加人数を6名に
  2. 議論時間を3分固定ではなく選択できるように
  3. 「狂人」カードの追加
  4. チャット機能

1. 2. は、2013年06月09日 のバージョンアップで対応いたしました。
3. 4. については、ちょっと大変そうなので考えさせてください。

これからも ブラウザでワンナイト人狼 をよろしくお願いします。

enchant.js 簡単すぎてワロタ


最近 JavaScript が面白いので、JavaScript で簡単にブラウザで動くゲームが作れると巷で噂の enchant.js に挑戦。

あっという間にホモォが動いたw

ホモォ

ホモォ – enchant.js
http://bakuretuken.com/enchant/homo.html

これは面白い。enchant.js をつかってゲーム作りたいなぁー
また「やるやる詐欺」になりそうですけど。。。
書いたプログラムは、この程度です。

[javascript]enchant();

var game = new Game(640, 320); // game stage

game.preload(‘img/homo02.png’); // preload image
game.fps = 20;

game.addBear = function(){
var bear = new Sprite(140, 32);
bear.image = game.assets[‘img/homo02.png’];
bear.x = rand(300);
bear.y = rand(300);
bear.frame = [0, 0, 1, 1]; // select sprite frame

bear.tl.moveBy(288, 0, 90) // move right
.scaleTo(-1, 1, 10) // turn left
.moveBy(-288, 0, 90) // move left
.scaleTo(1, 1, 10) // turn right
.loop(); // loop it
game.rootScene.addChild(bear);
};
game.start();

game.tick = 0;
game.rootScene.addEventListener(Event.ENTER_FRAME, function() {
if (game.tick < 1100 && game.tick%80 == 0) game.addBear();
game.tick++;
});

function rand(num)
{
return Math.floor(Math.random()*num);
}[/javascript]