Jewel-mmo開発日記

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

とりあえずネット環境復旧

新しいモデムが届いた。

サーバーPCはまだ。壊れてないことを祈る。

2007-07-30

流行ってる

http://sho.tdiary.net/20070730.html#c01

でもたださんは雷じゃないみたい。 artonさんは雷なまか。

2007-07-30

雷が落ちた

  • ADSLモデムが焼けた
    • その先にあるルータ→ハブ→PCの安否は不明
    • モデム経由でつないである電話機の安否は未確認。電話回線も未確認
  • TVが写らなくなった。たぶんアンテナ。チューナーは無事であってほしい
  • 電気。3系統あるうちの1系統が死んでいる
  • ガス湯沸かし器が使えない。電気が死んでいるせいか、またはこれがショートしているのだろう

前に落ちたときはやっぱりADSLモデムが死んで、その先のルータが半分壊れた。 ネット環境が復旧できるまでしばらくかかりそう。

2007-07-29

セミの幼虫

公園で地面から足だけ出ている幼虫。引っかかっていたようで掘り出して家に持ち帰ってきた。画像の説明画像の説明

2007-07-28

[Bilbo]そこそこ動くようになった

職場の作業ログ、以前はtDiary、春まではBitChannelを改造して使っていた。 今回はいい機会なので自作ブログシステムのBilboを導入してみた。 もうだいたい動く状態だったんだけど、多少手を入れてまずまず使えるようになった。現在コアは81行だったかな。100行以内という縛りは守られている。

少しだけ手を入たけど、コアの実装はだいぶ安定している。

必要な機能のほとんどはプラグインによって実装するというコンセプト。ちっちゃくてシンプルなコアがあって、ほしい機能は自分でさくっと付け足す。例えばエントリの頭に日付を表示したければ次のようなプラグインを書く。

# showdate.rb
require 'date'
class Entry
  def date
    if m = /\A(\d\d\d\d)(\d\d)(\d\d)/.match(label)
      Date.new(m[1].to_i, m[2].to_i, m[3].to_i)
    end
  end
end

Plugin.add_hook(:before_entry) {|entry|
  %Q!<div class="date">#{ entry.date }</div>!
}

Entryは記事を抽象化したクラス。labelは記事の名前を示す"20070727"のような文字列。Plugin.add_hookはいくつかのエントリポイントにhtmlの断片を挿入する。

パーマリンクを追加する例。

# permalink.rb
class Controller
  def show
    @entry = Entry.find(params[:date], :limit => 1, :complete_label => true).first
    render(:show)
  end
end

Plugin.add_hook(:after_entry) {|entry|
  %Q!<span class="permalink">#{ link_to 'permalink', :action => :show, :date => entry.label }</span>!
}

コントローラにアクションをひとつのエントリを描画するshowアクションを追加しちゃう。 書き方がRailsに似てるけどRailsじゃないよ。cgi.rbで動かしているけどでもコアはcgi.rbに依存していない。

  • Entry.findはコアで定義しているメソッドで記事を返す
  • render(:show)はviews/show.rhtmlを呼び出す
  • link_toもRails風に定義したものを用意しているだけ

cgiに依存してないってのはこんなindex.cgiをコアとは別に用意して動かしてるから。

#!/usr/bin/env ruby
require 'cgi'

def params
  @params ||= CGI.new.params.keys.inject({}) {|t, k| t[k.to_sym] = CGI.new.params[k][0]; t }
end

def cgi_out
  CGI.new.out do
    begin
      yield
    rescue Exception
      $!.to_html
    end
  end
end

cgi_out do
  load './bilborc'
  setup_environment
  bilbo_context()
end

実装を小さくするのは設計とアイデアだなと思う。あと局所的なRubyのテクニックも必要かな。いくら時間をかけてもうまく出来るもんじゃない。集中してよく考えて、あとプリントアウトしたソースをいつも持ち歩いてペンで添削を繰り返す(A4用紙の印刷するのには100行がぴったり)。そんな中から設計のアイデアが生まれてくる。最近はもっぱらこんな開発スタイル。

