Jewel-mmo開発日記

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

[開発ログ][アイデア]魔法、 PK 考察

魔法について考えている。 魔法使いは最強で、戦士 100 も一人で倒してしまうようなものが好みなのだが、 一般職として魔法使いを使いたいという要望が予想以上に多いようなので、物理攻撃の代わりになる魔法を検討中。

PK 問題も未だ解決していなかった。 後から PK システムを追加することに苦労したくないので、はじめから基本システムに組み込んでおく。 治安を守るためにめっちゃ強い守衛を置いて、バランスを取ろうかと。『守衛のスペルカード』を使うとそのキャラクタはとてつもなく強くなる。ただし、自分の管轄するエリアで自キャラにしか使うことができない。守衛と化したキャラはそのエリアから出ることはできずレベルも上がらない。

2005-02-27

[ゲーム論]ユーフォーキャッチャーにお金使いすぎた

家族で買い物に行った際、 30 分で4千円ほど使ってしまった。あの手のゲームは結構好きでよくやるのだけど、今回の消費は多すぎ。収穫はポケモン 2 匹。

しかしこの百円玉を次々と投入してしまう心理を dGames のゲームの課金にうまいこと使えないものだろうか。

2005-02-27

[家族]まつもとのさんの家族って

誕生日多くない?もちろん気のせいだろうけど。

誕生日を祝おうとする気持ちの違いだろうか。

2005-02-26

[開発ログ]戦闘システムに着手

そろそろ戦闘システムを考えようか。これが決まらないとデータベースの作りが決まらない。いい加減なもので、こういう重要なシステムもそのときの思いつきでいいかなと思っている。まあ基本はどう転んでも Wiz なんだし。

それとは別に乱数ネタでゲーム論を一本書きたい。このネタを今回のゲームデザインに活かせるといい。

2005-02-25

[Ruby]Rails に挑戦。

今日は一日 Rails をやる。

emerge rails

これでインストールは完了したのだろうか。

--

るびまの記事に沿って軽く一通り試してみる。

記事通りに動かすことはできたが、ほとんど理解出来なかった。

2005-02-25

[パソコン]vi すげえ

ViIMproved‐Vim完全バイブル(Steve Oualline) 使い始めてから数日が経ち、まあなんとかものになりそうなので、手元の WZ エディターを削除。 インストール CD はどっかいっちゃたのでもう元には戻れない。さようなら。

この本を読みながら練習中。

2005-02-25

[プログラミング]初心者向け新言語 kRuby 案

Ruby を簡単にしたかんたん Ruby はどうか。

先日も試したが Ruby の表現力と柔軟性(と goto )があれば HSP 風のコードだって書けてしまう。

Ruby の中から初心者に向いている機能だけを厳選して新言語を作る。新言語といっても処理系は Ruby そのものを使うので、kRuby は制限された Ruby の仕様と、サンプル集と、初心者向けライブラリからなる。

とか考えていた。

2005-02-24

[開発ログ]アイデアを具体化する時期かな

考えているだけではなにもできないのでそろそろ mmo サーバー・クライアント本体の実装に着手する。これまでのアイデアを具体化すべく紙に書きながらまとめていく。紙に書くのはいい。自分の場合は字と図と絵が入り混じった、殴り書きの仕様書を書くのでやっぱり紙は便利。小一時間もあれば一本のゲームの概要と基本コンセプトが書ける。これができればあとは作りながら細部を詰める作業となる。紙に書いたメモはあとで Wiki にまとめておこう。

前にも同じようなことを書いているが、そのときは実装まで進まなかったようだ。今回は全体をかなり小さなシステムに収める予定。

今はアイデアや仕様を紙に書き出している段階。さすがにMMORPGだけあって仕様のボリュームが大きく、小一時間ではまとまらない。過去のアイデアを読み返しながら、いろいろイメージしたり。ちなみにゲームデザインにはそのときの気分や思い付きが大きく影響する。集中してそのとき頭に浮かんできたイメージを一気に紙に書き留める感じ。この手のアイデアなら即興でいくらでも作り出すことができるから、自分の場合アイデアの出し惜しみとかは考えたことがない。ここにもどんどん書いてしまう。まあ傾向はどれもだいたい同じなんだけど。

前にも書いたが、むらさまは本体に大してかなり大きな意味を持つようにする予定。人形にはそれぞれ一枚のカードを割り当てることができる。するとカードはスタンドとかペルソナみたいな感じで人形から使えるようになるとか。カードの種類によってはパラメータが弱くても特殊能力があったり。うん面白そうだ。

飽きもせず一年以上もこのプロジェクトを続けている自分に我ながら感心。

2005-02-24

[ゲーム論]囲碁

自分がゲームデザインをするときは、しばしば囲碁を意識する。自分の中では囲碁は究極のゲームに位置づけられている。

晩年、パソコンの勉強がしんどくなってきたら、囲碁の勉強をしようか。

