Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2007-03-28

[Ruby]実行中の ruby のファイル名(例えば c:\ruby-1.8\bin\ruby.exe)を取得する方法はありますか?

IRC で教えてもらった方法で取得できました。 下記は Windows の場合の話です。

require 'dl/win32'
GMFN = Win32API.new 'kernel32', 'GetModuleFileName', %w(I P I), 'V'
path = ' ' * 1024
GMFN.call 0, path, path.size
p path.unpack("A*")

実行結果:

["C:\\ruby-1.8\\bin\\ruby.exe"]

参考:

2007-03-25

Ruby/SDL 1.3.0のWindowバイナリは調子がいい

手元で起きていた 下記 2 つの現象が発生しなくなった。

  • 1.2.0 のときは exerb で作った exe がうまく動かないことがあったのだけど、その問題がおこらない
  • 「MSVCR71.dll が見つからなかったため、(略」「msvcp71.dll が見つからなかったため、(略」と言われなくなった

それと、手元の PC だとスクリーンウィンドウにマウスカーソルを乗せたときだけ、処理速度(描画速度?)が速くなるという現象があったのだけど、それも起こらなくなってしまった。

2007-03-20

[MyGame]Linux で MyGame を動かしてみた

PC に Debian を入れて動かしてみた。 ふつうに動いた。

動作が遅かったけど、それは SDL 以前にビデオの設定をやってないからだと思う。

2007-03-20

感謝されました

http://d.hatena.ne.jp/towa7/20070309#1173441997

感謝されることなんて滅多にないので貼っておきます。

私も負けないように頑張ります!

2007-03-20

[MyGame]MyGame (Ruby/SDL) で作成したプログラムを exe 化する方法

MyGame を使った Ruby スクリプトを exe 化する手順を紹介します。

ここでは先ほど作成した hello.rb を exe にしてみます。 また、ActiveScriptRuby を使っていることを前提としています。

コマンドプロンプトにて以下を入力します。

mkexy hello.rb

このとき hello.rb が実行されるので Esc を押して終了させてください。 すると hello.exy というファイル(レシピファイル)が作成されます。

次に以下を実行します。

exerb hello.exy

これで hello.exe の完成です! ちになみに exerb コマンドを実行する前に、レシピファイル( hello.exy )の「core: cui」を「core: gui」と書き換えておくと作成した exe を実行したときに DOS 窓が開かなくなります。 (ここまではふつうの Ruby スクリプトを exe 化する手順と同じです。)

ここで 2 つほど注意点があります。 exe を実行するにはいくつのかの dll ファイルが必要です。 インストールした Ruby/SDL に含まれる dll ファイルをすべて exe と同じディレクトリにコピーしてください。 dll ファイルはダウンロードしたファイルを解凍した先の rubysdl〜ディレクトリの中の dll ディレクトリにあります。 (ここまでは Ruby/SDL を使ったスクリプトを exe 化する手順と同じです。)

またアプリケーションが使用するフォントを exe が動作するディレクトリにコピーする必要があります。 MyGame が使用するデフォルトのフォントは MyGame を解凍したディレクトリに含まれています。この fonts ディレクトリをディレクトリごと exe のあるディレクトリにコピーしてください。

画像の説明

2007-03-20

[MyGame]MyGame で "Hello World"

昨日の手順 でインストールが完了したら、さっそく実行してみましょう。

ActiveScriptRuby をインストールしているならばデスクトップに「ruby console」というショートカットができているはずです。 この「ruby console」を起動すると DOS 窓(コマンドプロンプト)が開きます。

次のように入力して Enter を押してください。

ruby -r mygame/boot -e "Font.render 'Hello World'"

640 × 480 のスクリーンウィンドウが開いて Hello World とう文字が表示されると思います。 (Esc キーを押すと終了します。)

普通は .rb ファイルを作成して、そこにプログラムのソースを書きます。

#hello.rb
require 'mygame/boot'
Font.render 'Hello World'

上記のような hello.rb を作成して、実行してみましょう。

ruby hello.rb

同じように Hello World が表示されることと思います。 ※hello.rb は DOS 窓のカレントディレクトリ(デフォルトではデスクトップ)に作成してください。

作業ディレクトリ(フォルダ)を作成して、そこに「ruby console」をコピーしておくと便利です。 作業ディレクトリに置いた「ruby console」を開くと、そこがカレントディレクトリとなります。

画像の説明 画像の説明

2007-03-19

[MyGame]mygame-20070319-rubysdl-1.3.0-mswin32-1.8.5-p12

http://dgames.jp/archive/mygame/mygame-20070319-rubysdl-1.3.0-mswin32-1.8.5-p12.zip

MyGame に Ruby/SDL の Windows バイナリ Win32's binary(ver 1.3.0) for Ruby 1.8 を同梱したものです。

ActiveScriptRuby(ruby 1.8.5 (2006-12-25 patchlevel 12) でテストしています) をインストールした後、上記 zip に含まれる install_mygame.rb を実行(通常はファイルをダブルクリック)すれば MyGame がインストールされます。 Ruby/SDL も同時にインストールされますので MyGame の開発環境はこれで準備完了です。

追記:このエントリには続きがあります。

--

あなたの ruby のバージョンを確認する方法。

$ ruby -v
# => ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]

あなたの Ruby/SDL のバージョンを確認する方法。

ruby -r sdl -e 'puts SDL::VERSION'
# => 1.3.0

あなたの MyGame のバージョンを確認する方法……。

???
2007-03-14

[るびま]Rubyist Magazine 0018 号

http://jp.rubyist.net/magazine/?0018

(ここに書くのが)遅くなりましたが出てます。

2007-03-14

[Bilbo]構想

いつもなら、こんなアイデアのメモを書くよりも、手が先走って実装し始めちゃうんだけど、例によって、コードを書く時間がないので、メモ。

bilbo は小さな日記システム。 いつの日か自分の手で書いたブログシステム(どんなに機能が少なくてもいいから)で日記を書く(公開する)のが夢なのだ。

「ビルボ」という名は、かの有名なホビット小人「フロド」のおじさんから。 小さい実装、 100 行以内でコアシステムを実装するのがコンセプト。

  • 日記のエントリはテキストファイル
    • 1 エントリにつき 1 ファイル
    • ファイルの生成・編集はサポートしない
    • lily が参考になりそう
  • つまり、ファイルをリスティングすればいいだけかな
  • テンプレートは erb かな
    • tDiary みたいにヘッダ、フッタには分けない
  • ツッコミがなければ静的な生成でよさそうだけど……
    • なにげにお気に入りのカウンタ。前日のアクセス数なら静的でもいいよね
    • あ、リンク元っているのかな……。これも静的なら楽できるのかな。 cron + AM4時メソッド
    • 新規のリンク元もちゃんと管理したいなあ。でもこれは外部の別サービスかな
  • 過去に書いた spam? のアイデアはよさそう。日本語が含まれてなかったら NG てのはどう書けばいいんだろう
  • Rails は使わないつもり
    • 単純な CGI の方が設置が楽だから
    • 単純な CGI と同じ感覚で設置できるなら Rails もありかな
    • 逆に Rails 使った方が便利とかだったらやだなあ。ここはよく考えよう
    • さくらに設置するのに簡単ならいいんだけど
    • DB は使わない。記事は svn で管理したい
    • ツッコミをお知らせするのにアクションメールとか?ツッコミはケータイに転送したいなあ
  • 記法
    • BitChannel のやつか、 Hiki のを使いたい!
    • プラグインを埋め込みやすいのがいい。というかリンクをお手軽に。エディタレベルで解決?
  • 記事のアップロードに関して(コアシステムはサポート外の部分)
    • 今より 100 倍楽に日記を書きたい
    • 記事は xyzzy で書きたい!(まだ xyzzy 使ったことないけど)
    • 記事は svn で管理したい
    • 特定のディレクトリにコミットしとけば、サーバー側で定時(9:00, 13:00, 20:00, 00:00, 04:00)に up してくれるようにする。手動更新する仕組みもほしい
    • ファイルの作成と add は自動化したい。その日の日付がファイル名
    • 毎回 ci も面倒な気がする。。。セーブをフックして ci とか FTP で転送とかできるかな
    • FTP とかでサーバーに転送するなら自動で add & ci する仕組みもほしい
    • メールで記事を書くとかもあるよね。自分にとって便利な方法を探さないと。ちょっとしたことを書くにも苦にならない方法を
    • メール。他のブログサービスにメールで記事を送って、それをインポートとか
    • メールに限らず他のブログサービスに書いた記事をインポートするのはありかも。 RSS 読めばいいかな。これで Web からも メール からも ケータイからも記事が書ける!
  • 記事の確認
    • エディタで記事を編集してるときに、F5とか押すとブラウザでプレビューみたいな
    • ローカルで HTML をジェネレートしなくても Web の API に送りつけてもいいかも。そうすればテンプレートや CSS の共有を考えなくていい
2007-03-13

[アイデア]お宝、ストック

  • ストックはお守り
    • お店で買う
    • AM4:00 に消える
    • ストックはアイテムランクの配列を生成する、みたいな感じ
  • 戦闘終了→調べる→「8個のあやしい物体を発見した。」
    • 調べる→「1つの宝箱を発見した」(小役並の頻度、木箱、金銀)
    • 調べる→「罠の種類判明」
    • 解除(解除率 95%。レアアイテム時は 85%)ミスがアツイ
  • 蝶の金細工♪
  • フロア→アイテムのランク
  • モンスターの強さ→あやしい物体の数
    • 弱……0〜2個
    • 強……15個
2007-03-13

[アイデア]カードバトル(カードゲーム、闘技場)

  • カードショップは全エリア共通
    • →コミュローカルだと不正が
  • カードバトル(カードゲーム、闘技場)
    • life -= 10
    • 1 戦毎に C を 1枚。必ず C or 売れない
    • 長く続けばカードが成長するが、敵も強くなる
  • カードバトルに勝つとボーナス
    • 成長力 UP
    • レアが出る
    • 15 勝〜レア
    • 20 勝〜SR
  • 負けるとコマンドを実行できない
  • カードゲームを中断すれば、そのときのカードを実践に使える
2007-03-13

[アイデア]ライフサイクル

実装する時間がないからアイデアばかりたまる。

  • 宿屋
    • life -= 10(金次第で 10 〜 7)
    • HP / MP 全回
    • レベルアップ(Expがあれば)
  • バトル
    • life -= 1
    • スキル, Exp
  • AM 4:00
    • life -= 10
    • 成長( or レベルアップ?)(レア 1/10 くらい)
    • HP/MP 全回
    • スキルポイント(レア or 少量)
  • コマンド
    • ステータス(アビリティ)UP
    • スキル UP
    • カード取得
    • 深部の砦は地上に戻る手間を省く→寿命(戦闘回数)の節約
2007-03-09

[アイデア]図があるので手書きメモも貼っておく

画像の説明 画像の説明 画像の説明

2007-03-08

[アイデア]コミュニティ(町)とその交流が作るゲーム性

帰りの電車(横須賀線)で大量のアイデアが。 特にアイデアを出そうとしていたわけでもないのに大漁。 今回はユーザーが作り出すコミュニティとそのコミュニティ同士の流通と連携が織り成す層が主な対象。このレイヤーは今まで具体的なアイデアが出ていなかった(漠然とはずっと考えていたり悩んでいた)ところで、今回のひらめきはとっても大きな前進かも。

メモ

  • コミュニティを作る
    • →イコール町を作る
    • 数人〜数百人でひとつのコミュ
    • ダンジョンで生活、開拓
    • どこのダンジョンで生活するかは自由
  • mixi のイメージ
    • マイミク。やり取りがないと自然に関係が消滅
    • 基本的には生活地域がコミュニティ
  • コミュニティは地域。地域定着
    • →旅人、行商人
    • コミュニケーション・流通の地理的限界
  • ダンジョンの権利
    • つまりコミュの参加権限
    • コミュニティ管理者
    • 町への入出を管理
    • のっとり
  • ダンジョンで資源をとりすぎるとダメ
    • 数人〜数十人で開拓する。ダンジョンのキャパは足を踏み入れないとわからない。資源の種類も謎
    • でもある程度モンスターを狩って進行しないと「砦」ができない
    • →バランス。
    • →移民募集スレ
    • ダンジョンの資源には長期的な限界もある
  • ダンジョンを売る
    • 専門業者。開拓者。
    • ダンジョン1本 50 億ゴールドとか
  • 人気エリア……コミュニティが集中している地域。流通が有利
  • 地方……過疎。レアな資源がメリット
  • 中小コミュはひとつの特産品に特化
    • →兜とか、その素材とか
    • 加工が専門のコミュが集まる。さまざまな独自スキルを持ったコミュが集まって大規模な生産ライン
  • 素材の生産は地方で独立
  • よりグローバルな視点。全体視点
    • 初期エリアから徐々に一方向へ進行。エリア追加

ゲーム性のレイヤー構成

  • パーティ …… 個人のパーティ
  • コミュ …… ダンジョンの攻略
  • エリア …… コミュの流通。連携、分布
  • 全体 …… 全体の生活レベル。装備品、食料(ドーピング or マイナス効果→寿命、成長)、交通(移動速度。定期便の数とか速度)

ほとんどが新しいアイデアだなあ。 よくもまあこんなことを突然思いついたものだ。 図(このメモ用紙)をここに張りたい……。

2007-03-07

復活

  • 健康ってすばらしい
  • 頭(喉)痛がないってすばらしい
  • バファリンは 1 錠(正式には 2 錠のやつ)でもよく効く。病院でもらう薬はもっと効く
2007-03-05

風邪

会社を休んだ。頭が痛くてなにもやる気がしない。 やらなきゃいけないことはたくさんあるのだけど。 この頭痛はやる気を下げて安静にさせるための、人間の機能だろうか……。

布団に入ってばかりも暇だし、DSでもやろうかと思うけど、やっぱり頭が痛くてやる気がでない。

でも暇なので「リファレンスマニュアル刷新計画」を co してみた。 PCを布団に持ち込もう。

こういうときだけ寝室にテレビがほしい。 でも寝室にテレビを置いたら負けなのだ。

2007-03-03

[MyGame]キーワード引数を導入

プリミティブクラスの API をキーワード引数っぽく変更。 内部的にはかなり大きな変更になってしまった。

これまでは、例えば画像クラスを作る場合、以下のように new の引数でスクリーン座標を渡すことができた。

image = Image.new(filename, x, y)

x, y は省略できる。 でもインスタンス生成時には x, y 以外のいろんなパラメータを渡したいので、 new の引数が一部の属性に固定されているのは辛い。

今回の仕様変更で、次のような書き方が可能になった。

image = Image.new(filename, :x => x, :y => y)
image = Image.new(filename, :alpha => 128, scale => 2.0, angle => 90)

オプションはこのようにハッシュを使って渡す。 フォントの場合は第 1 引数が文字列で、その後ろにオプションを渡す。

font = Font.new("Hello", :size => 20, :color => [255, 0, 0])

テストプログラムをいろいろ書いてみたが、やっぱりこのほうが便利なので、たぶんこれを採用する。

2007-03-02

頂いたコメント

先日こんなコメントを頂いていました。 でも残念なことにスパムとみなされて見えなくなっていました。 たぶん私の設定がいい加減なんです。ごめんなさい。

ここで聞くのは如何なものかと自分でも思うけど・・・。
プログラミングについてはまったくの初心者なのですがRubyはプロ
グラミングを 始めるのに手をつけやすいものなんでしょうか?
C言語とか・・・見る限り挫折してしまいそうで怖いもので・・・。

Ruby は初心者にとって手をつけやすいか、という質問ですね。 これははっきりとお答えできないんですが、私は今のところ、 Ruby は初心者に扱いやすいと考えています。 Ruby は C 言語よりはるかに柔軟な記述ができます。 最初は簡単な機能をだけを割り切って使っていればスムーズに慣れ親しむことができると思います。

ただ心配なこともあります。次のような点です。

  • Windows で Ruby を動かそうとした場合、たくさんの方法があるのでどれを選べばよいかわからない
  • いろんな事ができる半面、 C 言語などの低級な言語と比べると仕様が大きい
    • →機能が多すぎてなにから学べばいいかとまどうかもしれません
    • →書籍では「たのしい Ruby」がおすすめです
  • Ruby の周辺には Unix 文化が多い
    • →私は Unix を知らなかったので何かと苦労があった気がします。でも Ruby を学ぶうちに Unix のすばらしい文化を知ることができました

結局のところ私は Ruby が大好きです! なので Ruby をおすすめします! Ruby は楽しいですよ。

2007-03-01

Ruby/SDL 1.3.0 出てました。

今頃気づきました。

2007-03-01

[MyGame]mygame/boot を使ったときのスクリーンサイズ

mygame/boot を使ったときのスクリーンサイズは640×480になるのだけど、これを変更するインターフェースがほしい。 以下のような既存の記述方法は残す形。ここに何かを足す形。

require 'mygame/boot'
main_loop do
end
2007-03-01

[MyGame]MyGame をリリースしよう

MyGame をリリースしたい。 何が必要かな。

  • サンプルゲームを作る
  • ドキュメントを書く
  • MyGame のページ にサンプルゲームの SS を貼る
  • MyGameSample を修正
  • MyGame のロゴがほしい
  • ruby-list にアナウンス

タスクがいっぱいだ。