2007-07-28

ヘレン・ケラー (ポプラ社文庫—伝記文庫)(山口 正重)

ヘレン・ケラー (ポプラ社文庫—伝記文庫)(山口 正重)

子供用に購入。が、面白くて自分が一気に読んでしまった。

生まれてまもなく病気で視力と聴力を失ってしまうヘレン。苦難を乗り越えやがてはハーバード大の厳しい入試への挑戦……。人間の底力を感じさせ、そして考えさせられる。

2007-07-27

[栽培日誌]トマト豊作

一本の木からの収穫量が多い。 今朝はトマトが10個取れた。一本から10〜20個取れる。

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

2007-07-27

ONE OUTS 1 (1)(甲斐谷 忍)

ONE OUTS 1 (1)(甲斐谷 忍)

去年読んだ漫画で最も面白かったもの。2006年ナンバーワン。 職場で読んだメンバー全員がはまったので人を選ばないと思うよ。

2007-07-24

200分の1の法則

今朝電車の中で考えていたことを思い出しました。 「セレンディピティ」とはちょっと違うかも知れないけど、今朝も奇妙な偶然について考えていました。

こんな話を聞いたことがあります。

  • 車を運転していて200回ヒヤっとする目にあうと1回は事故になる
  • 自分の意見をインターネットで公開すると200人に1人くらいの人が感想をくれる

電車の中でいろいろ思いをめぐらしているうちに、別々のところで聞いたこの2つの話がつながりました。

これは「200分の1の法則」だ!と。 日常で特にアクションを起こさずにいれば、一生出会うことがないかもしれないことも、 意識的に行動を起こすことによって機会を増やせば、それなりに狙い通りの結果を得られるんじゃないかと。 (もちろん「セレンディピティ」も期待できます。) 200回くらいならがんばれば何とかできそうですよね。

たとえば200人の異性と知り合うチャンスがあれば、 その中の1人くらいは自分のことをものすごく気に入ってくんじゃないかと期待できるのでは。 出会いのチャンスを増やすことになら具体的な作戦を立てれますよね。

2007-07-24

Rubyゲーム本(2) 「セレンディピティ」

http://heydays.org/archives/2006/08/_by_22.html

essaさんのブログで「セレンディピティ」という言葉を知りました。

私はこの「セレンディピティ」が大好きです。 この言葉を知って改めて「セレンディピティ」というものを積極的に生活に取り入れてようとしている自分に気がつきました。

たとえば各種勉強会に参加する主な動機がこれです。 勉強会に行くと必ず新たな発見があります。 行く前はいつも特に勉強したい具体的な事柄もないし、めんどくさいなーと思ってしまうのですが、 実際参加してみると毎回まったく予期していなかった新たな収穫があるのです。 それは、知らない技術だったり、新しい出会いだったり。

Ruby関係の各種イベントに積極的に参加したいと思うのも、この予期せぬ幸運を求めているからです。 私の場合、具体的にはこんなことです。

Rubyを良く知らないけど、なんかすごそうだからとにかくイベントに参加しよう
↓
るびまの話を小耳にはさみ、デザインで立ち上げに参加
↓
ドサクサにまぎれてかねてから書きたかった初心者向け記事を書く(←金星)
↓
記事を書いたことをブログのトップに張ってアピール
↓
Rubyゲーム本の執筆依頼が来る
↓
書籍の執筆実績をさりげなく目に付くところに(←いまここ)
↓
新たな可能性!?

これらアクションは「セレンディピティ」というのを意識するからこそチャレンジしてきたものです。 チャレンジがまた予期せぬ新たな展開をおびき寄せてくれるのです。 こうして考えてみると、この件に限らず私はいろんな分野で「セレンディピティ」が高くなるように行動しているようです。

