1.導入
今日一日で考えたことを忘れないようにメモ。すごく長文です^^;
今日は「賭博破戒録カイジ」の単行本を読んだ。いきなりマンガの話から入るのも唐突だが、これが面白い。今日読んだのが、いわゆる「地下チンチロ編」というところだ。借金の返済のために、地下の強制労働所に送られるのだが、そこから這い上がるために博打を打ち大勝負をする。その博打というのが「チンチロリン」というもので、ルールは単純。サイコロを3つ振り、出た目に従って役がつく。その役で勝負するわけだ。親が一人で、子は複数いる。子は親に対して勝負、親は複数の子に対して勝負する。つまり自分が親の時は必然的に大事な勝負になる。親のときに弱い目を引いたりしたら、大負けになることは必至なのだ。
まあ、知らない人にはさっぱりだと思うが、「チンチロリン」自体はわりとよく知られている遊びのようだ。ルールなんかはいろいろ解説しているサイトもあるので、詳しくはそちらを参照して欲しい。
それで、これがプログラミングと何の関係があるのかというところだが、実はここでこの話を取り上げたのは、あることを思いついたからだ。それはつまり、この「チンチロリン」というのがちょっとしたネタになるとみた。つまり、オンラインでこの「チンチロリン」のゲームが作れるのではないかと。
さっそく、調べてみた。もう既にそういうものがあるのであれば、何も新しく作る事もない。…うーん、www.777town.netに似たようなのがあるな。でもこれは基本有料モノかな?他にはWindowsのスタンドアローンアプリなんかはあるようだ。思っていたようなのはなかった。要するに誰でも無料で手軽に参加できて、オンラインで楽しめるようなもの。オンラインゲームといっても大層なものではなくて、このゲームは派手なグラフィックとかは必要ない。必要なのはせいぜいサイコロの絵ぐらいだ。グラフィックばりばりなのは逆に作れないし。CGIだけでできると思っている。今のところ。
作ってみる価値はあるかな。前から小出しにしてた構想中のものとこれとはまた別なのだけど、こっちのほうが少し難度が低いと思うので先にこっちをやってみるか。正直、作るよりもアイデアのほうがポンポン出るので悩ましい。これ以外にも、後ろに控えているネタがたくさんある。でも今回のは、突発的ではあるけど、ちょっと面白いとは思うので。
2.詳細
さて、次はズバリ、できるのかってことだ。技術的に。できないものはできないし、できるものはできる。後は、今できなくても、少し新しい知識を取り込んだらできるようになるというケースもある。まあ、たいていこのケースだったりする^^;
では、詳細な構想を。今回に限っては、ちょっと実験的な意味もあり、構想段階から全部ぶちまけてしまいます。もしこれを読んで先に作ってしまう人が現れたとしたら、それはそれでいいです。というか、そういう展開であれば相当素敵だと思います。
それで、先ほども書いたように、CGIでなんとかできそうな予感はする。対戦処理はすべてサーバ側で行う。あとはユーザの管理だ。やはり何度も対戦しながら持ち金の増減に一喜一憂するのが、こういう博打の醍醐味だ。だからユーザの概念を導入したい。ユーザ名とパスワードを管理する。そして対戦成績も管理する。すべてサーバ側だ。
CGIとサーバ側の処理部分はもちろんPerlで。で、これはとりあえずはこのサイト(g-ishihara.com)内においてもいいかなと思う。つまりレンタルサーバで運用する。自宅の方が使えるようになってきたら移動してもいいかなとは思うが、処理的にレンタルサーバで不自由することはなさそうな気がするので。データサイズも異常に大きくなることは無いと思うし、ソケットやmod_perlなんかも必要ないだろうし。
そして、もう一つのコンセプト。それは、マンガにできるだけ近づけること。チンチロリン自体の特殊ルールなどはもちろん、シチュエーションなども。まるで、自分が地下強制労働所に送られて、そこで生死をかけてギャンブルをしているような、そんな感覚を味わえるようにする。というのは、想定している客層はもちろん、「カイジ」を読んできているはずだ。自分もこのギャンブルで遊んでみたいと思って来ているはず。ならば、マンガそのままの世界に浸れるようにしてみようと思う。
マンガを読んでいないと少し分かりにくいかもしれないが、ここで使う貨幣は、ペリカという地下世界だけの単位。10ペリカで1円に相当する。地下労働者は、1ヶ月働いて、9万ペリカの給料がもらえる。つまりたかだか9,000円程度ということだ。新規ユーザは、始めにこの1か月分の給料、9万ペリカをもってギャンブルに挑んでもらう。また、この地下世界では、5,000ペリカで缶ビール、7,000ペリカで焼き鳥なども買えたりする。他に楽しむものもない世界では、ついこういう贅沢品などに手がでてしまうというものだ(という設定。マンガでは。)。そして、50万ペリカで1日外出券が買える。
マンガではこういう設定なので、そのまま、こういう「アイテム購入」の機能も持たせたい。買ったからどうなるということもないが、まあ、持っていたら他の人にうらやましがられるかも知れないし、ちょっとした達成感も出てくるだろう。
3.ランキング
さて、オンラインならではの機能として、「ランキング」を導入しようと思う。これは全プレーヤーの総資産順のランキングだ。つまり、ユーザ名や資産、対戦成績などは全て公開される。このランキングの上位を目指してギャンブルを行うわけだ。これがプレーヤーの対戦意欲を煽るともくろんでいる。プレーヤーということでもう一つ付け加えると、最初にユーザ登録してくれたお客さんに対戦相手が一人もいないというのは変なので、最初から登録してあるプレーヤーを何人か用意しようと思う。マンガでは地下収容施設に50人ぐらいいたはずだ。それはちょっと多いかもしれないので、20人ぐらいデフォルトで用意しておこう。とりあえず、それらをNPC(Non Player Character)と呼んでおく。でもちゃんとランキングにも登場するようにする。
ランキングに表示する項目は、ユーザ種別(NPC/登録ユーザ)、ユーザ名、総資産、現金、貸し出し可能金額、借金、債権、対戦成績(○勝/○敗)、勝率、対戦可能フラグ、最低賭け金額、最高賭け金額、アイテム数(それぞれ)
4.借金制度
負けが込んで、持ち金が0、あるいはマイナスになったらどうするか。マンガでは、給料の1か月分を前借りできることになっている。もちろん貸してくれる人がいればだが。そして借りることのできる金額は6万ペリカ。つまり1か月分の給料9万ペリカを後で支払う代わりに、6万ペリカを今受け取るのだ。差額の3万ペリカはピンハネということになる。さらに、2か月先の給料を前借すると、受け取れる金額は半分の4.5万ペリカだ。つまり半分はぼったくられることになる。こんな取り決めなので、借金は何としてでも避けたいところだ。
それでも、借金ができてしまった場合は、他のプレーヤーから借りるより仕方がない。ここからはこのゲームだけの設定だが、プレーヤーは手持ちの現金の中から、いくらまで貸し出しできるかを設定できる。例えば、1か月先の給料である、6万ペリカを借りたい場合は、貸し出しできる金額を6万以上に設定しているプレーヤーを選択すればよい。この場合、借りる側は、6万ペリカの現金を受け取る代わりに、9万ペリカの借金を抱える。貸し出す側は、6万ペリカの現金を失う代わりに、9万ペリカの債権が発生する。
つまり、この貸借が成立した時点で、借りる側は-3万、貸す側は+3万の総資産の変動が起こることになる。そしてそれによって、ランキング順位も変動する。貸す側にとっては、労せずしてランキングが上がるのだから、悪い話ではない。(しかし現金は当然、目減りする。)
さて、借りたものはいつか返さなければならない。6万借りたとすれば、それを元手にギャンブルを行い、運良く勝てたとして、9万を超えた時点で自動で(強制的に)返済される。これで一件落着。ただし、そううまくいくとも限らない。もし、さらに負けが込んでマイナスになったら、2ヶ月先の給料4.5万ペリカをさらに誰かに借りなければならない。そうするより他にないのだから。この時点で借金は18万ペリカ。
ちなみに、このゲームでは給料が受け取れるのは最初の9万ペリカのみとしようと思う。つまり、増やすにはギャンブルをするしかない。待っていてもお金は増えない。これがこのゲームの借金システム。お金はプレーヤー間でのみやりとりされる。これはつまり、1プレーヤーあたりの総資産の平均値は9万ペリカで一定であるということだ。この一定金額、有限のお金の取り合いをするわけだ。
5.対戦システム
次に、対戦システムについて。プレーヤーは対戦しようと思ったら、対戦相手を選択できることにする。対戦相手は複数選択する。このゲームは3人以上で対戦しないと、親子の駆け引きが生きてこない。ただし、対戦可能フラグがついていないプレーヤーは対戦できない。対戦可能フラグはプレーヤーが自由に設定できる。つまり、自分から対戦しに行くとき以外は対戦したくないとき、言い換えると、他プレーヤーからの挑戦を受けたくない場合は、このフラグをはずしておけばよい。
プレーヤー同士の対戦について、あれこれ考えたのだが、プレーヤーがものすごく多ければリアルタイムでのプレーヤー同士の対戦もできるのだが、プレーヤーが数人しかいなければリアルタイムでの対戦はほぼ絶望的にできないだろう。そんな超人気ゲームになるとも思っていないので、リアルタイム対戦の線は外そうと思う。変わりに考えたのが、この「対戦を受ける」システムだ。自分から対戦しにいく場合は問題ないが、誰かから対戦相手に指名された場合、その場合は自動で戦う。コンピュータが勝手にサイコロを振るわけだ。まあ、言ってしまえば、このゲームはもともと勝つか負けるかは5分5分なのだ。適当にサイコロを振っても何ら問題はない。というか、むしろサイコロは適当に振る以外に方法はない。
もし、自分の知らないところで自分の資産が変動するのが嫌なのであれば、「対戦可能フラグ」をOFFにしておけばいい。しかし、ONにしておけば、放っておいても勝手に対戦して勝敗数が増えていくことになる。勝敗数の多さを人気のバロメータと考えるならば、ONにしておくのがいいのではないのだろうか。
しかし、対戦において1つだけプレーヤーの意思に左右される要素がある。それは賭け金額だ。これは通常、子側が対戦ごとに自由に決められる。小さく張って様子を見るか、ここ一番で大勝負に出るか、それは自由だ。そしてプレーヤーは、自動対戦における賭け金額を設定できる。これが「最低賭け金額」、「最高賭け金額」だ。自動対戦の場合は、この範囲内で賭け金額が自動設定される。対戦してもいいけれど、あまり大きく張りたくないのであれば、「最低賭け金額」、「最高賭け金額」ともに小さく設定しておけばいい。
ただし、この設定は他のプレーヤーからも閲覧できる。プレーヤーはこの賭け金額を参考にして、どのプレーヤーと対戦するかを選択できるというわけだ。もしかして、あまり小さく張ってばかりいそうなヘタレなプレーヤーは、誰からも見向きもされなかったりするかも。
対戦のルールについては、マンガと同一とする。ただしイカサマはない^^。純粋な勝負のみ。とりあえず詳細は省略。
う”ーまだ半分ぐらいしか書いてないけど、これ書くだけで結構時間かかる。。。とりあえず続きはまた次回。