そのころでもコンピュータはとても人間にかなわない、というようにあってほしい。

2005-02-23

[開発ログ]BitChannel を使う

BitChannel のインストールに成功。とてもかっこいい。 Gentoo on coLinux で動かすとよく刺さる。原因不明。

青木さんもかっこいい。 BitChannel のポリシーとか。

--

るびまを読んで O/R マッピングツールなるものを知る。Active Record を使うことになりそう。

--

RubyOnRails 。るびまを見る限りどうやら難しいものではないようだ。 チュートリアルを兼ねてむらさまを RubyOnRails に乗せてみるという方針でよさそう。

2005-02-18

[開発ログ]Racc 修得度 30%

Racc はいまの自分に短期的に習得出来る上限を 100% とすると現状で 30% ほどマスターした。もともとは HSP のコード生成に使おうとはじめたものだったが、 HSP を使うのをやめることになりそうなので Racc の勉強はとりあえず、この辺にしておく。

うーむ、もうちょっと書きたいことがあるが、いまのキー配列だと Firefox 上で文章を書くのがかなり困難なので、この辺で。

2005-02-18

[アイデア]ハッカー専用ゲーム

ルビードアイランドはハッカー専用のゲームです。

インターフェースは全てシェル上のコマンドとして提供されます。

ルビードアイランドでは、あらゆる操作を効率よく自動化する能力、キャラを操作する優秀なアルゴリズムの開発力、リアルタイムに進行する展開に対応するための迅速なスクリプティング能力が求められます。 ときには強力な演算能力を備えたハードウェア環境がゲームプレイを有利にすることでしょう。

バージョンアップは次のようにして行ってください。

cvs up

--

クライアントのコアは GUI を含まない単独のプロセスにする予定なので、このようなことも可能。 というより、こういうことができる作りにしておくべきだ。

GUI はコアがはき出すログを参照して動けばいい。

ハッカーというゲーム上のジョブを用意するのもいい。ハッカーはいわば魔法使い。ハッカーの作った魔法(スクリプト)を一般ユーザが購入して使う。

とか。 emerge のログが美しいので、こっちにもかっこいい CUI のインターフェースがほしいなと考えているうちに思いついたこと。

2005-02-17

[雑記]http://i.loveruby.net/

最近 racc に悩まされ続けていたせいか、昨日の夢に racc が出てきました。その次に青木さんまで夢に出てきました。これまでの経験上、夢に出てくるくらい一生懸命取り組んだものはだいたいものにできるようです。というわけで青木さんはきっとものにできるでしょう。こんばんは、 dan5 です。

冗談はさておき、カリスマハッカーのホームページでハードとかソフトが紹介されてるのはいいですね。なんだかアルファマシンほしくなってしまいました。

じゃなくて、ビットチャンネルを勉強しようと思ってサイト見てただけです。でも、今日はもう遅いので寝ます。それでは。

2005-02-17

[パソコン]キー配置換え

画像の説明

; → Enter に挑戦。ついでにいろいろ変えてみる。キーの配置を変えるのは今回が初めて。やってみると結構面白い。

とりあえず、こんな感じ。 - に変えてある部分はキーを取り外した。

画像の説明

最初、カーソルキーも外したのだが、いろいろ無理があったので戻した。

--

キー配列の変更と vi への移行のダブルパンチで生産性が著しく低下中。

仕事が一向に進まない。

使い慣れた開発環境の大切さに気づく。逆に言えばこの辺をいいものに改善できれば生産性の向上が期待できるということか。

ちなみに ; → Enter はかなりよい。

2005-02-16

[開発ログ] Gentoo 環境いろいろ設定( zsh 編)

passwd
/etc/init.d/sshd start
# sshd 自動起動を設定
rc-update add sshd default

タイムゾーンの設定。

ln -sf /usr/share/zopeinfo/Japan /etc/localtime

時間は狂ったままだ。うーむ。

以降は putty で。

Gentoo 公式に書いてあったので以下を実行。

emerge --sync
env-update && source /etc/profile
(もしvncを使いたいなら)
emerge tightvnc

とりあえず以下を実行してみた。

emerge --update world

長い。途中で止まる。止まる原因は取り除く。

emerge -C mozilla-firefox
emerge -C x11-base
emerge -C xorg-x11
emerge -C xfce4-base
emerge -C xmms

まだまだ終わる気配がないので、続きは夜にしよう。

emerge ruby
emerge apache

そうだ、この際いろいろ移行してしまおう。エディタは vi を使うことにしよう。 どうせ移行するなら早い方がいいに決まっている。 Subversion もいつか使いたいと思っていた。なら今日からそうしよう。 そうそう zsh というのを聞いたことがある。どうやらすごいらしい。今後は zsh を使うことにしよう。

  • vi
  • subversion
  • zsh

これらを覚えよう。

zsh

まずはシェルからだ。

emerge zsh

useradd dan -m -G users,wheel -s /bin/zsh
passwd dan