あわせてやりたい

これとあわせて意識していることは、めぐってきたチャンスを決して逃さないということです。 これもセレンディピティと同じくらい強く意識しています。 どんなに大きな壁でもいったん乗り越えてしまえば、不思議なことにそれが自分になってしまいます。

2007-07-24

時をかける少女(アニメ)の感想(Amazonレビュー風)

時をかける少女 通常版

先日TVで初めて見ました。原作その他は見たことがありません。 見始めたらぐいぐい引き込まれて、あっという間にラストシーンに。

ひょんなことから時間をリセットする力を手に入れてしまった少女。 誰にでもある学校での些細な問題も本人にしてみれば大問題。 自分の都合のいいように時間をリセットし続けた結果、少女の周囲には人間関係の歪が生じてしまう……。

ありふれた日常と時間を飛び越える特殊能力がもたらす不思議な感じ。 壮大な物語があるわけじゃないんだけど、爽快な主人公のなんともいえない心地よさと切なさがあります。

映像のクオリティの高さ、時間軸がめちゃくちゃ飛ぶのにわかりやすくてテンポ良く展開する子気味よさ。 そして好感の持てる元気で前向きな主人公。

個人的に胸を張って「好き」といえる作品です。

2007-07-22

サイン

画像の説明

これまたmixiにも書いたけど、こっちにも。 はじめてサインというものをお願いされました。

困ったことにオレは猛烈に字が下手。 なので絵でごまかした!

ちなみにこのキャラはアクションゲームのサンプルに登場するトロルの幼生です。

2007-07-22

時をかける少女(アニメ)

時をかける少女 通常版

mixiに書いたけどこっちにも。ここなら絵が貼れるし。

テレビでやってたんだけど面白かった。久々に印象的な映画。この映画好きだ。そういえばこれ評判良かったよね。

2007-07-20

[プラポケ]パッケージデータ発掘計画

夏休み(八月初旬)に作業をやろうかと。

  • HDDを物理的に稼動中のarton pcもしくは新しいdebianに接続
  • linuxからマウントする
  • MySQLのデーターをコピー(確か毎日ダンプしてたはず。何で別のPCにコピーしてないんだ><)
  • ダンプデータからどうにかしてパッケージ定義を吸い出す

でいいのかな。あ、夏休みはスケジュール埋まってるな。スケジュール用調整か。

2007-07-17

[開発]UIが気に入らない

だいぶ形になってきたのだけどUIがなあ。まあ具体化してくるとそういうもんだよね。

2007-07-16

[栽培日誌]ひまわりが咲いた

画像の説明

2007-07-15

[栽培日誌]台風の被害はなし!?

収穫期にあるトマト、2.5mくらいにまで伸びたひまわり、受粉が始まったトウモロコシあたりは相当な被害を受けるだろうなーと思って、今朝土砂降りの雨の中しっかり支柱に固定しなおしたけど、やっぱりやられちゃうだろうなと覚悟を決めたら、なんか晴れてきたぞ……。

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

2007-07-12

書泉グランデのランキングで2位

コンピュータ書ランキングで2位となっております!

他の書店でも初速は悪くないとのことです。 ありがとうございます!

2007-07-12

Rubyゲーム本について

まだまだ自分の中で消化し切れないので思うところを7回シリーズで書いてゆきます。

--

Ruby/SDLは高速な描画能力と安定性を持っていて十分実用的であることは以前から知っていた。 これはRuby/SDLを直接触った人なら気づいていたことだと思う。 現代のパソコンならスピードだってたいした問題にならない。 グラフィカルなゲームの場合、ほとんどの負荷は映像描画にあるので Rubyレベルの負荷は心配するほど問題にならない。 だからちゃんとしたものを作ればそれなりのものができるだろうし、やればいつでもできるさ、 と思っていた。

