- 作品名:
- 「
(有)鼻腔防衛網元組合 」 - 作者名:
- はりまお
- 製作開始日:
- 2009年01月01日
- 制作完了日:
- 2012年09月15日
- 制作環境:
- Pentium M 1.73GHz + 1GB RAM
- WindowsXP Home Edition SP3 + Visual Basic 2008 Express Edition SP1
- 動作環境:
- 要 Microsoft .NET Framework 3.5
- 要 ホイール & ホイールボタン付きマウス
インストールするには、新たにフォルダを作成し、その中に解凍した全ファイルを置いてください。ソース フォルダは、お好きにどうぞ。
アンインストールする時は、インストールしたフォルダごと全て削除してください。
レジストリの変更や、インストールフォルダ以外へのファイル作成は、一切行っていません。その点は、お試しにチョコットだけっていう場合も安心です。
よく晴れた朝、窓を開けると春の暖かい風を感じる。
その時、突如として異変が襲う。鼻の奥がムズムズ、ハ〜ッ ハ〜ッ ハァックシュン!! まさに恐怖の小悪魔軍団が、迫って来ているのだ。
「ヒャ〜ッヒャヒャヒャッ、絶望のアナフィラキシーショック攻撃に耐えられるかな?」
「助けてーーー! 有限会社 鼻腔防衛網元組合。」
「ムム、どこかで助けを呼ぶ声が聞こえる。出動、 有限会社 鼻腔防衛網元組合!!」
果たして、有限会社 鼻腔防衛網元組合は、人類を救うことができるのだろうか・・・。
ここで、説明しておこう。
“(有)鼻腔防衛網元組合”とは、花粉症の苦痛から人類の鼻腔を守るべく網元を寄せ集めて組織された組合である。唯一の武器は、先端に網が付いたマジックハンド。そのため、網をたくさん持っている網元に白羽の矢が立ったのである。しかし、そこは漁師をこき使ってきた網元達、タダでは働かない。営利を目的とすりため有限会社として設立する運びとなるのであった。
"Pollen.exe"をダブルクリックすれば、起動できます。
起動すると、タイトル画面が表示されます。タイトル画面を左クリックするとゲームが始まり、右クリックするかESCキーを押すと終了できます。
マジックハンドを操作して、浮遊している花粉を全て捕獲するのが目的です。基本料から捕獲活動に費やした経費を差し引いて残った額を競います。
ゲームを始めると、6つの花粉が鼻に向かって飛んできます。この花粉が全部吸い込まれ、3回くしゃみをした時点で本番スタートとなります。(マジックハンドのランプが点灯し、操作できるようになります。)
最初に基本料をもらいますが、経費として1/30秒ごとに1円ずつ減っていきます。なるべくたくさんの利益を得るために、素早く効率良い回収作業を心がけてください。花粉は、フィールド(画面)の外にも飛んでいきますので気を付けてください。
ゲームが終了したら、結果が表示され、左クリックでタイトルに戻ります。売上額が記録を更新している場合は、名前を入力するダイアログが表示されます。
ゲーム中に、ESCキーを押すとタイトルに戻ります。また、F1キーで一時停止し、もう一度押せば再開できます。
ゲーム画面にある、茶色の円が、フィールドで、さらにその中心にある2つの穴が開いた丸いのが鼻です。その周りの8方向に散らばる緑の丸が木です。
鼻から生えている棒状のものが、マジックハンドで先端に網がついています。
フィールドの左上のはバッテリで、右上に花粉の残数、右下に売上額(基本料から経費を引いた額)が表示されます。
マジックハンドは、3本のアームと網で構成されています。各アームの間に関節があります。
操作は、マウスで行います(マウスのカーソルは、ゲームの進行に全く関係ありませんが、ゲーム画面内に無いと操作できません)。ホイールの回転で操作する関節が選べ、選択している関節のランプが点灯します。左右のボタンを押せば、選択している関節でアームが回転します。
アームを動かすと、バッテリを消費します。消費量は、同時に動くアームの数によって増えていきます。バッテリの1目盛り分の電力でアーム1本を1周させることができます。
バッテリが、空になると新しいバッテリと交換されます。交換費用は、電池1本当たり100円です。交換している間は、マジックハンドを動かせません。最初のバッテリ1本は、無料です。
マジックハンドの先端には網がついていて、この網を花粉に重ねることで捕獲します。
バッテリは、最新式のバイオ燃料電池を採用しており、花粉を4つ捕まえるとバッテリ1/2目盛り分の電力が充電されます。ただし、発電が完了するまでの花粉は、網に付いているだけなので、そのまま鼻に近づけると吸い込んでしまいます。そうなると、当然発電もできなくなります。
マジックハンドが、木に接触してしまうと、花粉を飛び散らしてしまいます。操作は、慎重かつ素早く効率的に動かしてください。
鼻は、依頼主の鼻で、フィールドの中央にあります。常に呼吸をしていて、それに合わせて花粉が徐々に引き寄せられます。花粉が鼻に到達すると吸い込まれ、2つ以上吸い込むとくしゃみをします。くしゃみをする度に、花粉が2つ飛び出し、鼻の中からなくなるまで続きます。連続している回数は、鼻の下に表示されているストレスゲージに表示されています。
くしゃみに伴って、衝撃波が発生します。衝撃波は、外に広がり、木を揺らして花粉を撒き散らします。
1回目のくしゃみの時に発生する衝撃波は、スピードが速く余り木を揺らしませんが、2回目以降は速度が落ち長時間木を揺らすので2倍花粉を撒き散らすことになります。
花粉が木に重なると、動きが鈍くなる上に網を持っていけません。そんな時は、マウスのホイールボタンを押して深呼吸をしてもらいます。深呼吸は、1秒間続き花粉が鼻に吸い寄せられてきます。深呼吸の依頼には、1回につき150円の経費が掛かります。
ゲーム終了後、売上額にecoボーナスが、加算されます。ecoボーナスとは、電池を大切に使ったかどうかを評価したもので、一つの電池に対して充電した最大回数で加算額が決まります。
ecoボーナスのポイントは、電池の下に表示されます。左側が現在の電池の充電回数、右側が過去の最大充電回数を表します。新しい電池に交換すると、0ポイントに戻ります。
加算額の計算式は、下記の通りです。たくさん充電するほど加算額が増えますので、電池は大切にしてください。
1ポイントの場合の加算額 | \50 * 1 | = | \50 |
2ポイントの場合の加算額 | \50 * 1 + \50 * 2 | = | \150 |
3ポイントの場合の加算額 | \50 * 1 + \50 * 2 + \50 * 3 | = | \300 |
中身的には、特に難しいことや特殊な処理はしていないつもりです。コードが長いですが、根気があればいじれなくもないと思います。ちなみに、タイトル画面でF2キーを押せば、ゲーム中に使用している画像を見られます。何かの参考にしてみてください。
やり方が簡単そうだったので、変形フォームにしてみました。右端の縦書きタイトルバーは、見せ掛けのものなので、ここをドラッグしてフォームを移動するなど、Windowsとして通常できるような機能は搭載していません。
このゲームは、30fpsで処理するように設定しています。ゲーム中の画面左下にフレームレートが表示されるので、その値が30fpsを大きく下回るようなら、PCの処理能力不足だと思います。
ちなみに、その斜め上でピコピコしているバーは、実際に1フレーム分の処理を終えるのに掛かった時間が表示されています。明るい赤の棒は直前のフレームの処理時間を表示し、暗い赤の棒は過去1秒以内の最高値を表しています。PCに負荷が掛かるほど伸びて、白線を超えている場合は処理落ちしてるということになります。厳密なベンチマークにはなりませんが、お遊び程度と思って参考にしてください。
ランキングに変更があった場合、プログラムの終了時に保存します。保存先は、実行ファイルと同じフォルダにファイル名"Save.dat"で作成されます。
中身はテキストファイルで、タイム(TimeSpan)がそのまま記録されています。基本的に何者か分からないファイルが好きではないのと、改変されたからといって重大な被害が発生しそうにもないので、分かり易いテキストファイルとしています。ですが、場合によっては、バイナリファイル化するなどして、改変しにくくなるようにしても良いかもしれません。
記録を消去したい場合は、タイトル画面でF3キーを押すかファイルを削除してください。中身を不用意に改変すると、読み込み時にエラーとなる場合があります。
また、最速タイムを一件しか記録していませんが、トップ10などランキングを表示するようにしても良いと思います。
Ctrl + Qキーを押して強制終了した場合は、ランキングを保存しません。
今回は、制作を進めるうちにバッテリ残量によって警告音が出るようにしたくなりました。そうなると、他にも色々音を出したくなるのが人情です。
VBで音を出すとなると、WaveやMP3,MIDIなどの外部ファイルを用意して、それを必要に応じて再生するのが簡単な方法だと思います。しかしこれには問題があって、自分には音に関する知識も才能も無いので、無料で公開されている効果音に頼るしかないのですが、その手の物は、主にファンタジー系RPGを想定しているようで、なかなか使える物を見つけられないのです。それに、画像ですらプログラム内で生成しているのに音だけ外部ファイルを使うのは、どうもちぐはぐで納得できません。
そこで、何とかプログラムから直接鳴らせないか調べてみたら、音程や再生時間を指定してビープ音を鳴らせる[Console.Beep]という機能と、APIでMIDIをコントロールする方法を見付けました。.NETにしてから、APIの使用は避けていたのと、ピアノの音しか出せなかったのでMIDIは却下し、[Console.Beep]を使うことにしました。
開発に使ったノートPCで[Console.Beep]を使うと、なぜか他の音に比べてビックリするほど音が大きい上に、作ってみたジングルがあまりにもショボ過ぎて小っ恥ずかしいだけなのでコメントアウトしてしまいました。
ちなみに、[Console.Beep]は、発音中に他の処理が止まってしまうという残念な仕様だったり、音量が指定できないなど制約があります。だから、MSX-BASICなどの[PLAY]分のようにゲームの処理から独立したテンポで再生するのは難しいので、自由度は低いです。と言うよりも、今時のシステムが、こんな前時代的な手法を想定していないのでしようがないのでしょう。
フレームレートのコントロールに、[System.Diagnostics.Stopwatch]クラスを採用しました。以前は、[System.Environment.TickCount]プロパティを使用していたのですが、更新頻度が遅いのが悩みの種でした。ある日、より高精度の[Stopwatch]を知って、使ってみたら断然安定感が増しうれしい限りです。ただし、1秒間の計測には、[TickCount]を使用しているので、実際に表示される値にはそれなりに誤差があると思います。
タイトルからゲームを開始する間に、[Timer]コントロールを挟んでいます。
今作では、[picScreen](PictureBox)の[MouseUp]イベントが、ゲームを開始するきっかけになっています。この[MouseUp]イベントから直接ゲームのメインループに入れば(イベントドリブン型プログラムの中に逐次実行型プログラムの手法でゲームのメイン部分が組まれている)分かり易いのですが、この方法には1つ問題がありました。
その問題点とは、PictureBoxの[MouseUp]イベントを終了しないでメイン部分を構成する永久ループ(もちろん[DoEvents]を挿入している)に入ると、その次に発生した他のコントロールのイベントが認識されないのです。ただし、1回どこかをクリックするとイベントを認識できるようになるので、おそらくフォーカスの遷移に関する問題だと思います。しかし、幸いにも全てのコントローラの[MouseUp]イベントに共通する現象ではないようです。
この問題を回避するには、[picScreen]の[MouseUp]イベントをいったん抜けてから、メインループを呼び出す必要があります。そこで、今回は、[Timer]コントロールで橋渡しする方法をとりました。[picScreen]の[MouseUp]イベント内で[Timer]を有効にし、[Tick]イベントが発生したら[Timer]の無効化とメインループの呼び出しを行います。
ただ、何もせず[Tick]イベントを待つだけでは味気ないので(もちろん、[Interval]プロパティを短くすれば認知できないが)、ゲーム開始前のメッセージを表示してみました。
操作方法については、当初アームの回転にホイールを使う(左ボタンを押しながらで第1関節、ボタンなしで第2関節、右ボタンを押しながらで第3関節を操作する)ことを考えていました。その方が自然な感じがしたからですが、最終的にボタンで回転する方にしました。それは、ホイール1ノッチでアームが1カウント分動くのでは、簡単(単純)すぎるのではないかと考えたからです。この辺も、改造してみても良いのではないでしょうか。
ゲーム展開は、ランダムに進行し毎回違う展開になるようにしています。
しかし、スピードを競うゲームの性格上、これでは公正な競争にならないという意見もあると思います。そんな場合は、[PlayInit]プロシージャの冒頭にある乱数の初期化部分にシード値を設定してください。これで、毎回同じ展開になります。
画面上の文字列の管理と描画には、PML3を使用しています。PML3の詳細は、こちらを参照してください。
時はVB6時代。
『宇宙の彼方から迫り来る隕石から、2機の周回軌道人工衛星間に網を張って、地球を守る』という内容の“(有)地球防衛網元組合”(以下、“地網組”)と、『障害物の中に散らばったお宝を2人のプレイヤがマジックハンドを駆使して奪い合う』という内容の“マジック ハンド テクニック”(以下、“M.H.T.”)の構想があったそうな。
もともと、“地網組”をプロトタイプと呼べるぐらいまで創ってみたんやけど、これがまぁ隕石の出現タイミングとか量とかを調整する技量がなくてねぇ。間延びした上に難しいときたもんで頓挫。そのまま永〜い眠りにつきましたとさ・・・あぁお蔵入り。
一方“M.H.T.”はと言えば、対戦ゲームに必須のCPU対戦モードを実現するためのアルゴリズムが皆目見当がつかない状態でネタ帳止まり。
「何かイィのないかなぁ、どうしたもんかなぁ」なんて悶々してたそんな時「この2つを一緒くたにしてしまえばえぇやん!」と閃いちゃた訳ですよ。
それで“地網組”をベースにゴニョゴニョやってみたら、地球が鼻となり、隕石が花粉となり、人工衛星と網がマジックハンドに化けて、本作“(有)鼻腔防衛網元組合”に生まれ変わっちゃいました。めでたし、めでたし。
時はさらに遡ってMSXターボR時代。
MSX・FANという雑誌のプログラム投稿コーナーに「紫外線をカット」と「EATING」という作品が掲載されてて、実は、これらが“地網組”と“M.H.T.”の素ネタやったりする。
「紫外線をカット」は、周回軌道上の3つの衛星をタイミングよく止めて、その衛星間をオゾンバリヤー(三角形)で結び、地球(円)をはみ出さないように囲むという、単純明快で面白い着想のワンキーゲーム。見事クリアできれば、地球が一回り大きくなって次ステージへ進むんやけど、衛星軌道は大きくならないから、単純に考えるといずれ三角形に収まりきらなくなってゲームオーバーってことでしょ(実際のプログラムでは、そこまで行かずに終了したのかも・・・)。このドン詰まり感が腑に落ちなくって、勝手に克服しちゃおうとしたのが“地網組”やったわけ。
「EATING」は、3つの関節がある象の鼻を操作してリンゴを取るゲームなんやけど、これが滅茶苦茶難しくて、一個も取れへん。それが悔しくって悔しくって、「自分にも遊べる多関節ゲームを作ってやる〜!!(多間接そのものにも興味あるし♪)」って考えたのが“M.H.T.”やった。
まぁ、なんですなぁ。どんなネタにも素があって、どんドンどんドン繋がって行くってことですな。
時は2013年、MSX 30周年。本作やその前身のタイトルにある「網元」に関する重要なことを思い出した。
その昔、MSXで草の根BBSをするためのソフトをアスキーが売ってまして、それの名前が「網元さん2」(1があったのかな?)やったんですよ。当時の自分には(いや今も)、“パソコン通信”とか“草の根BBS”とか“お湯ネット”とかチンプンカンプンやったんやけど、MSXマガジンの記事を見てからというもの(読んではいないんやね)、妙なことにこの名前が頭の隅にこびり付いちゃってて(今まで忘れてたくせにィィっ)。
それで、どこかで「網元」という言葉を使いたくて使ってみたくてね。でも漁師という世界に縁もゆかりもない日常では、そんな機会絶対めぐり合えない。ウズウズ、ウズウズ。「え〜ぃ、めぐり合えないなら創ってしまえぃ!」と・・・。我ながら、なんか大変やなぁ。
あっそうそう、もちろん自分自身花粉症です。