Bカードゲーム
ジャンル 対戦型カードゲーム 人数 2人専用 対象年齢 小学生高学年以上 Ver 1.0 (2004-03-26) 製作 dGames
用意するもの
- 選手カード(80枚)
- ジュエルカード(16枚)
- 勝敗表
ルール概要
- 2人で対戦するカードゲーム
- 手持ちの7枚の選手カードのうち5枚を使って試合を行う
- 先に4勝した方が勝ち。最大7試合。勝ち星が同数なら得失点差で決める
プレイ手順
1. ジュエルカードを配る
ジュエルカードは全て相手に見えるように並べておく。
- 10000J × 1
- 5000J × 1
- 1000J × 5
- 0J × 1
また、ショップ用に3枚のカードを表にして並べる。
2. 選手カードを配る
双方に7枚の選手カードを配る。選手カードは相手には見せない。 残ったカードは山にしておく。
先手を決める。
3. カードを一枚引く
先手から順に山からカードを一枚引く。このときカードを種類は相手に見せない。 引いたカードを手持ちのカードと一緒にしてはいけない。
3.5. 先手を決める(初回のみ)
手持ちのカードを一枚ずつ出し合う。同時に表にして、リバウンド値が高かった方が先手。 リバウンド値が同じ場合は通し番号が低いほうが先手になる。
4. カードを捨てる
手持ちのカードが8枚以上あればカードを一枚捨てなければならない。 先手から順にカードを捨てる場合は表にして捨て場に並べていく。
捨てられたカードにはスカウトシステムあり。
5. カード購入
先手入札
先ず先手が自分のジュエルカードを全て手に持ち、 カード購入に消費する額のジュエルカードを並べる。 このときジュエルカードは裏にして並べ相手には何枚消費するかだけをわかるようにする。
後手入札
その後、後手が購入に使うジュエルカードを表にして並べる。
カード購入
並べ終わったら先手のカードを表にし、 金額が大きかったほうから順にショップから好きなカードを一枚ずつ手持ちに加える。
0Jのジュエルカード
0Jのジュエルカード一枚のみを使った場合はカードを買うことはできない。 ただし、0Jカードを一枚だけで使用した場合はそのカードを捨てなくてよい。
6. 試合用カード5枚を並べる
お互いに手持ちから選んだ5枚のカードを裏にして並べる。
7. 一枚目から順にめくって行く
BOLの試合ルールに従って両プレイヤーの得点を決める。得点が多いほうが勝ち。 同点なら引き分け。引き分けも一試合に数える。
8. カードの消滅
試合に出場したカードで
経過試合数 >= カードのスタミナ値
となっているカードは捨て場へ移動。
試合に出したカードのスタミナが残っている場合は、表にして自分の前に並べておく。
9. 繰り返し
試合結果を勝敗表へ記入。どちらかが4勝するか、7試合が終わるまで手順3へ戻る。
リバウンドを先に制したものが次回の先手。 5枚目までリバウンドが互角であった場合は5枚目のカードの通し番号が低いほうが先手。
[個人的なインストールメモ]BMPファイルの解析
BMPをテキストでダンプ。Cソースあり。 <URL:http://www.kk.iij4u.or.jp/~kondo/bmp/>
[個人的なインストールメモ]tmail-0.10.8をmswin32-Ruby1.8.1
ダウンロード<URL:http://i.loveruby.net/ja/prog/tmail.html> tmail<URL:http://www.loveruby.net/ja/man/tmail/>
ruby setup.rb config --prefix=D:/ruby-1.8.1-mswin32 ruby setup.rb setup ruby setup.rb install
DOSプロンプトでVC++コンパイラをする前の環境設定
cd C:\Program Files\Microsoft Visual Studio .NET\Vc7\bin cd C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin vcvars32.bat
Rubyのコンパイル
cd D:\ruby-1.8.1\win32 configure.bat nmake
[アイデンティティ]50年後
仕事や趣味は50年後も続けられものがいい。先月81歳で亡くなった祖父の生前を見ていてつくづく思っていた。植木や盆栽を仕事としていた祖父は亡くなる10日前まで、自分で車を運転して近くの畑へ、水をやりに行っていたという。筆者が小学生の頃87歳で亡くなった祖祖父も、同じように直前まで自転車で畑に行っていた、というのが身内での語りぐさになっていた。二人とも癌であった。祖父は一年前に癌を宣告されたが治療はせずに今の仕事を続けることを選んだ。 最後まで筆者の望むお手本のような死に方であった。ゲームマスターは50年後も務まるであろうか。野菜の方は地球が今のようなままであれば可能であろう。
[アイデンティティ]デジカメ
最近、デジカメがほしいと思っている。用途は野菜の撮影とかモリョファイのイメージ写真等が主である。ほしいのだが、実際買うと面倒ですぐに使わなくなることがわかっている。撮ること自体は簡単でいいが、電池を入れ替えたり、データをPCへ移したりそのデータを整理したりするのが駄目なのだ。
と思っている最中、モリトマン氏のページを見るときれいな写真が。ケータイで撮ったのだという。これだけの写真が撮れるならケータイでもいいかもしれない。電池交換は不要だし、データもネットを通して転送できそうだ。よくをいえば撮った写真が自動的に自分のPCのフォルダにコピーされるといいのだが。もしかしたらメールとかをうまく使えばこれに近いことはできるのかもしれない。
[アイデンティティ][プログラム]アセンブラ
もうすこしプログラムの話を続ける。筆者は超低級言語であるアセンブラについて、まるで諸悪の根源であるかのようなイメージを持っていた。Rubyのような便利で楽な高級言語を使うことが自分のやりたいことを実現する近道であり、アプリ作成のための効率のよさを追求することこそが自分の求めるものだと思っていた。
しかし10年近くぶりにアセンブラを触ってみたが意外に楽しい。Rubyでプロトタイピングした素数を計算するプログラムも2、3時間ほどで作ることができた。アセンブラの面白さはパズルゲームを解くような面白さである。オブジェクト指向プログラミングの面白さとは違った、古きよきプログラミングの面白さかもしれない。この楽しい感覚を久々に感じた。Z80に触れたのは今回が初めてだったのでもう少し慣れれば30分でできる作業だろう。Rubyで10分、アセンブラで+30分というのは意外である。てっきりRuby:アセンブラの開発効率は100:1くらいではないかと思い込んでいたが、そんなことはないようだ。しかしこれはたまたま効率に差がでにくい課題だったのだろう。ともあれ今回の経験は開発効率を考える上で非常にいい体験であった。
[Ruby]素数を求めよ
10000以下の素数を
2 3 5 7...
の形で標準出力に表示せよ。
ある人にC言語の宿題として出した問題だが、Rubyで書くとたとえばこうなる。所要時間10分。
def sosu?(n) (2..n-1).each{|i| return false if n%i == 0 } true end def print_sosu(max) (2..max).each{|n| print n.to_s + ' ' if sosu?(n) } end print_sosu(10000)
アセンブラをイメージしてみる。所要時間5分。
def sosu?(n) i = 2 while(i < n) a = n%i if a == 0 return 0 end i += 1 end return 1 end def print_sosu(max) n = 2 while(n <= max) a = sosu?(n) if a != 0 print n print ' ' end n += 1 end end
手動でZ80のアセンブラにしてみる。以下はsosu?メソッドのみである。おそらく255とか127でオーバーフローしてしまう。それ以外にもバグがあるかも知れない。所要時間90分。
GL_SOSU: LD D,2 ;D = 2 LL_LOOP: LD A,B ;while(D < B) => (B-D>0) SUB A,D JR Z,LL_LOOP_END PUSH BC ;A = B%D LD A,B LD B,D CALL GL_AMARI POP BC XOR A,0 ;if A == 0 JR NZ,LL_IF_END LD A,0 ;rerutn 0 RET LL_IF_END: INC D ;D += 1 JR LL_LOOP ; LL_LOOP_END: LD A,1 ;rerutn 0 RET GL_AMARI: SUB A,B ;% RET Z JR NC,GL_AMARI ADD A,B RET
そしてマシン語。左側の二桁の数字の並びが機械語のプログラムである。すべてはここに行き着くわけで、まるで映画のマトリックスのように不思議だ。
0000 16 02 LD D, 02 0002 78 LD A, B 0003 92 SUB A, D 0004 28 11 JR Z, 0017 0006 C5 PUSH BC 0007 78 LD A, B 0008 42 LD B, D 0009 CD 1A 00 CALL 001A 000C C1 POP BC 000D EE 00 XOR A, 00 000F 20 03 JR NZ, 0014 0011 3E 00 LD A, 00 0013 C9 RET 0014 14 INC D 0015 18 EB JR 02 0017 3E 01 LD A, 01 0019 C9 RET 001A 90 SUB A, B 001B C8 RET Z 001C 30 FC JR NC, 001A 001E 80 ADD A, B 001F C9 RET
ちなみにCで書くと、
#include <stdio.h> int is_sosu(int n) { int i = 2; while(i < n) { if(n%i == 0) return 0; i++; } return 1; } void print_sosu(int max) { int n = 2; while(n <= max) { if(is_sosu(n)) printf("%d ",n); n++; } } int main() { print_sosu(10000); return 0; }
whileはforにしたほうがよりCらしい。
int is_sosu(int n) { int i; for(i=2 ; i<n ; i++) { if(n%i == 0) return 0; } return 1; } void print_sosu(int max) { int n; for(n=2 ; n<=max ; n++) { if(is_sosu(n)) printf("%d ",n); } }
[アイデンティティ][tDiary]RD
RDを使い始めてから一年近くになるが本当に気に入っている。RDを覚えてから書く文章の量が飛躍的に増えた。10倍ほどになったかもしれない。tDiaryやWikiの効果とあわせると50倍かもしれない。それ以前に書いた文章が非常に少なかったからだが、それはしかしほとんど文章を書かない筆者のような人間にまで、これだけの量の文章を書かせてしまうほど優れたツールであることを示している。もっとも文章の内容が優れているかどうかは別の話。
ただ、これでも以前に比べると文章を書くのが圧倒的にうまくなった。昔は自分の書いた文書を後で読むと意味不明なことが多かったが、最近はそういうことが少ない。あくまで依然と比べての話であるからつっこみは勘弁頂きたい。 上達もツールのおかげだろう。
[OSS]すごいプログラマー
いまレイモンドの「伽藍とバザール」を再読(筆者の読書は電車の中のみなのですごく遅い)しているのだがこんな言葉が出てくる。
何を書けばいいかわかっているのがよいプログラマー。 何を書き直せば(そして何を使い回せば)いいかわかっているのが、すごいプログラマー。
これまでオレは多くのコードを書きすぎた。昔は標準ライブラリもほとんど知らなかったからstrlenすら自分で書いていた。趣味で書いているプログラムではなくてPSのゲームプログラムにである。すごいプログラマーからはほど遠い。この先も自分がすごいプログラマーになれるなんて思っていないが、それでも最近はほとんどコードを書かずにひたすら調べて、考えてばかりいるのは、いい傾向かもしれない。
もう一つ「伽藍とバザール」から。
賢いデータ構造と間抜けなコードの方が、その逆よりずっとまし。
これはMySQLを使うべきかということに大きなヒントを与えてくれている。MySQLを使えば少なくともデータ構造を明確にコードから切り離すことができる。やはりMySQLを使うべきか。昨日、ruby-listにWindowsでのMySQL/Rubyの使用について質問を投げたらMySQL/Rubyの作者とみた氏からRuby/MySQLを試したみたらどうかとのご教授をいただいた。基本的なことなのにMySQL/RubyとRuby/MySQLが別にあったなんて気づかなかった。まだ試していないがどうやら問題は容易に解決できそうだ。
さらに余談だが筆者はとみた氏と直接お話をしたことがある。Rubyの作者まつもと氏とも話したことがあるし、なんとMySQLの作者モンティ氏とも話したことがある。だた英語が駄目なのでMonty氏との間には通訳に入ってもらっていたが。こういう人たちに会うのは意外と簡単で、MLに流れるイベントにひょっこりと参加してしまえばいい。あとは近くに来たら思い切って話しかける勇気さえあれば何とかなるものである。
[dGames]コミュニティ
ショーンさんが考えを述べてくれたことでdGamesはただの独り言サイトからコミュニティサイトへと昇進した。しかしあのBBSだけでコミュニティを形成するのは辛い。いよいよMLの立ち上げ時か。
このサイトは今のところ次のようなシステムで構成されている。
- tDiary
- RWiki
- BBS
- 静的なHTML(ごく一部)
- ML(立ち上げ予定)
それぞれの使い分けを明確にしておかないと非常にわかりにくい構成になってしまう。
考えているそれぞれの使い分け方を書いておく。
tDiary
- 個人的なこと
- danの考える方向性
- ニュース、リリース情報、トップページ … これらはtDiaryでなくてもいいのだが管理の楽さゆえに
RWiki
- 書籍となり得るような情報
- 他と比べれば静的な情報ということもできる
ML
- コミュニケーション(即時的な)
BBS
- MLに参加するまでもないような話題
ゲストブック的なものは必要なのだろうか。あと誰かが新規に開発者として参加するとき、どこかのリストに追加されたりするのだろうか。少なくともコミット権限のあるなしでリスト化する必要があるか。これについては他のコミュニティを調べてみよう。
[アイデア]MySQL依存
MySQL非依存と書いたものの非依存でのシステムを考えると実際それはそれで難しいと感じできた。いろいろ調べていたら混乱してきたので整理したい。 まず当初の予定はこうだった。- 本体サーバ
- Linux
- MySQL
- Ruby
- webゲーム(CGI)サーバ
- Linux
- MySQL
- Apache
- Ruby
- eRuby
- 本体クライアント
- Windows
- Ruby
- Easy Rocet(自作:DirectX 9.0 + Luna + Ruby拡張モジュール)
- webゲームクライアント
- IE or Netscape
開発環境の構築が楽。Windowsユーザでも手軽に開発環境を用意できるのでとにかく開発参加への敷居が低くなる。デメリットは今更データベースもどきを新たに用意するのは非常にばからしい。ただ探せば世の中にRubyだけで動く求めている機能があるかもしれない。
これは十分可能なはず。ただちょっと調べた感じではRuby1.8.1で動作するMySQL/Rubyを発見できず、どうもMySQLのクライアントを自分でコンパイルする必要がありそう。もしかしたら簡単に解決する方法があるかもしれないが。デメリットは環境構築にMySQLが必要になってしまうこと。
もしかしたらこれが結局一番いいのかもしれない。もっとも一般的か。急がば回れ。だだしゲームのいちプレイヤーからすると開発参加への敷居が高い。その反面優秀な人材が協力してくれるようになるのだろうか。ショーンさんどう思います?
[プログラム]C言語入門
C言語は新C言語入門 シニア編これで勉強した。10年ほど前の話。当時C言語に関する他の本も何冊か持っていたが役に立ったのはこの本一冊だったと思う。新C言語入門 ビギナー編というのもあるがこちらは易しすぎてあまり参考にならなかった気がする。
Bオフライン第一回大会
昨日Bオフライン第一回本戦が開催された。試合会場は渋谷、参加者は男6人女1の計7人。オンラインの本戦優勝者を初めとする屈指のバスケリストが集合。ファンサイトのオーナー2人やキャラデザインのイカラシ氏も参加した。会場ではゲームマスターのチーム名も公開され参加者を驚かせた。
高度な戦略の話からくだらない裏話までBOLにまつわる話題が語られた。考えると6時間近くもひとつのお店で騒いでいたのだが、それでも個々のBOLに対する思いを語りつくすには時間が足りなかった。終盤はもうよく覚えていないのだが、先生からの限定グッズプレゼントなどもあって非常に盛り上がっていた模様。ともあれまたやりたい。
[tDiary]ハッキング
最近tDiaryにはまっている。ソースを眺めたり書き換えたりしてハックしているのである。プラグインで何ができるのかを知りたくてハックしだしたら面白くて熱中してしまった。そのうちこういうプラグインが作りたいとうアイデアもどんどん沸いてきた。そうなると次にプラグインを書きたい衝動に駆られる。この衝動は非常に重要である。筆者は長い間コンシュマーゲーム開発という閉じた世界にいたせいかネット上を徘徊して人の書いたソースをハッキングするようなこともなかったし、自分の書いたソースを公開したこともない。しかしオープンソースの世界ではこの衝動が非常に大きな意味を持っているのだろう。しばしハッキングに熱中してオープンソースを肌で感じてみたい。この経験は今後のdGamesに大いに役立つことだろう。