ユーザを作ってログイン。

よくわからない。

http://cl.aist-nara.ac.jp/student/daiti-m/text/zsh-intro.html

使いながら勉強していこう。

root のシェルも変更してしまう。

chsh
Login Shell [/bin/bash]: /bin/zsh

vi

続いて vi 。

http://www.linux.or.jp/JF/JFdocs/vi-user-usage-2.html

いつも使っている vi はクローンらしい。 vim とかよくわからない。 初期状態では vi がインストールされていなかった。何を入れればいいのだろう。

emerge vim

subversion

emerge apache
emerge subversion

の順だと subversion が入れられない。

emerge -C apache
emerge subversion
emerge apache

とした。

coLinux ディスクイメージを 10G に

http://scratchpad.fc2web.com/colinux/install/install-8.html

上記サイトとは違いここでは etx3 で作成しておく。なぜかシングルユーザーモードにならなかったがうまくいった模様。

mke2fs -j /dev/cobd2
mount /dev/cobd2 /mnt
# 確認
mount

# ディスクのコピー (mnt と proc 以外)
cd /
cp -a README boot etc lib sbin tmp var bin dev home lost+found opt root sys usr vmlinux /mnt/

10 分くらい待つ。

mkdir /mnt/mnt
mkdir /mnt/proc

cd /mnt/etc
mv mtab mtab.disable

shutdown -h now

起動後確かめてみる。

colinux# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/cobd0            10321208   1645984   8150936  17% /
none                    128232         0    128232   0% /dev/shm

おぉ、うまくいったようだ。

2005-02-16

[アイデア]本棚プラグイン

今回のるびまのインタビュー記事を見て思った。

設定画面で ID を列挙すると、本棚ができあがるみたいな。

複数の本棚があって、ほしいもの、購入したもの、おすすめのものとか。

2005-02-16

[アイデア]ボタンを押すとアニメーション

標示物に対して○ボタンを押すと、標示物がアニメーションする。つまりは、標示物に○ボタンを押されたときのアニメーションを設定しておくと、反応するようになるということ。

2005-02-15

[アイデンティティ]エンジニアとしての価値

http://blog.japan.cnet.com/umeda/archives/001893.html

オレの価値はゲームデザインとプログラミングの両方ができることだ。 どちらか一方だけではダメ。片方だけで他人に勝るほどの力は到底ない。

20 代の中盤からはプログラミングから離れようとして、組織の中でもプログラミングをしないでいいような立場に自分を置こうとした。しかしこれは失敗だった。プログラミングを除いたオレにはたいした力がなかった。やっぱり、ゲームをデザインしてそれを自分で実装するところまでやって、それで初めて大きな力を生み出すことができる。自分の場合はそこを切り離してはいけない。どちらかに立つならば実装よりに立ち、デザイナとしての視点を企画者とのコミュニケーションにうまく生かすべき(必ず控えめに)。デザインと実装を別の人間が行う場合はさまざまな問題が発生して、なかなかうまくいかないものだ。その摩擦をゼロにした開発効率で勝負すればいい。

2005-02-15

[パソコン]最近気になるもの

がとっても気になる。 Racc 勉強中でなかなか手が出せない。時間ができたらこれらを調べよう。

しかしどんどんゲーム開発から離れてゆく。こんなことしてていいのだろうか。いや、これらはすべて Jewel-mmo で使う予定のものだ。

あと、ゲーム開発の勉強もしたい。考えてみると、これまではほとんど思いつきでやってきたので勉強したことがなかった。

3D プログラミングもできるようにならないと。む、もしかして HSP で HGIMG 使うとオリジナルフォントしか使えないのか?だとすると HSP 構想に無理があることになる。

2005-02-15

[るびま]Rubyist Magazine の 0005号リリース

日本Rubyの会有志によるウェブ雑誌、Rubyist Magazine の 0005号をリリース しましたのでお知らせします。

Ruby ではじめるプログラミングは今回で最終回。記事を書かせて頂いたことにとても感謝。 ML や IRC でアドバイスして頂いた方々には本当にお世話になった。

連載が終わって次号からは大分楽になるはずなので、いままでできなかったことを何かしら手伝えればと思う。

ビジュアルのベルの絵を描いてくれたゆのじにも感謝。

2005-02-15

[開発ログ]Gentoo on coLinux

ようやく coLinux + gentoo が動いた。ネットワークに接続出来なくて、苦労した。coLinux-0.6.2 簡単には動かないというを見つけたので諦めた。

既存の TAP-Win32 Adapter を削除。(これに気づくまでかなりはまった)

  • Windows XP
  • coLinux-0.6.1.exe
  • gentoo-i586-ext3-2g-deluxe.bz2

上記 2 つの組み合わせを使用。 coLinux インストール時は上 2 つにチェックを入れた。

つまり TAP を使う。http://www.geocities.jp/error_storm/colinux2-2B.html

Windows のネットワークの設定