というわけで実際にやってみた。 プロのデザイナにお願いして見栄えのいいグラフィックデータを描いてもらい、 オーソドックスなサンプルゲームを4つ実装した。

特に難しいことは何もやっていない。 Rubyの表現力を持ってすれば、従来の言語とは比べものにならないほど シンプルなサンプルソースを書けるという自信があったけど、 それはその通り実現できたと思う。

Rubyではじめるゲームプログラミング—人気の国産言語で、誰でも簡単にゲームが作れる! (I/O BOOKS)(山本 団)

やればできるというのを実際にやってみた。 ただそれだけなんだけど、今考えてみると、 潜在的なRubyの可能性をちゃんとわかりやすい形で示すことには意味があるかもしれないね。

2007-07-12

[MyGame]「異様なぐらい楽」

http://d.hatena.ne.jp/mahm/20070707/1183821896

ジュンク堂で偶然見つけて立ち読みしていたのだけど、Ruby/SDLに加えて
MyGameというライブラリを使うことで異様なぐらい楽にゲームを作れると
いう例が載っていて、とても面白かった。

いろんなところで感想が出ていますが今のところ大変好評なようです。

2007-07-11

[開発][Rails]viewでできることはviewでやる

すごーく、すごーくゆっくりなんだけど、微妙に開発が前進している。 一日ちょっとだけ実装したりしなかったり。こんな調子でもRubyとRailsのパワーのおかげで数行書いただけでも前進している感が得られるから楽しくやってゆける。

最近のマイブームはcontrollerを使わずにできるだけviewで完結させてしまうこと。このやり方はゲームデザインというかUIを決める段階ではかなり有効みたい。contorllerにアクションを実装するのはDBを書き換えるときくらい。

こうするとviewにロジックが入って複雑になってしまうのでは?と心配になるかもしれないけど、今のところはそんなことなくって、やっぱActiveRecordだと、メソッドを2,3チェインすればほとんどのものが取ってこれて、これをviewに書いちゃってもたいした問題にならない。

例えばアイテムショップだと、「買う」が選択されてDBの書き換えられる(アイテムの追加とお金の減少)前まではどのアイテムを選ぶかというUIの問題なのでここをviewだけで完結させてしまう。

  1. 「いらっしゃませー♪」と商品リスト …… view(rhtml) のみ
  2. 「はがねの剣なら1500Gになります!→買う, 買わない」 …… view(rhtml) のみ
  3. DB書き換え→ショップの先頭にリダイレクト …… ItemController#buy

悩む部分はUIだから頻繁に書き換える部分がviewに集中してくれるとすごく楽。デザイナーとの分業とかそういうのやらないわけだし、ガンガンviewに書いちゃう(といってもたいした処理ではない)方法でしばらく進めてみようと思う。最適化なんてのは必要になったときにやればいいしね!

2007-07-11

[アイデア]クエストのリスト

クエストはリストページをひとつ作って、そこでクリアフラグと詳細確認できるようにすればそれでUIが完結できる気がする。

2007-07-11

[開発][アイデア]ミニマムな完結した世界

本ブログでただ[開発]とか[アイデア]というときは Jewel-mmo に関する話。 この手の話はなんの脈絡もなく始まります。

UIデザインを中心に先日から実装を開始している(何度目のプロトタイプだ……)。だいぶ形になっているのだけど公開にするのに必要な最小構成はどんなだろう。最低限ゲームとして成り立たせるには何が必要か。

  • キャラを集めてPTを編成できる
  • モンスターと闘える
  • 目的や報酬がある
    • モンスターを倒す→アイテム、カード、お金
    • わかりやすい目的
      • →ゴーストクエスト
      • →中ボス→固定キャラ、ランダム出現のとあるモンスター
      • →ゴーストの転生カウンター
      • →?階到達

レベルデザインも最小構成からスタート。

  • クラスはノービスだけ
  • カードの最低枚数 → 1
  • モンスターの最低種類数 → 1
  • アイテムの最低種類数 → 1
