[JavaScript]MyGameで実装したぷにゃりん競争をJavaScriptに移植
動作サンプル
以前にJavaScriptをやろうとしたときはよくわからなかったんだけど、真面目にやれば思ったほど難しいことはなさそう。 手元のノートPCだと半透明を使うと数十倍遅くなっちゃうけど(早いマシンなら快適に動く)。 半透明以外は思ったよりもさくさく動くので驚いた。 特にメニューの背景でスクロールさせている画像のタイルパターンが、あまりにきれいにスクロールしてくれるので感動した。 こうやって描画領域を固定するとFlashみたいに見える。
JavaScriptでどんなことができるのかが大体わかった気がする。 これがフツーに移植できちゃったんだから、つまりかなりのことができそう。 HTMLベースのレイアウトのノウハウに一切とらわれないで、すべて絶対座標で画像を表示しちゃえば、普通のゲームみたいにいろんなことができる。 というかCSSは表現力が高いので思ったよりも扱いやすい。 動きが激しいのは重くなりそうだけど、でもそれも今の最新のパソコンならほとんど気にならないんじゃないかな。まあ気づくのが遅かっただけか。
技術的には次の3つを押さえればいいのかな?
- JavaScript(の言語的な仕様)
- HTMLとCSS
- DHTML
よくわからなかったで既存のライブラリに頼らず自力で描画周りを制御してるけど、JavaScriptにはいろんなライブラリがあるみたい prototype.jsとか調べたほうがいいのかな?
[Ruby]順序付きハッシュを使いたくなるとき
いつもRailsのViewで書きたくなる。 今はこうしているけど、
<%= [ [:Home, { :controller => :home }], [:Menu, { :controller => :home, :action => :menu}], [:Login, { :controller => :account, :action => :login }], ].map {|name, args| link_to(name, args) }.join(' ') %>
できればこう書きたかった。
<%= { :Home => { :controller => :home }, :Menu => { :controller => :home, :action => :menu }, :Login => { :controller => :account, :action => :login }, }.map {|name, args| link_to(name, args) }.join(' ') %>
ハッシュの意味がどーこーじゃなくて、ただハッシュのリテラル表記が好きなだけなのかなあ。 デザインを本格的に作りこむ段階では、こういう場所はベタに展開しちゃいそうなんだけど、開発途中のさくっとでっち上げたいときにはできるだけ楽に書きたい。
MyGameとゲームプログラミング発表資料
- MyGameとゲームプログラミング (KansaiWorkshop18-mygame_20070825_0.pdf, 1,443,786 bytes)
第18回 Ruby/Rails勉強会@関西の発表資料です。 RabbitのデータがようやくPDF化できました。 本当はslideshareにアップしたかったのですが、なぜかこのPDFをアップロードすると化けるのでPDFを直接公開します。
Rabbitで出力できない件の続き
--logger-type gui
rabbit.batを見ると、
start rubyw -S rabbit --logger-type gui %*
となっているので --logger-type gui はデフォルトで有効みたい。 これを指定しなくてもrdから参照している画像がなかったりするとダイアログにそのエラーが出力されるし。
rabbit.batを使わずに実行してみる
rabbitファイルをカレントにコピーして次のように実行してみる。
ruby -S rabbit --logger-type gui -s test.rd
ちなみにtest.rdは次のような内容。
= MyGame = AAA = BBB
結果はすぐに終了。ダイアログは出なくて、コマンドプロンプトには次のようなログが出ている。
c:/ruby-oneclick/lib/ruby/site_ruby/1.8/rabbit/html/generator.rb:208: warning: G Lib.win32_locale_filename_from_utf8() is deprecated. Use GLib::Win32.locale_file name_from_utf8 instead c:/ruby-oneclick/lib/ruby/site_ruby/1.8/rabbit/html/generator.rb:208: warning: G Lib.win32_locale_filename_from_utf8() is deprecated. Use GLib::Win32.locale_file name_from_utf8 instead (略) c:/ruby-oneclick/lib/ruby/site_ruby/1.8/rabbit/html/generator.rb:208: warning: G Lib.win32_locale_filename_from_utf8() is deprecated. Use GLib::Win32.locale_file name_from_utf8 instead
--
あれ、もしやと思って確認したらpngファイルが出力されている! なるほどrubywじゃなくてrubyを使えば出力されるんだ。 じゃあこのログは意味なかったか……。
--
追記:上で間違えて「start ruby…」書いていたのを「start rubyw…」に修正。
進捗
- 無線LAN開通
- サーバーPC起動
- ルータ設定 (←いまここ)
- サービス公開
ADSLのモデムを交換したのだけど、交換自体はすぐに終わってて、というか妻にすべて任せていたんだけど、なぜか外からローカルマシンへのポート転送がつながらない。ルータは壊れていないっぽいんだけど。でもADSLモデムが新しくなったから何か変わったのかのと思って説明書を見ると、どうやらADSLにルータの機能がついているらしい。なんと無線LANの機能まで追加されているじゃないか。ただ色が黒から白に変わっただけじゃなかったんだな。ということに気がついたのがおとといの話。というわけで、もとのルータを外して、新しいルータを設定中なんだけど、いまだ外からつながるように出来ない。すごーく遅いけどタスクは着実に進んではいる。
Rabbit資料公開のほうは、おととい須藤さんがこの日記を捕捉してくれて、ショッカーに入れられて、MLで公開用のデータが出力できない現象が無事確認されたみたい。
るびま20号リリース
http://jp.rubyist.net/magazine/?0020
関係者の皆さんお疲れ様です。
0020 号 読者プレゼントに私のRubyゲーム本が出ています。どうぞふるってご応募ください。
ゲームのつくりかた
ゲームをつくるときの手順。
まずそのゲームをプレーした人がどう感じるのかを決める。 そのゲームをプレーしたときのプレイヤーの思考や心の動きをイメージする。 ここでどう面白いのかを決める。どう面白いか(何を感じるか)をイメージするだけで、具体的に何が面白いのか(何がそう感じさせるのか)はまだわからない。 このときに重要なのは相手に何を感じさせたいのかをはっきりと自分が認識すること。自分が表現したいことの本質を自分の中から探し当てなければならない。 この段階ではできるだけ大きく風呂敷を広げる。ただしいろいろなことをやるのではなく、明確な芯を通すことが大切。
次に、表現したいものを相手に伝えるために必要な要素をつくる。 つまり具体的な成果物をつくる段階。具体的にいろんな要素を決めて一貫性を通してゆく。具体化すればするほど、どんどん当初のイメージが小さくなってきて悲しくなるけど、すべてをまとめあげなければならない。ここでは実際にものをつくって、それがプレイヤーに与える印象をひたすら自分の頭の中で想像し、自分の表現したいものが最も伝わるであろう状態に調整する。またはつくり直す。想像して想像して、もう何が正しくて正しくないのかわからなくなって、意識がモウロウとする。そんな中で、なんとか自分がこれだと思えるところに落とす。結局他人がどう感じるのかなんてわからないのだけど、ここでの苦労は経験的にはかなり報われるこになる。
真面目にやるととってもしんどいので、ものが完成したときは自分自身を大きく切り取って(削り取って)それを世にリリースする感覚。大きく切り取ったときほど、つまり自分のつくりたいものを明確に認識できて、それをやりきれたときほど、ものを生み出したという気持ちが強くなる。
いつもこんな感じでやるわけだけど、この手順や方法は、本を書くときもプレゼン資料を作るときも同じだ。
Ruby/Rails勉強会@関西-18
Ruby/Rails勉強会@関西-18 でセッションをやらせていただくことになりました。
この手の発表は初めてなので、どうなってしまうのか楽しみです。 プレゼン資料を作るのも初めてなので勝手がわからず勘でやっております。
内容はMyGameを使ったゲームプログラミングをRuby初心者に紹介します。 Rubyに慣れた人が5分で理解出来ることを50分かけてじっくり説明します。
[アイデア]キャラクターの能力を自分で考える
プレイヤーが自分で特殊能力を考えてそれをゲームマスターに伝えると、それが実際に実装されてゲーム内で使える自分だけの能力になるというのはどうか。
以下メモ。
- 100種類の機能を作るとしたら、1日1実装のペースで100日か
- でもたぶん能力がかぶってくるだろうな
- プレイヤーの発想しだいだな
- アイデア
- 整合性(矛盾がない、破綻していない、有限の効力)
- バランス感覚
- 簡単に作れそうだと実装が進みやすい?
- 実装の手間の問題
- 実装されるとは限らない(当然だけど)
- そのやり取り事態がゲーム。ハンター×ハンターの能力と制約の正当性
- レアアイテムがあると出来る
- 他人にはその能力は非公開
- ばれたら新しい技を作るとか
- ソースで伝える。パッチ
- ひとり一回だけ?アイテムの回数だけ?
- やっぱLLなんだからこういうのやりたい