「マイ ネットワーク」のプロパティを開く。coLinux インストール時に作成された新しいローカルエリア接続(デバイス名が TAP-Win32 Adapter )を TAP という名前に変える。

Ctr キーを押しながら「TAP」 と 「ローカル エリア接続」をクリックして選択。右クリックでブリッジ接続。

coLinux の設定ファイル

gentoo.colinux.xml を作成。

<?xml version="1.0" encoding="UTF-8"?>
<colinux>
    <!-- This line needs to point to your root file system. 
         For example change "root_fs" to the name of the Debian image.
         Inside coLinux it will be /dev/cobd0 -->
    <block_device index="0" path="\DosDevices\D:\gentoo-i586-ext3-2g-deluxe" 
    enabled="true" />

    <!-- This line can specify a swap file if you wish, or an additional
         image file, it will /dev/cobd1. Additional block_devices can
         be specified in the same manner by increasing the index -->

    <block_device index="1" path="\DosDevices\D:\swap_device" 
    enabled="true" />

    <!-- bootparams allows you to pass kernel boot parameters -->
    <bootparams>root=/dev/cobd0</bootparams>

    <!-- image allows you to specify the kernel to boot -->
    <image path="vmlinux" />

    <!-- this line allows you to specify the amount of memory available 
         to coLinux -->
    <memory size="256" />

    <!-- This allows you to modify networking parameters, see the README 
         or website for more information -->
    <network index="0" type="tap" />
</colinux>

起動

コマンドプロンプトを開き、 coLinux をインストールしたディレクトリに移動して以下を実行。

colinux-daemon.exe -c D:\gentoo.colinux.xml

起動したら root パスワードなしでログイン。

ping dgames.jp

この時点でネットワークにも繋がる。 /etc/resolv.conf を見るといつの間にか nameserver も設定されていた。

2005-02-15

[開発ログ]Linux 開発環境がボロボロ

coLinux は 0.6.2 を試したり 0.6.1 に戻したりを何度も繰り返しているうちに、何かの拍子に Gentoo のイメージが壊れた模様。

年末に Stage1 から Gentoo をインストールした PC は長男に電源ボタンを連射されたらしく、気がついたら起動しなくなっていた。

しょうがないので Cygwin 起動したら、

ruby: No such file to load -- ubygems (LoadError)

と出るので、何度も Cygwin を再インストールしていた。何度やっても直らないので調べたら、どうも One Click Installer が環境変数を設定してしまっているという噂。

Cygwin 環境はすぐに直せそうだが、 Gentoo 環境を復活させたい。 Debian が頭を過ぎるが、ここで Debian に転ぶのもあれだし……。

たはぁ。もうちょっと Linux をうまく使えるようになりたい。頑張ろう。

2005-02-15

[雑記]ほしいものをならべてみる

アマゾンのショッピングカートに入れたものの、お金がないので買えないものが増えている。

これってある意味ちょっとしたプロフィールにもなるような。

以前から左上に置いておいた 2 冊も実はまだ持ってない。あの 2 冊はデザイン的に気に入っている。

2005-02-14

[開発ログ]Racc はじめます (2)

現在の開発の主軸は Racc の勉強。

もう 10 時間以上勉強しているのではなかろうか。難しい。これだけ難しいものに直面したのは 10 年前に C 言語の勉強をしたとき以来。オブジェクト思考よりも難しい。

Rubyを256倍使うための本 無道編(青木 峰郎) もっぱらこの本で勉強しているが、やっと 1/4 くらいの所まで理解出来た。 Ruby インタプリタぽいものを Ruby 上で動かすという部分が混乱してなかなか理解出来なかった。

一日 30 分から 1 時間くらい本を読む。そしてサンプルコードを書き換えて C 言語をソースを出力する何かを作っている。まだアサインと関数の呼び出しをするコードの断片しか生成できない。

勉強自体はとても楽しい(本の内容もとても楽しい。こんなちっちゃな本なのに、何度も何度も繰り返して読める)ので、しばらくはこれを続けよう。

2005-02-13

[雑記]メモの取り方

このサイトはほとんどメモ。ただ最近カウンタが一日 200 くらいまわっていて、 200 人も見てるかと思うと妙に意識してしまってあれ。

カテゴリの使い方が難しい。本当にカテゴリ分けする意味あるのか?メモだから後で検索しやすい形がよいのだが、カテゴリにはどうも無理がある気がしている。どのカテゴリにも属さない内容だったり、複数のカテゴリに関係するないようだったり。カテゴリなしという方向性も考えてみよう。

他人が見る場合はカテゴリ分けはいいのかもしれない。

今、ここと仕事用と二つの tDiary を使っている。それぞれうまくいっているのだけど、メモは一箇所にすべきともいうし、もっといい方法ないだろうか。あと非公開の Wiki もあったりするし。

誰にでも公開できるもの、仕事関係者にだけ公開できるもの、自分個人だけのもの。こんな感じでうまく分かれているからいいのだろうか。