2007-07-11

F.S.S.DESIGNS 2—MAMORU NAGANO’S (2)

F.S.S.DESIGNS 2—MAMORU NAGANO’S (2)(永野 護)

ずっと Jewel-mmo のオレ専用 F.S.S. パッケージを作りたい、というのがあるので購入。 しかし、これがアマゾンのランキング1位なんだ……。

2007-07-08

アマゾンのランキング

これ結構頻繁に変動するんだ。見るたびに順位が変わる(一日に何度も変わる)。昨日見たら2400位くらいですげーと思ったけど、そこから時間とともに下降している模様。ピーク時の順位はどれくらいだったのかなあ。

2007-07-08

[MyGame]MyGame 0.9.1 をリリース

MyGame 0.9.1 をリリースをリリースしました。

http://dgames.jp/ja/projects/mygame/

MyGame は Ruby で簡単にゲームを作るためのライブラリです。自分のゲーム開発の経験をもとにゲームプログラミングに必要な処理を簡単な API にまとめています。とにかく簡単に書けることを目標にしています。

MyGame 本体は小さな Ruby スクリプトにすぎません。 MyGame の中で Ruby/SDL を使っています。 MyGame は Ruby/SDL が動作する環境で動作します(テストはWindows上で行っています)。

2007-07-08

[Rails]Rails勉強会@東京に行きそびれた

エントリしようと思ってたんだけど気がついたら日付が変わって当日だった。いちおう前日までにエントリというルールだったのね><

2007-07-08

[Ruby][Rails][Bilbo]シンプルなブログシステムを開発中

前からの希望だったり、とある事情があったりで3つの構想が進行中。

  • Bilbo …… cgi.rbを使った小さなブログシステム(コアを100行以内で実装するのがコンセプト)。将来はここのシステムになる予定。一応プロトタイプが動いている。コアは75行!
  • Ent …… ERBをテンプレートとして静的なHTMLを生成するシステム。シンプルでわかりやすい実装がコンセプト
  • Pipin …… Railsによる超シンプルなブログ実装

Bilboはデザインをちゃんとすればもう一応使える状態になっている(と思う)。でも機能がほとんどないのでここのシステムに置き換えるにはいくつかのプラグインを開発しないとね。

2007-07-08

アマゾンに書影が出た!

Rubyではじめるゲームプログラミング—人気の国産言語で、誰でも簡単にゲームが作れる! (I/O BOOKS)(山本 団)

表紙が大切なのでよかったよかった。

巻末索引のキーワードに「ファイアの魔法」があるのには驚いた。「ファイアの魔法」を実装する際には是非本書を参考に。索引から「スリープの魔法」を引くこともできます。

--

本屋で実物を見てこようとさっき横浜駅の栄松堂書店に行ったら明日発売って言われた。有隣堂に行ったら置いてあった!

2007-07-07

発売中

Rubyではじめるゲームプログラミング—人気の国産言語で、誰でも簡単にゲームが作れる! (I/O BOOKS)(山本 団)

いろんなところから買うよとか買ったよとかけん本届いたよとか、嬉しい限りです。

「誰でも簡単にゲームが作れる!」というコピーは見本誌をもらったらそう書かれていてちょっと動揺しました><

2007-07-07

[プラポケ]やっぱりガーデンハーブのパッケージデータがない

こまった>< もうサーバーはたててあるんだけど。。。

2007-07-05

献本について

送付先のリストを出版社に送ったのが今週明だったので、近々到着するんじゃないかと思います。関係者の方々どうもありがとうございました。

2007-07-05

本日発売

Rubyではじめるゲームプログラミング—人気の国産言語で、誰でも簡単にゲームが作れる! (I/O BOOKS)(山本 団)

アマゾンにまだ書影画像がでていないようです。

ちなみにプログラミング未経験者が対象なので前半は最も易しいRuby(プログラミング)入門書を目指して書かれています。