Jewel-mmo開発日記 http://dgames.jp/dan RubyでMMORPGを開発しています。その開発の過程を綴った日記です。 クオリティと門とYokohama.rb http://dgames.jp/dan/permalink/20100904 「横浜へなちょこプログラミング勉強会」の@hkhumanoidと毎回運営を手伝ってくれる仲間に感謝しつつ、これからはじまるYokohama.rbをよろしくお願いします。... <h2>クオリティと門とYokohama.rb</h2> <h3>In rubykaigi2010,</h3> <p>@kakutani の発表をみてこんなことを思った。 以下、まずは当日感じたままを書いておく。</p> <p> <div class="amazon"> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=bilbo-22&o=9&p=8&l=as1&asins=4150503338&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </div> <div class="amazon"> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=bilbo-22&o=9&p=8&l=as1&asins=415050332X&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </div> </p> <p>「クオリティ」とよばれるものがあらしい。バイク乗りたちの言葉らしい( <a href="http://www.amazon.co.jp/o/ASIN/415050332X/bilbo-22">この本</a> に出てくる話らしい)。</p> <p>この「クオリティ」はライダーがバイクで走っているときに感じる言葉に表せないようなもの。 とにかく「いい感じ」な何かだと認識した。</p> <p>この「クオリティ」を自ら得るためには「門」を建てればいい。 かくたにさんにとっての「門」はrubykaigiであると。</p> <p>で、あとの詳しい話はもう覚えてないんだけど、そのとき「クオリティ」というものが何であるかはすぐに理解できた。 そして「門」が、「クオリティ」に通じるための有効な手段であることも同意できた。</p> <p>ここまでを認識した時点ですぐに「<a href="http://groups.google.com/group/yokohamarb">Yokohama.rb</a>」が頭に浮かんだ。 思いついてしまえば、すごく自然なことで、今までなかったのがおかしなくらい自然なことのように思えた。</p> <p>発表が終わって、かくたにさんが大ホールの階段を上がっていくとき、「Yokohama.rbを立ち上げます!」とのどまででかかったんだけど「お疲れさまでした」としか言えなかった。</p> <p>帰りの電車であるrubykaigi参加者にYokohama.rbについて話してみたら「参加してみたい!」言ってくれたので、このとき立ち上げることを決意した。家に帰るとすぐにtwitterで宣言した。</p> <h3>By the way,</h3> <div class="amazon"> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=bilbo-22&o=9&p=8&l=as1&asins=4797336021&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </div> <p>2010年の春から横浜で「ふつうのHaskellプログラミング読書会」というのを開催している。</p> <p>横浜には @hkhumanoid が立ち上げた「<a href="http://groups.google.com/group/yhprogramming">横浜へなちょこプログラミング勉強会</a>」という地域勉強会があり、Googleグループには100名くらいのメンバーが参加していた(と思う。2010の春の時点で)。</p> <p>そのとき残念ながら「横浜へなちょこプログラミング勉強会」の活動は休止してしまっていた。</p> <p>なんとか復活させたいと思っていたところに、会場の予約その他を手伝ってくれるという @saytx が現れて、ならばとMLに「ふつうのHaskellプログラミング読書会」を提案し、活動を再開させることができた。そして今日はその<a href="http://groups.google.co.jp/group/yhprogramming/web/haskell-6">6回目の読書会</a>。</p> <p>この「ふつうのHaskellプログラミング読書会」の運営はとても楽なものだった。数ヶ月前まで運営されていた「横浜へなちょこプログラミング勉強会」という箱があり、面倒だと思われた事務手続きを一手に引き受けてくれる人までいた。オレ自身はMLへ参加のお知らせを投げるだけだったので(根回しはしたわけだけど)、あまりに楽過ぎて、とても自分が主催しているとは思えなかった。</p> <p>今では自分で会場を予約したり、ATNDにページを作ったり、懇親会の会場を予約したりすることにも慣れた。いつの間にか横浜で勉強会を開くスキルがすっかり身に付いていたのだ。</p> <p>Yokohama.rbを立ち上げるのに必要なものは全部そろっていた。 そしてYokohama.rbという門を建てた。ここクオリティがあると信じている。</p> <h3>Anyway,</h3> <p>「横浜へなちょこプログラミング勉強会」の @hkhumanoid と毎回運営を手伝ってくれる仲間に感謝しつつ、これからはじまるYokohama.rbをよろしくお願いします。</p> 2010-09-04T00:00:00+09:00 勝手にレベルの上がるのを見守るRPG http://dgames.jp/dan/permalink/20100826 勝手にレベルの上がるのを見守るRPG先日ボタンを押すだけで経験値が増えるRPGを考えたのだが、もう一歩進んで、見てるだけで勝手にレベルが上がるのはどうだろうかと思った。操作が不要なわけだから、ただプログラム回してひたすら経験値を上げるだけの簡単なゲームと思... <h2>勝手にレベルの上がるのを見守るRPG</h2> <p>先日ボタンを押すだけで経験値が増えるRPGを考えたのだが、 もう一歩進んで、見てるだけで勝手にレベルが上がるのはどうだろうかと思った。</p> <p>操作が不要なわけだから、ただプログラム回してひたすら経験値を上げるだけの簡単なゲームと思って試しに実装しようと思ったんだけど、 いざ作り始めてみるとこれが難しい。</p> <p>一般的なRPGとは操作方法がまったく違うわけで、つまりUIがまったく違うので、そもそも基本画面をどんな形にすれば良いのかが決まらない。</p> <p>ただ見てるだけだとちゃんとしたゲームにならないので、そこに何を足せば面白くなるのか、 何かを足すにしても出来るだけ少ないシステムで面白くするにはどうすればいいかというところで悩んで、 実装が進まなくなってしまった。</p> <p>以下メモ。</p> <ul> <li>shachiは町を歩いています</li> <li>shachiは町を出ました</li> <li>shachiはスライムに遭遇しました</li> <li>shachiは戦っています</li> <li>shachiは戦っています</li> <li>shachiはスライムを倒しました<ul> <li>=&gt; 「やくそう」を入手</li> </ul></li> <li>shachiはぼーっとしています</li> <li>shachiはやる気がありません</li> <li>shachiはドラゴンに遭遇した</li> <li>shachiは戦っています</li> <li>shachiは剣の扱い方がわかりません</li> <li>shachiは敵と戦う勇気がありません</li> <li>shachiは戦っています</li> <li>shachiはダメージを与えることができません</li> <li>shachiはドラゴンにまったく歯が立ちません</li> <li>shachiはドラゴンを倒しました<ul> <li>=&gt; shachiはレベルが上がりました</li> </ul></li> <li>shachiは町に戻りました</li> <li>shachiは剣の修行をしています<ul> <li>成果はありませんでした</li> </ul></li> <li>shachiは剣の修行をしています<ul> <li>=&gt; shachiは剣のレベルが上がりました</li> </ul></li> </ul> 2010-08-26T00:00:00+09:00 test http://dgames.jp/dan/permalink/20100602 testtest...... <h2>test</h2> <p>test...</p> 2010-06-02T00:00:00+09:00 test http://dgames.jp/dan/permalink/20100519 testtest...... <h2>test</h2> <p>test...</p> 2010-05-19T00:00:00+09:00 iPhon 某印籠アプリの開発メモ http://dgames.jp/dan/permalink/20100514 ○設定画面○IBで組む○画像きりかえ○サプライズスイッチを有効に設定情報の永続化○振動追加○音の追加○背景ウィンドウ画像の表示○起動画面○起動直後にkira○iアイコンを大きくアプリ名を国際化... <h2>iPhon 某印籠アプリの開発メモ</h2> <p>申請できる状態までちゃんと実装したと思っていたが、永続化処理が未実装だったようで、 んでもって、ずいぶん前に書いたアプリだからiPhoneアプリとしてあんまり実装がよくなく保守が大変そうだったので、 思い切ってフルスクラッチすることにした。</p> <p>画像の扱いが簡略化できた。 いままで良くわからず、IBを使って無理矢理なことしてたから……。</p> <h3>todo</h3> <ul> <li>○設定画面<ul> <li>○IBで組む</li> <li>○画像きりかえ</li> <li>○サプライズスイッチを有効に</li> </ul></li> <li>設定情報の永続化</li> <li>○振動追加</li> <li>○音の追加</li> <li>○背景ウィンドウ画像の表示</li> <li>○起動画面</li> <li>○起動直後にkira</li> <li>○iアイコンを大きく</li> <li>アプリ名を国際化</li> </ul> 2010-05-14T00:00:00+09:00 第2回ふつうのHaskellプログラミング読書会に行ってきた http://dgames.jp/dan/permalink/20100510 第2回ふつうのHaskellプログラミング読書会に行ってきたhttp://groups.google.co.jp/group/yhprogramming/web/haskell-2事前学習不要という位置づけなので、前回のあと予習も復習も一切やらずに参加。前... <h2>第2回ふつうのHaskellプログラミング読書会に行ってきた</h2> <p><a href="http://groups.google.co.jp/group/yhprogramming/web/haskell-2">http://groups.google.co.jp/group/yhprogramming/web/haskell-2</a></p> <p>事前学習不要という位置づけなので、前回のあと予習も復習も一切やらずに参加。</p> <p>前回同様テーブルをみんなで囲んで3,4章を音読。</p> <p>月に一度の勉強だけど着実にHaskellが身に付いてきている。</p> <p>そろそろなんか書いてみたい気がしてきた。</p> 2010-05-10T00:00:00+09:00 iPhone RPG開発ログ10(ログ画面の必要性) http://dgames.jp/dan/permalink/20100423 エフォクトをログ画面でも使えるようにモンスターのHPをプログレスバーで可視化○ログ画面○ログ画面についてその必要性を考えるレベルアップ時のパラメータ表示→ログを見るlua=&gt;CのAPIでboolを扱えるようにキャラクター画面キャラの名前変更... <h2>iPhone RPG開発ログ10(ログ画面の必要性)</h2> <p>ダメージ値とかそういったテキストログはメイン画面に一切表示しないので、別途ログ表示用の画面を設けようと思ってる。</p> <p>さしあたって戦闘後に獲得したアイテムの名前とレベルアップ時のステータス変化の表示をログ画面に任せてしまうかどうかを使うかどうかを悩んでいる。 この辺の主要な内容についてまでログ画面に任せてしまうのか、それともログはあくまでおまけという位置づけにするのか。</p> <p>これはUIとゲームデザインの問題だ。 UIの問題は開発の初期に解決することが難しい。 なので、後々の変更のしやすさを含めた実装上の都合を大きな判断基準にすべきだ。</p> <p>どのみちログ画面を用意するのであれば、とりあえず何でもログに書き出すという方針でいいか。 ログ画面を開くボタンをどう配置するかはログ画面の位置づけによって変わってくるが、これはすぐには決められない。 しかし、これは基本UIなので、この決断によってゲームデザインが大きく変わりうる。</p> <p>と書いてみたところで、結局とりあえずどうすべきかの判断さえもつかないので、実装上の都合を最優先にする方向。</p> <p>ログ画面を実装した。 テキスト表示に関しては、UIWebViewを用いれば手軽にHTMLによる多彩な表現を利用できることに気がついた。 これは楽だ。</p> <h3>todo</h3> <ul> <li>エフォクトをログ画面でも使えるように</li> <li>モンスターのHPをプログレスバーで可視化</li> <li>○ログ画面</li> <li>○ログ画面についてその必要性を考える</li> <li>レベルアップ時のパラメータ表示→ログを見る</li> <li>lua =&gt; C のAPIでboolを扱えるように</li> <li>キャラクター画面<ul> <li>キャラの名前変更</li> </ul></li> </ul> 2010-04-23T00:00:00+09:00 iPhone RPG開発ログ9(宝箱と予告のアイデア) http://dgames.jp/dan/permalink/20100422 レベルアップ時のパラメータ表示→ログを見るキャラクター画面キャラの名前変更... <h2>iPhone RPG開発ログ9(宝箱と予告のアイデア)</h2> <p>次は敵を倒したときの表示と操作をどうするか。 宝箱表示も考慮したい。</p> <p>敵にとどめを刺したとき、その瞬間にレベルが上がるのか、ワンテンポ置いてレベルが上がるのか。 ドラクエに例えるなら「スライムをたおした!」と文字を出すと同時にレベルアップ音を鳴らすのか、それとも「スライムをたおした!」のあと一度ボタン押すとレベルアップ音が鳴るのかの違い。</p> <p>宝箱の出現について。 原案には書かなかったけど、Wiz的な宝箱システムとすこぶる相性がいいことに気づいた。 古典的な宝箱システムに通過予告的な予兆システムを追加すると良いんじゃなかろうか。</p> <p>宝箱専用画面を描くか。</p> <ul> <li>宝箱クリックで「(罠の種類を)調べる」<ul> <li>ときおり予告を「エフェクト」で表示</li> <li>判明時キャラクタのカットインを表示→鑑定者を罠名と一緒に表示</li> <li>鑑定者がアティブキャラクターとなって罠を解除する</li> </ul></li> </ul> <p>宝箱が出現する場合と出現しない場合を実装した。画面の切り替わりのタイミングにブラックインをはさむ。</p> <p>メイン画面での敵出現→戦闘突入→戦闘終了→宝箱出現→フィールドの流れがかなり完成に近づいた。</p> <h3>HP回復についての考察</h3> <ul> <li>応急処置 ... 戦闘中の毎ターン回復</li> <li>治療 ... 戦闘終了時全回復</li> <li>回復アイテム ... 常時任意キャラを回復</li> </ul> <h3>todo</h3> <ul> <li>レベルアップ時のパラメータ表示→ログを見る</li> <li>キャラクター画面</li> <li>キャラの名前変更</li> </ul> 2010-04-22T00:00:00+09:00 iPhone RPG開発ログ8 http://dgames.jp/dan/permalink/20100421 ○レベルアップキャラクター画面○性別を表すパラメータとその変数名キャラの名前変更... <h2>iPhone RPG開発ログ8</h2> <p>ログが15に達するまでは淡々と開発作業を続けたい。</p> <p>レベルアップを実装。 レベルアップや敵を倒したときに画面にエフェクトを出しているのだが、敵を倒すと同時にレベルアップすることがあるので、 エフェクトをキューで管理することにした。Lua側で制御すればたいしたことではない。</p> <p>気がつくとLuaスクリプトのモデル部分が300行を超えている。1000行に収まるんじゃないかと思っていたけどどうかな。ここまでの感じLuaのコードはRubyの2倍くらいの長さになりそう。しかし、用途にもよるし、LuaはRubyのように汎用的には使えないのでこの比較は意味ないか。</p> <p>フリーズのタイミングを延々と調整。 レベルアップエフェクトの複数回表示に対応。</p> <p>次は敵を倒したときの表示と操作をどうするか。 宝箱表示が欲しい。</p> <h3>todo</h3> <ul> <li>○レベルアップ</li> <li>キャラクター画面</li> <li>○性別を表すパラメータとその変数名</li> <li>キャラの名前変更</li> </ul> 2010-04-21T00:00:00+09:00 iPhone RPG開発ログ7 http://dgames.jp/dan/permalink/20100420 ○ステータスバーを黒くする○Win表示○エンカウント時のフリーズ性別を表すパラメータとその変数名○メインパネルにキャラ以外の画像を表示キャラの名前変更... <h2>iPhone RPG開発ログ7</h2> <p>フィールド表示→エンカウント表示→モンスター表示→フィールド表示……</p> <p>と切り替えてみたが微妙。 フリーズ演出やエフェクトを入れないといまいちだ。</p> <p>ボタンを一定時間無効にするにはどうしたいいだろう。 画面の上を別の画像で覆ってしまえばいいか。</p> <p>画像でスクリーンを覆ってフリーズ時間を作る作戦がうまく行った。</p> <p>ところでレベルアップのタイミングはいつだろう。 このゲームは攻撃するだけで経験値がアップするので、経験値だけがレベルアップの条件なら戦闘中にレベルアップしてしまう。</p> <h3>todo</h3> <ul> <li>○ステータスバーを黒くする</li> <li>○Win表示</li> <li>○エンカウント時のフリーズ</li> <li>性別を表すパラメータとその変数名</li> <li>○メインパネルにキャラ以外の画像を表示</li> <li>キャラの名前変更</li> </ul> 2010-04-20T00:00:00+09:00 iPhone RPG開発ログ6 http://dgames.jp/dan/permalink/20100419 性別を表すパラメータとその変数名メインパネルにキャラ以外の画像を表示キャラの名前変更○キャラ名の文字化け○アクティブキャラ情報の表示○lua_closeをどこかで呼ぶこと...参考:http://karetta.jp/book-node/lua/22883... <h2>iPhone RPG開発ログ6</h2> <p>日本語のキャラ名をLuaから渡したら文字化けしてる。 問題は下記コード。</p> <pre>character_name.text = [NSString stringWithFormat:@"%s", active_character()-&gt;name];</pre> <p>こういう場合はstringWithFormatを使わずにinitWithUTF8Stringを使ってC言語の文字列からNSStringを生成すればいいようだ。</p> <pre>NSString *str = [[NSString alloc] initWithUTF8String:active_character()-&gt;name]; character_name.text = str; [str release];</pre> <p>これで動いたのだが、strをreleaseしてしまっていいのか? 代入した時点で値が新たに生成されるのだろうか。 明らかにまずいけどたまたま動いているだけ?</p> <p>パフォーマンスツールでメモリリークを監視すると、上記コードは問題なく動いているように見える。 releaseをコメントアウトするとメモリリークが確認できる。</p> <p>次のようにすればreleaseが不要になるのかな。</p> <pre>character_name.text = [NSString stringWithCString:active_character()-&gt;name encoding:NSUTF8StringEncoding];</pre> <p>init〜系は極力使わないようにするのがいいのかな。参考: <a href="http://konton.ninpou.jp/program/cocoa/memory.html">http://konton.ninpou.jp/program/cocoa/memory.html</a></p> <p>リファレンスカウンターか。はっきりとはわからないがリファレンスカウンターをイメージしながらコーディングしてれば、そのうちわかってくるだろう。</p> <p>開発環境でデバイスでのプログラム起動もう少し早くならないかな。 今はビルド済みのプログラムが起動するまでに7秒くらいかかる。1秒くらいならいいのに。</p> <p>念のため現状のコードでメモリリークが起きていないかパフォーマンスツールでチェック。問題ないようだ。</p> <p>アクティブキャラ情報の表示。</p> <ul> <li>キャラクター名</li> <li>アクティブキャラクターの経験値</li> <li>「次のレベルまで0123456」</li> </ul> <p>レイアウトが微妙なので修正。</p> <h3>todo</h3> <ul> <li>性別を表すパラメータとその変数名</li> <li>メインパネルにキャラ以外の画像を表示</li> <li>キャラの名前変更</li> <li>○キャラ名の文字化け</li> <li>○アクティブキャラ情報の表示</li> <li>○lua_closeをどこかで呼ぶこと ... 参考: <a href="http://karetta.jp/book-node/lua/228837">http://karetta.jp/book-node/lua/228837</a></li> </ul> 2010-04-19T00:00:00+09:00 ギターをゲット =&gt; 弾いて(歌って)みた http://dgames.jp/dan/permalink/20100415_3 ギターをゲット=&gt;弾いて(歌って)みた先日実家にあったギターをもらってきた。正月に中古で買ったもので、そのときは父が使うからと持って来れなかったんだけど、改めて頼んでみたらあっさりと譲ってくれた。ずっと放置されたままで一度も弾いていなかったようだし。... <h2>ギターをゲット =&gt; 弾いて(歌って)みた</h2> <p><img src="http://dgames.jp/dan/images/20100405.png" alt="20100405.png"></p> <p>先日実家にあったギターをもらってきた。 正月に中古で買ったもので、そのときは父が使うからと持って来れなかったんだけど、改めて頼んでみたらあっさりと譲ってくれた。ずっと放置されたままで一度も弾いていなかったようだし。</p> <p>たしかセミアコは1本持ってるはずなんだけど、まったくと言っていいほど触ってなくて、どこにあるのかさえわからない状態。 アコースティックギターを持つのは初めてなのでうれしい。 さっそくカポも買った。</p> <p>ギター歴はというと、16〜19歳のとき(プログラミングを覚えたのとほぼ同じ時期。毎日とにかく暇だったわけだ)実家にあったクラシックギーターを独学で少し触ってたくらいで、たぶんちゃんと真面目に一ヶ月間練習したひとくらいの実力なんじゃないかと……。 一部のローコードとFだけはなんとか押さえられるんだけど、それ以外はNG。</p> <p>歌の練習も続けてるし、なんとかギターも一緒に練習できるといいなと。 歌を歌うときにギターがあると歌いやすい!って感じになれると理想的。</p> <p>今は歌いながら弾くと、お互いに足を引っ張り合いギターも歌もどっちも中半端な形になる。</p> <p>これから練習するにあたりとりあえず今の実力を記録として貼付けておく。BUMPの弾き語り(?)。</p> <ul> <li><a href="http://dgames.jp/dan/voices/20100405.mp3">先日、最初に弾いたときのmp3</a> ... ガラスのブルース</li> <li><a href="http://dgames.jp/dan/voices/20100415.mp3">さっき録音したmp3</a> ... かさぶたぶたぶ</li> </ul> <p>今日録ったやつは特にひどいけど、これは決して録音状況が悪いわけではない(dm7, d7が鬼門)。</p> 2010-04-15T00:00:00+09:00 iPhone RPG開発ログ5 http://dgames.jp/dan/permalink/20100415_2 メイン画面○キャラアイコンの表示△メインパネルの表示アクティブキャラ情報の表示キャラの名前変更lua_closeをどこかで呼ぶこと...参考:http://karetta.jp/book-node/lua/228837... <h2>iPhone RPG開発ログ5</h2> <p>あと10回このような開発ログを残すことができれば、そのときはアプリがある程度の形になっているはず、と信じて進んでゆく。</p> <p>キャラデータを引っ張ってきて、そのキャラ用のアイコンを表示するように。 と、ここで男女を表すパラメータが存在してないことに気づく。性別を表すパラメータの変数名は何がいいんだろ。</p> <p>その他メイン画面を作成中。</p> <h3>todo</h3> <ul> <li>メイン画面<ul> <li>○キャラアイコンの表示</li> <li>△メインパネルの表示</li> <li>アクティブキャラ情報の表示</li> </ul></li> <li>キャラの名前変更</li> <li>lua_closeをどこかで呼ぶこと ... 参考: <a href="http://karetta.jp/book-node/lua/228837">http://karetta.jp/book-node/lua/228837</a></li> </ul> 2010-04-15T00:00:00+09:00 続・ミックスボイス http://dgames.jp/dan/permalink/20100415 続・ミックスボイス以前ミックスボイスの存在を知ったことについて書いたけど、すっかりこの発声方法が気に入ってしまった。気に入ったどころか年が明けてからこっち、中音域以上はミックスボイスしか出せなくなった。意識し始めてから2ヶ月くらいではっきり変わったと思う。... <h2>続・ミックスボイス</h2> <p>以前<a href="http://dgames.jp/dan/permalink/20091119_00">ミックスボイスの存在を知ったこと</a>について書いたけど、すっかりこの発声方法が気に入ってしまった。</p> <p>気に入ったどころか年が明けてからこっち、中音域以上はミックスボイスしか出せなくなった。 意識し始めてから2ヶ月くらいではっきり変わったと思う。 高音域が以前よりも少し楽に出せるようになり、声質もかつてより好きになった。 これが正しいミックスボイスかどうかはわからないけどね。</p> <p>もともとの自分の声はあんまり好きじゃなかった。 ややざらざらしたものに変わったと思う。あこがれのハスキーボイスに少し近づいたんじゃないかと。 今まではハスキーとは対極だった、、、と思う。</p> <p>話し声まで変わってしまった。 意外なことに中音域の歌声がすごく変わった。 自分の印象ではもとの声に金属音を混ぜたような感じ。 自分が発声したときに感じる印象と、それを客観的に聞いたときの印象は違うものだろうけど。</p> <p>他人にはわからないくらいの違いだとは思う。 自分では声の出方が変わったことをはっきり感じ取れるんだけど。</p> <p>しかし今の声はわざとらしい声の出し方になっている。 人をイラっとさせるんじゃないかと思う。 別に歌がうまくなったわけではないし。 というわけで今は自然に聞こえるよう練習中。</p> 2010-04-15T00:00:00+09:00 iPhone RPG開発ログ http://dgames.jp/dan/permalink/20100414 ○ゲームの初期化(セーブデータのリセット)メイン画面○キャラアイコンの表示メインパネルの表示アクティブキャラ情報の表示キャラの名前変更lua_closeをどこかで呼ぶこと...参考:http://karetta.jp/book-node/lua/22883... <h2>iPhone RPG開発ログ</h2> <p>既存の問題点を修正しつつ、Luaベースのモデルからキャラクター数を取得してその数だけメイン画面にキャラクターアイコンを表示。 これで一応モデル、コントローラ、ビューの一連の流れが動作したことになる。</p> <h3>todo</h3> <ul> <li>○ゲームの初期化(セーブデータのリセット)</li> <li>メイン画面<ul> <li>○キャラアイコンの表示</li> <li>メインパネルの表示</li> <li>アクティブキャラ情報の表示</li> </ul></li> <li>キャラの名前変更</li> <li>lua_closeをどこかで呼ぶこと ... 参考: <a href="http://karetta.jp/book-node/lua/228837">http://karetta.jp/book-node/lua/228837</a></li> </ul> 2010-04-14T00:00:00+09:00 iPhone RPG開発ログ http://dgames.jp/dan/permalink/20100412 ゲームの初期化(セーブデータのリセット)メイン画面キャラアイコンの表示メインパネルの表示アクティブキャラ情報の表示キャラの名前変更○Cのラッパーを多様な関数に対させるlua_closeをどこかで呼ぶこと...参考:http://karetta.jp/boo... <h2>iPhone RPG開発ログ</h2> <p>開発環境のバージョンアップ。xcode_3.2.2_and_iphone_sdk_3.2_finalを入れた。</p> <p>Lua関数をラッピングする仕組みを強化。文字列型も返せるようになった。 あとは必要な型が増えたらハッシュに追加すればいい。</p> <p>C APIジェネレータがやってることの割に長いけどとりあえず良いか。 少し使えばまた手を入れることになるだろうから、そのあと徐々にコードをきれいにしていこう。</p> <p>ファイル構成を整理。</p> <p>開発環境の準備が整ってきたので、ゲームの内容を実装する。何から手を付けたものか。</p> <h3>todo</h3> <ul> <li>ゲームの初期化(セーブデータのリセット)</li> <li>メイン画面<ul> <li>キャラアイコンの表示</li> <li>メインパネルの表示</li> <li>アクティブキャラ情報の表示</li> </ul></li> <li>キャラの名前変更</li> </ul> <ul> <li>○Cのラッパーを多様な関数に対させる</li> <li>lua_closeをどこかで呼ぶこと ... 参考: <a href="http://karetta.jp/book-node/lua/228837">http://karetta.jp/book-node/lua/228837</a></li> </ul> 2010-04-12T00:00:00+09:00 iPhone RPG開発ログ http://dgames.jp/dan/permalink/20100411 ○LuaからCにテーブルを返す方法Cのラッパーを多様な関数に対させる開発環境のバージョンアップlua_closeをどこかで呼ぶこと...参考:http://karetta.jp/book-node/lua/228837... <h2>iPhone RPG開発ログ</h2> <p>モデルAPIの洗い出し。</p> <ul> <li>active_character ... アクティブキャラクターの取得</li> <li>party_characters ... パーティメンバーのリスト</li> <li>characters ... 全メンバーのリスト</li> </ul> <p>ん、ちょっと待てよ。LuaのメソッドをCの関数として一対一に関連づけていこうと思っていたけど、構造体を返すような場合はどうしたらいいんだろ。Luaから直接構造体は返せないよな。Luaのテーブルの内容をC構造体に代入するような仕組みは作れるだろうか。</p> <p>Luaの関数でテーブルを返した場合、テーブルはスタックに積まれ値はキーをもとに取り出すことができる。</p> <p>Luaで定義した関数のCのラッパーを自動生成する仕組みができた。 テーブルを返す関数に関しては、手動でラッパーを作成することにする。この形は多くはないはず。</p> <h3>todo</h3> <ul> <li>○LuaからCにテーブルを返す方法</li> <li>Cのラッパーを多様な関数に対させる</li> <li>開発環境のバージョンアップ</li> <li>lua_closeをどこかで呼ぶこと ... 参考: <a href="http://karetta.jp/book-node/lua/228837">http://karetta.jp/book-node/lua/228837</a></li> </ul> 2010-04-11T00:00:00+09:00 iPhone RPG開発ログ http://dgames.jp/dan/permalink/20100408 Luaのスクリプトから自動的にAPIとなるC関数を生成する仕組み必要なAPIをいくつか洗い出してみる... <h2>iPhone RPG開発ログ</h2> <p>Luaで実装するモデルをターミナルで動作確認する環境ができた。 同じソースをXcodeでビルドし実行できることも確認した。</p> <p>モデルはCのAPIとしてObjective-Cに対して提供する。 モデルの内部ではLuaが使われているが、Objective-Cで実装されるコントローラからはLuaの存在は見えない。</p> <p>モデルを実行するのに毎回Xcodeでコンパイル/実行をするのは面倒なので、 CのAPIをgccでビルドして実行する仕組みを作った。 ターミナル内でソースを書いて、その場で随時実行しながら中身を作り込んでいく。 iPhoneのような特殊なデバイスと開発環境を相手にするときは、ソース編集から実行確認までのサイクルを短くする環境を構築することが開発効率を高めるキモになる。この辺りはコンシュマーゲームの開発と全く同じ。</p> <p>Luaスクリプトはファイルとして読み込むんじゃなくて、Cの文字列として生成して、Cソースに埋め込むようにした。</p> <p>今の開発環境には4つの言語が混在している。</p> <ul> <li>Objective-C …… ビューとコントローラ</li> <li>C …… モデルAPI</li> <li>Lua …… モデルの実装</li> <li>Ruby …… RakefileやC APIの自動生成</li> </ul> <p>同時にvimのバッファに乗っているが特に違和感はない。 Webだってサーバーサイドのメイン言語とは別にSQLとかJavaScriptとかHTMLとかCSSとかたくさん使うか。</p> <h3>todo</h3> <ul> <li>Luaのスクリプトから自動的にAPIとなるC関数を生成する仕組み</li> <li>必要なAPIをいくつか洗い出してみる</li> </ul> 2010-04-08T00:00:00+09:00 第1回ふつうのHaskellプログラミング読書会 http://dgames.jp/dan/permalink/20100405 第1回ふつうのHaskellプログラミング読書会4/3に第1回ふつうのHaskellプログラミング読書会やりました!懇親会ともに楽しかった。参加者17名。思ったよりたくさん集まった。音読するって言ったら最初「えっ」って言われたけど、実際やってみてまずまずの... <h2>第1回ふつうのHaskellプログラミング読書会</h2> <p>4/3に<a href="http://groups.google.co.jp/group/yhprogramming/web/haskell">第1回ふつうのHaskellプログラミング読書会</a>やりました!</p> <p>懇親会ともに楽しかった。 参加者17名。思ったよりたくさん集まった。</p> <div class="amazon"> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=bilbo-22&o=9&p=8&l=as1&asins=4797336021&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </div> <p>音読するって言ったら最初「えっ」って言われたけど、 実際やってみてまずまずの評判だったと思う。</p> <p>次回は5/8です。</p> <ul> <li><a href="http://groups.google.co.jp/group/yhprogramming/web/haskell-2">第2回ふつうのHaskellプログラミング読書会</a></li> </ul> 2010-04-05T00:00:00+09:00 少年サッカーの審判講習会に参加してきた http://dgames.jp/dan/permalink/20100331 KEEP道具は最低限足りていた事前にルールブックや市販の参考書を読んだルールプックと同時に配布されたDVDも観た(全部じゃないけど)PROBLEM経験不足副審の判定を見逃したフリーキックのときの距離の判断がはっきりできなかった終了時の挨拶がぐだぐだになった... <h2>少年サッカーの審判講習会に参加してきた</h2> <p>昨年の春から末っ子が地元のサッカークラブに入部したと同時に、オレ自身も少年サッカーのコーチとして息子と一緒に練習に参加している。</p> <p>コーチになるとほぼ同時に4級審判の資格もとらされた。資格自体は講習を半日受ければ誰でもとれるくらい簡単なものだ。</p> <p>が、資格を持っていても実際にゲームの審判をやるとなるとこれがたいそう難しい。 一緒に審判資格を取った他の3人のコーチたちは皆サッカー経験者なのだけど、オレだけはサッカー未経験者。 数年前から職場のメンバーと一緒にフットサルをやってはいたけど、それくらいの経験だけではとてもサッカーのルールを把握できないし、ましてや審判なんて……。</p> <p>これまで副審は数回だけやったけど、主審の経験はなし。というかやれと言われてもできない。</p> <p>とそんなさなか、ちょうど少年サッカーの審判技術向上を目的とした講習会があり、チームから「参加してこい」との指令がきたので行ってきた。 講習では実際に6年生の試合の審判(主審、副審ともに)を努める機会があるとの事前連絡を受けていたので、まずは必要な道具をそろえるところから始めた。</p> <h3>少年サッカーの審判が用意すべき道具</h3> <div class="amazon"> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=bilbo-22&o=9&p=8&l=as1&asins=B000BJY3XK&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </div> <p>既に持っていたサッカー審判用の用具は、</p> <ol> <li>審判服 . チームから上下および黒のストッキングが支給済み</li> <li>ワッペン . 資格取得時に支給された</li> <li>ルールブック. 資格取得時に支給された</li> </ol> <p>だけだった。</p> <p>他に必要なグッズをWebで調べ、それぞれ当日までに調達した。</p> <ol> <li>警告・退場用のカード . Amazonで購入</li> <li>記録用紙と用紙ケース、鉛筆 . Amazonで購入</li> <li>トス用のコイン . Amazonで購入</li> <li>審判手帳 . Amazonで購入</li> <li>ホイッスル . 近所のホームセンター(島忠)で購入。160円</li> <li>時計 . Amazonで購入</li> </ol> <p>上の1〜4は <a href="http://www.amazon.co.jp/o/ASIN/B000BJY3XK/bilbo-22">アディダス レフリーセット2</a> でまとめて購入。時計は <a href="http://www.amazon.co.jp/o/ASIN/B000LP1GFC/bilbo-22">カシオの腕時計</a> が3980円と安かったので購入。</p> <h3>その他の道具</h3> <p>その他、場合によっては以下のものもあった方がいいらしい。</p> <ol> <li>予備のホイッスル(隣のゲームの審判と音を変えるため)</li> <li>予備の時計</li> <li>フラッグ</li> </ol> <p>講習では時計は最低2つ、できれば3つ持った方がいいと言われた。 当然ながら副審も時間計るのね。今まで時計も持ってなかったよ……。</p> <h3>初めての主審……</h3> <p>1時間ほど一般的な注意事項について室内で説明を受けた後、いきなり実践。 数名の参加者のうち、主審の経験がないのはオレだけだったようだが、 ある試合のハーフ(20分)の主審を務めた。</p> <p>想像した通り難しかった。まず段取りがよくわからないし、ゲーム中の位置取りも難しい。それと同時にファールの判定がよくわからず、あと副審がタッチラインを割った判定を下したのを一度見逃してしまったらしい。</p> <p>ゲーム後、指導員の方に具体的にまずかった点を指摘してもらう。非常に良い経験になった。場数を踏むのが重要とのことで(そりゃそうだろう)、こういう機会があったのは個人的にタイミングが良かった。ルールについても理解が曖昧なところが多々あるので、そこはちゃんと自分で勉強しないとね。</p> <p>しかし公式戦の主審はまだ到底無理だな……。</p> <h3>ふりかえり</h3> <h4>KEEP</h4> <ul> <li>道具は最低限足りていた</li> <li>事前にルールブックや市販の参考書を読んだ</li> <li>ルールプックと同時に配布されたDVDも観た(全部じゃないけど)</li> </ul> <h4>PROBLEM</h4> <ul> <li>経験不足</li> <li>副審の判定を見逃した</li> <li>フリーキックのときの距離の判断がはっきりできなかった</li> <li>終了時の挨拶がぐだぐだになった</li> <li>主審時の移動範囲が狭かった</li> </ul> <h4>TRY</h4> <ul> <li>主審のときもっと近くでプレーを見るように</li> <li>予備の時計とホイッスルを用意する</li> <li>日頃の練習で積極的に審判の練習を意識する</li> <li>日頃からゲームの審判に関心を持つ</li> <li>フリーキックのときの距離の判断はボールの位置から歩いて測る。事前に確認しておく</li> <li>ルールをもっと詳しく理解しておく</li> <li> <a href="http://www.amazon.co.jp/o/ASIN/4780407117/bilbo-22">この本</a> を読んでおく</li> </ul> 2010-03-31T00:00:00+09:00