2005-02-11

IE で見るとサイドバーが崩れる

今頃気づいた。そんなに IE 使ってなかったか。直すの面倒なのでそのまま。

2005-02-11

[blog]<URL:http://www.pinky.ne.jp/~aogachou/>

カーバンクルの絵を探していて見つけたサイト。

日ごろか素材サイトも探さないといけないなと思っていたところに偶然発見。 ライセンスがゆるいので注目。

2005-02-11

[パソコン]Wiki ばな参加予定

先日かずひこさんにお会いしたときに Hiki を使ったアイデアを少しだけ聞かせてもらって、その紹介があるらしいのですごく楽しみ。 昨日の案もその話を聞いてからいろいろ考えたものだし。

2005-02-10

[アイデア]設定ファイルを Wiki で書く

のはどうだろう。などかさんのスケジューラボットを作るとしたらどんなだろうと考えているのだけど、例えば Wiki にあらかじめ決められたフォーマットで記述していくと、それをなどかさんが解釈してくれる。

などか> 明日は○○○の提出期限です。
        終了しているなら「○○○任務完了」と言ってください。

などか> ○○○の提出期限が切れています。早く終わらせてください!!

この場合、完了の旨をなどかさんに伝えると、などかさんが Wiki を編集してくれる。自分で編集してもいい。

さらに、これをネットワークゲーム世界のシナリオの記述に使う。誰でも Wiki 上から NPC のセリフを編集できる。追加できる。 NPC を新しく追加することもできる。そうやって町や世界全体が作られていく。アイテム名を変更したりとか。アイテムの補足説明とかヘルプとかも誰でも編集できる。

一般に公開しない状態でも、仕様書を開発者がアクセスできる Wiki で管理して、テキスト情報とか各種パラメータとかをそこから引っ張ってくるようにしておくとか。

2005-02-10
2005-02-09

[アイデア]ゲーム案

いくつかのアイデアがあるのでメモ。

  • 吟遊詩人システム。やっぱりこれはやりたい
    • blog 上で仲間集め、アイテムの売買、オークション
    • 歴史を記す。人気投票
    • その他関係ない話題もあり
  • 魔法好きが多いので、無駄に魔法ということに
  • スペルカード多様。インターフェースに便利
  • むらさま
    • 好きな大会にエントリ。いろんな賞金がある⇒勝手にバランスが
  • 30 時間で一手。同時エントリ
2005-02-09

[blog]<URL:http://sho.tdiary.net/20050208.html#p01>

たださんの固定幅についての話。るびまは固定幅にしているのだけど、それは画像の配置考慮したときに、いろんな問題を回避するためだった気がする。

サイドバーは固定幅なのにそれ以外が可変というのにも違和感がある。本文に画像が挿入されているときも。

だから、全部固定幅で作ってあるサイトを全体的に自由に拡大縮小して表示出来るブラウザがあればいいのでは?

2005-02-09

[tDiary]長年日記が出た

1 年と 2 日 前に tDiary の存在を知ったらしい。 Matz にっき を知ったのもこのころだ。思いつきで設置したものがよく続いている。日記なんて書き続けるタイプではないのに。 tDiary がとてもすばらしいということだろう。

で、ちょうど 1 年前に OSS という言葉を知ったらしい。その後 OSS に興味を持っていろいろ勉強し始めて今に至るわけだ。 OSS 周辺には面白いことがたくさんあることを知った。

今年はハッカー 1 年生。来年の今頃は少しくらいハッカーらしくなっているだろうか。

2005-02-08

[Ruby]Racc 習得への道のり

いろいろやりたいことが多いわりに全然進んでいない。とりあえず、 Racc を使えるようになりたい。

emerge racc

http://ruby256.hp.infoseek.co.jp/ からサンプルコードをダウンロード。

難しい。これほんとにみんな理解してるの? 過去に使ったライブラリの中でも一番難しい気がする。

01.first のサンプルコードを見るがよくわからない。

http://www.loveruby.net/ja/man/racc/usage.html を見てみる。

見ようと思ったところで BitChannel の存在を知る。すげーかっこいい。これはそのうち読まなければならない。

http://i.loveruby.net/w/FrontPage.html もはじめて見た。 WEB で文章読んでもいつもらあまり集中出来ないのだけど、見入ってしまった。

Racc に戻る。

--

プリントアウトして電車の中で読んだ。とりあえず、最初のサンプルはわかってしまうとそれほど難しくなかった。

2005-02-08

[生活]初動負荷トレーニング

初動負荷トレーニングというのを行うと筋肉が柔らかくなるらしい。 やってみたい。

リフティング 48 回。子供のころより上達が早い。

2005-02-07

[Ruby]へんす〜,くろじゃ〜

意味不明のお告げを頂く。意味がさっぱりわからず朝起きてからしばらく考える。ささださんだから必ず深い意味があるに違いない。

  1. 変です, 黒じゃ。 → そんな変な方法じゃ全然ダメなので逮捕
  2. へんす〜, クロージャ
  3. 変数, くろじゃ〜?
  4. 変数, クロージャ → あ、これかもしれない!

ただクロージャがなんだかわからない。

調べたり聞いてみたり。

なるほど、確かに単純な関数の呼び出しにしてしまったら、その中のローカル変数が毎回消滅してしまうのでだめだと言うことに気付く。なるほど〜

--

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?Closures

2005-02-06

[開発ログ]Racc はじめます

とりあえず Racc を Cygwin インストール。Cygwin 用の Racc というのがあった気がして探していたが見つからないのであきらめようかと思ったが、ただ普通にダウンロードしてきて

ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

としたらインストールできた模様。

2005-02-06

[るびま]初稿

なんとか書けた。しかし、最近とにかく忙しい。開発も脱線しまくって全然進んでない。今回が最終回だからここを乗り切って本業に力を注ぎたい。

2005-02-06

[blog]Cygwinとおたわむれ

http://www.netlaputa.ne.jp/~kuno/cygwinmain.html

余談。 URL を張ったら自動的にそのページのタイトルとそのリンクにならないだろうか。ジャバスクリプトとかで。

さらに余談だけど、日記の文章をブラウザで書くよりいい方法があるだろうか。それといま WZ エディターを使っているけど、もっといいエディタないだろうか。 emacs はどうも好きになれない。vi だろうか。エディタの機能はほとんど使ってないので、簡単なエディタを Ruby で自作できないものなのかなあとも思うのだけど。ちょっと必要な機能があったら Ruby でプラグインを書けばいいみたいな。 Ruby/Tk のサンプルでエディタの作成とかあったりするけど、あれキーワードの色変えってできるのかなぁ。

で、日記をブラウザで書くよりいい方法あるかなあ。 lily とローカルファイルの編集の組み合わせで考えてみたいとは思っていたが。あまり使ってないけど lily どうなんだろう。

余談。最近自分の好き嫌いが出てきた。

  • Perl, Python より Ruby
  • Debian より Gentoo
  • emacs より vi な気がする
  • IE より Firefox
  • Becky! より Thunderbird

ときて次は

  • tDiary より lily ?
2005-02-06

[開発ログ]潜りすぎか

ゲームを作るためにそのグラフィックスライブラリである ER の開発に着手し、 ER の開発用に言語の開発まで考え出している。

本分はデザイナーであるにもかかわらず、言語なんてものに手を出そうとするのは分不相応にもほどかあるか。しかし、勉強になるし楽しい。

でもやっぱり本分はデザイナーなわけで、アプリケーションを作る前にこんなことばかりやっていてはなかなか本業がすすまない。

対極の選択

  • 一切文句を言わず HSP で実装する
  • 納得のいくところまで深く深く潜る。⇒快適な環境でアプリ制作

前者は自分がこれまでに好き好んでやってきたスタイルで確実にそれなりのアプリケーションはリリースできる。 最近は後者なのだが、この方法でリリースにこぎつけることができるかどうかにはとても不安がある。

後者の場合でもウォーターフォールでなくてらせん状に進めていきたい。

2005-02-06

[Ruby]ブロック

Ruby のような何かを作れないかと考えていると、いままで気が付かなかった Ruby が見えてくる。 Ruby のブロックって何なのだろう。調べてみたい。

2005-02-06

[プログラミング]先例を参考にしない

<URL:http://rucila.s43.xrea.com/memo/?date=20050205#p03>

いろいろ教えていただく。自分はこういう知識が全然ないのでとてもありがたい。こうやって自分が取り組むことに対してフィードバックをもらえるのはいろんな意味で楽しい。

ただ、自分のやりかたに問題があってなかなか情報を生かせない。普通はやにかやるときに参考になるものがあれば、それを読んでその知識を踏まえつつ効率よく実装するのだと思う。参考になるものがあるのだから当然それを参考にする。当たり前の話のように思う。しかし、オレの場合このやり方ができない。その理由はこんな感じ。

  • 参考になるはずのものを読んでも理解できない
  • そういうやり方はなぜかモチベーションがあがらない。楽しくない

だからとりあえず、自分で考えてできる範囲で作る。考えるのが楽しい。結局は時代遅れで効率の悪い不完全で再利用できないコードを書きまくるのだが、この試行錯誤の後に参考文献を読むとやっと理解できるのである。試行錯誤はすごく楽しい。本当は参考になるものは参考にしつつ試行錯誤できればいいのだけど。

だから今まで人の書いたソースはほとんど読まなかった。楽しくないから。でも最近ソースを読むことの重要さにようやく気づいた。明らかに何かが足りないことに。そう思うとソースを読むことも楽しくなりそうな気がするので、今年は他人のソースを読むようにしたい。

2005-02-05

[プログラミング]C にトランスレートされる何か

昨日の続きを SPL (相模湖ピクニックランド)への往復路で運転しながら考えていた。忘れないうちにメモしておく。

まずメソッド呼び出しをどう C で実現するか。

call_meth(obj_id, "meth_name", *p_block_fanc, arg0, arg1, arg2, ...);

という関数でよさそうな気がする。ブロック付きメソッドも関数ポインタでできるような気がするがどうだろう。ブロックはあらかじめ関数に展開しておく。 Ruby の仕様をよく知らなかったり、ましてや実装は何にも知らない(まだ調べてもいない)ので勝手な想像だが。

この方法だとメソッドがオブジェクトに定義されているかどうかを検索して、定義されていれば実行する。つまりオブジェクトに対して動的にメソッドの追加とすり替えが可能。あと、実際は文字列で渡しているメソッド名は整数型に変換しておいたほうが速そうだ。

なんか、これだけでほとんどのものがオブジェクト、ほとんどメソッド呼び出しが実現できそうなんだけどどうだろう。 if とか while についてはまだよく考えていない。

あと重要なのは C 言語とのやりとり。 C と Ruby っぽい書き方を同時に表現できるだろうか。

# foo.rb?
def foo
  print "hello\n"
=begin c
  /* ここは C 言語の世界 */
  printf("hello c\n");
=end
  C::printf "hello c\n" # これも C 言語関数の呼び出し
  return 1
end

=begin c
void foo_c()
{
  int num;
  num = foo;
}
=end

上記ソースが foo_rb.c に変換される。次は C ソース。そう言えば C の #include を使えば eRuby を使って埋め込む必要もないか。

/* main.c */
#include "foo_rb.c"

int main()
{
  foo();
  foo_c();
}

例えばこんな感じだろうか。メソッドの戻り値をどう C で受け取るかとか深く考えていないが、まあそれほど問題ないような。

面白いのでもう少し考えてみよう。

2005-02-04

[プログラミング]Ruby は本当に必要なのか

プログラミングカテゴリ新設。

これまでの経緯。ゲーム開発での話。 C(C++) 言語での開発しか知らないときに Ruby を知る。 Perl とかその手のスクリプト言語じゃ大規模なソフト開発はできない気がしてて、 Perl でアプリを作ろうとはそれまで考えなかった。 CGI ゲームの開発に Ruby を使用したのをきっかけに Ruby で本格的なゲームを作りたいと思い始める。 Ruby の生産性の高さに本当に感動した。で、実際大規模なゲームを作ろうとしたもののすぐに Ruby とは関係ないところの問題で失敗。ただ、市販のゲームまるまる一本分くらいの開発規模でも、規模の大きさゆえの懸念は幻想であることはわかった。その後も、やっぱり Ruby でゲームを作ってみたくて、いろいろ考えているのが今の状態。

ここでいう Ruby のゲーム開発は普通のパソコン上で動くゲームに限られている。もしくはネットワークゲームのバックエンドとか。コンシューマーゲーム機で Ruby を動かすのはまだまだ難しいらしい。

Ruby を使える環境だけゲームをリリースすればいいと思っていたのだが、本当に Ruby を使う必要があるのだろうか。とさっき風呂に入っていてふと思った。どういうことかというと自分で言語を作ればいいんじゃないかという話。実際に作れるかどうかは別としても、こういう方向から考えることも有意義なのではないかと。今までコンパイラとか処理系を自分で作るなんて事ははなから頭になかったから。しかし、後になって気づいたのだが、自分は既にコンパイラを作っている。 Z80 の仕事を自作した簡単なツールを使って行っているのだが、そのツールがとても強力で非常に重宝しているのだ。そのツールは次のようなソースをアセンブラソースに変換できる。

def foo(a, b)
  c = a
  c += b
  return c
end

t = 0
i = 0
while i < 10
  a = 1
  b = i
  val = foo(a, b)
  if val > 5
    t += 1
  else
    t += 3
  end
  i += 1
end

でこういうツールはどうもコンパイラというらしい。となると自分は既に言語デザイナー。

そんなこんなで思ったのが、プログラミング言語を作るのは必ずしも難しくないということ。上記のツールは 3 日でできた。もちろん Ruby を使って。だから例えば Ruby で便利だと思っているような機能が使える言語を設計して、それを C に変換するトランスレータを書くという発想があってもいいのではないだろうか。もちろんトランスレータは Ruby で書く。生成した断片を eRuby で C ソースに埋め込むだけでもいい。意外と現実性があるのではという気がする。

Ruby の便利な機能はなんだろうか。何がどれくらい優れているのだろう。不要なものだってあるはずだ。例えばアクションゲームに文字列処理の機能は必要ない。

こういうアプローチでプログラミングを考えたことがなかったので、いろいろ思いをめぐらせてみたい。

2005-02-03

[生活]リフティング 27 回

昨日自己レコードの 27 回に成功したのに引き続き、今日ははじめに手にボールを持たずにするやり方で 27 回できた。予想以上に上達が早い。

先々週また痛めた肩はまだ回復せず。キャッチボールはあと一週間くらい控えたほうがよさげ。

2005-02-03

[雑記]デブサミ 2005

オープンソースのだけ仕事の合間に行ってきた。 まつもとさんに顔は覚えていただいている模様。

かずひこさんにもお会いできた。

2005-02-03

[雑記]goto

goto が何箇所かで話題になっていたりしてこのサイトにも多少の影響力あり?てゆーか自意識過剰?

2005-02-02

[アイデア]むらさまをミニゲームにしない

なくすのではなくて、 Jewel 本体に組み込んでしまったらどうだろうか。

最近またやっているのだが、やっぱりこのゲームはよくできている。

今のカードを人形と直接に絡めてしまおう。カード = 人形にすると、キャラが消滅してしまうことになるので、ボディ + カードでワールドに実体化するようなイメージ。

まあ、発端はカードをそのまま実体化して、どれか一体を自キャラにして残り 4 体を自由に引き連れて歩き回るようなイメージ。

寿命があるので、生まれ変わり続けるわけだが、ボディとか装備とか引き継がれるものも用意して、まさにむらさまの戦力維持の努力のようなゲーム性にすれば永続的なプレーも可能になる。うん、これはよさそうだ。

具体的な実装に向けて、その前に過去に書いたアイデアにも面白そうなものがありそうだから読み返してみてもいいかもしれない。はてなのように本にできて、電車の中で読めるとかなるとうれしいのだけど。

tDiary の日記は本にできないだろうか。

2005-02-01

[雑記]Linux プログラミング本レビュー 終了?

あれ、青木さんの本レビュー気が付いたら終わってた。最近仕事にはまってて、半分も読めなかった。

2005-02-01

[Ruby]HSP 風 Ruby スクリプトに挑戦

HSP のスクリプトを Ruby っぽく書くことはできないが、その逆はできそうな気がする。どこまでできるだろうか。

以下は HSP の最初のサンプル。ウィンドウを生成して "HSP2TTL.JPG" を読み込んで画像サイズのウィンドウを生成し表示するスクリプト。 stop の部分でプログラムは停止する。

picload "HSP2TTL.JPG"
stop

Ruby でも拡張ライブラリを作れば OK 。

require 'hsp'

picload "HSP2TTL.JPG"
stop

次に出てくるのがこれ。

cls	0
mes	"こんにちは、HSPです。"
mes	"おしまい"
stop

これも大丈夫。

require 'hsp'

cls	0
mes	"こんにちは、HSPです。"
mes	"おしまい"
stop

その次に出てくるのがこれ。

;スクリプトに旗を立てよう
*hata1	
	cls
	goto *hata3
*hata2	
	mes "はーい、こんにちは"
*hata3	
	mes "旗を立ててみるテストです"
stop

ラベルと goto が登場する。これを Ruby で同じように書く方法は知らない。 Ruby には goto がない。

さらに次。

;ボタンが押された時に、指定したラベルにジャンプさせる
	cls
	mes "ボタンを押してみてね"
	button "PUSH",*hata1
	button "BYE",*hata2
	stop
*hata1	
	mes "あっ、押しちゃったね"
	stop
*hata2	
	end

うーむ。 goto がないと無理か。上記のサンプルなら例外で何とか。でもこれじゃダメだ。他の方法は思い浮かばない。

require 'hsp'

	cls
	mes "ボタンを押してみてね"
begin
	button "PUSH", Hata1
	button "BYE", Hata2
	stop

rescue Hata1	
	mes "あっ、押しちゃったね"
	stop

rescue Hata2	
	exit
end

やっぱり goto がないと厳しいか。

--

HSP では以下のようにすると数値が自動的に文字列として振舞われる模様。

hen=150
mes "現在の変数henの数値は、"+hen+"です。"
hen=50
mes "現在の変数henの数値は、"+hen+"です。"
stop

これは式展開か to_s でいいか。

require 'hsp'

hen=150
mes "現在の変数henの数値は、#{hen}です。"
hen=50
mes "現在の変数henの数値は、"+hen.to_s+"です。"
stop

if 。

cls
x=100
if x=100 : mes "変数xは100です。"
mes "条件判断終わり"
stop

require 'hsp'

cls
x=100
if x==100 then mes "変数xは100です。" end
mes "条件判断終わり"
stop

これでもいい。

mes "変数xは100です。" if x==100

もう少し長いスクリプト。

;HSP
	cls
	kai=0
	mes "ボタンを押してね"
	button "PUSH",*gopush
	button "END",*goend
	stop
*gopush
	kai=kai+1
	stop
*goend
	if kai > 0 : goto *owari
	mes "せめて1回は「PUSH」ボタンを押してよ"
	stop
*owari
	cls
	mes "あなたは、"+kai+"回「PUSH」ボタンを押しましたね"
	stop

これも例外で書けそうだが、 goto の柔軟さには勝てない。