2019年08月27日

意外? デジタルオーディオプレーヤーの裏の使い方

外出中に手軽に音楽を聴くことのできる便利なツール、デジタルオーディオプレイヤー。
でも、ただそれだけで済ますのは、もったいないと思いませんか?

そこで今回は、デジタルオーディオプレイヤー(以下DAP)を、それ以外の目的で使ってみよう、という記事です。

~簡単ラジカセ?

DAP用のスピーカーをつなげば、イヤホンを使わずに、スピーカーからの音量で音楽を楽しむことができます。ネットラジオを入れておけば、それを聞くこともできますし、まさに簡単ラジカセ、といった感じですね。
この使い方のポイント、普通のラジカセとは違って、場所をあまりとらない、というところです。さらに、風呂場で聞くことのできるタイプもあるので、お風呂場でゆっくりと楽しむこともできます。

家の中でも、手軽に場所をとらずに音楽を楽しみたいという方にお勧めの使い方です。

~USBメモリ?

すでに知っている方もいるかもしれませんが……
DAPには、小型ハードディスクやフラッシュメモリが、音楽を記録しておくパーツとして使われています。(Wikipediaより)
つまり、実際にはUSBメモリやポータブルHDDと変わらないわけですね。
ということは……そう、普通のファイルを保存することもできるかもしれないということです。

というわけで、DAPの中には、音楽以外のデータを保存することもできるものもあります。
実際、裏編の持っているちょっと年代の経ったネットワークウォークマンでも、ファイルを保存することができます。
裏編のものの場合、パソコンに接続すると、エクスプローラからはUSBメモリと同じ、リムーバブルディスクとして表示されます。あとは、そこにファイルをコピーしたりすればOKです。

ちょっとしたデータを保存したり、別のPCにデータを移動させたりしたときに便利ですよね。

~最後に
ここまで、デジタルオーディオプレイヤーの使い方を説明してきましたが、どうでしょうか?
まだまだ、未知の可能性が眠っていそうなデジタルオーディオプレイヤー。みなさんはどのように使っておられるのでしょうか?
「俺はこんな風に利用してるぜ!」という方は、ぜひとも編集部にお知らせください。
紹介しちゃいますよ。

これからも、この便利なグッズを使い倒していきましょう!

それでは!

==========

※次の更新は、特集『フリーオフィスソフト大研究』の予定です。お楽しみに!
posted by 裏編 at 15:01| Comment(0) | PCメディア情報 | 更新情報をチェックする

2019年08月22日

URAURA! Game Review :ナムコミュージアム(PSP版)【バンダイナムコゲームス/PSP】

 20世紀代のナムコのゲームは、縦シューティングの傑作『ゼビウス』や、かの『パックマン』をはじめ、名作ぞろいであった。そのゲームの数々を収録したソフト、『ナムコミュージアム』。
 今月紹介するのは、そのナムコミュージアムのPSP版である。
 PSP版とはいってもこのゲーム、数作のオリジナル版ばかりか、パックマン、ギャラガ、ディグダグ、ニューラリーXの四作品のアレンジ版を収録した豪華版なのである。

【 オリジナル版 】
 さて、このナムコミュージアムに収録されているオリジナル版は、ギャラクシアン、ギャラガ、パックマン、ミズパックマン、ディグダグ、ラリーX、ニューラリーXの7本となっている。
 ミズパックマンを収録しているのが、なかなかマニアックといえよう。ただ、ギャラクシアン、ギャラガと続いたら、ギャプラスも入れてほしかったような気がするが。
 なお、画面構成はいずれもナムコミュージアム独特の、右にスコアや残機などの情報が表示されているフォーマットになっているが、ゲーム感覚は当時のまま。
 さらに、アナログスティックでの操作も可能になっていたり、画面サイズも変更できるようになっていたりと、いたれりつくせりとなっている。

【 アレンジ版 】
 そして今回の目玉、アレンジ版である。 先ほど話した通り、このPSP版に収録されているのは、パックマン、ギャラガ、ディグダグ、ニューラリーXの4作品。
 これらのアレンジ版は、前にもアーケードにて、『ナムコ・クラシック・コレクション』に収録されているのだが、ここに収録されているのは、それらとはまた違ったアレンジをされていて、クラシック・コレクションに収録されているものを遊んだ人にも、とても楽しめるようになっている。

パックマン
 クラシック・コレクション版にも、ダッシュやジャンプ(ワープ?)といったギミックがあったが、PSP版ではさらに、上下するエレベータや扉などのギミックが追加されている。さらに、各ワールドのラストにはボスが待ち構えている。ボス戦では、パワーエサを食べ、分裂したイジケを食べていき、全滅させればクリアとなるぞ!
 とても面白くはまるできになっているが、あるワールドのボスで、ボタンを押してジャンプする必要があるというのが、ちょっといただけない。パックマンは、レバー(方向キー)だけで遊べるのが持ち味だったのだが……。
 あと、クラシック・コレクションにはあったパワーアップもないのも悔やまれる。
 だが、それを除けば、だれでも楽しめ、熱くなれる一本だ。

ギャラガ
 今回の一押しがこれ! 今回は、デュアルファイターにさらに合体することで、平行三連や三方向ショットなど、さらに強化したトリプルファイターになれるようになっている。これは、ギャラガ88の要素を取り入れたものだろう。さらにこのデュアルファイター、トリプルファイターは、捕まったボスの種類によって、攻撃方法が変わるようになっており、なかなか面白くなっている。
 もちろん、このギャラガでも、ところどころでボスキャラが出てくる。このボスキャラたちは、ハチやクワガタなど、昆虫がもとになって、さらに色々な攻撃をしてきて楽しませてくれる。
 序盤がちょっとぬるい感じがするが、とっても面白いゲームだぞ。

ニューラリーX
 このアレンジ版では、普通通り旗を全てとるほかに、『全て旗をとったうえでゴールする』、『敵が隠し持っている旗を奪う』と、面のギミックが変わっている。
 これも、前二作に比べるとやや地味だが、楽しめる一本となっている。

ディグダグ
 ディグダグのアレンジ版は、オリジナル版に比べると、プレイしやすくなっているところが感じられる。
 岩落としも、オリジナル版に比べるとやりやすくなっていて、稼ぎやすくなっているのが嬉しい。もちろん、ボス戦やパワーアップアイテム、オリジナルの敵もいたりして、なかなか楽しめる。
 オリジナル版のディグダグで苦戦した方は、ぜひプレイしてみてはどうだろうか?

【 Vol2もあるけれど…… 】
 さて、このPSP版ナムコミュージアムは、Vol2も出ているのだが…… オリジナル版の収録タイトルは、『キング&バルーン』、『ボスコニアン』、『ゼビウス』、『マッピー』、『ドルアーガの塔』、『グロブダー』、『ドラゴンバスター』、『ディグダグII』、『モトス』、『ローリングサンダー』、『ドラゴンスピリット』の11本もあるのだが、アレンジ版は二本、しかも、そのうちの一本はVol1にも収録されているパックマンのアレンジという、ちょっと残念なできとなっている。ゼビウス、マッピーはクラシック・コレクションにてアレンジ版で出ているので、収録してくれたら嬉しかったのだが……。他のゲームも、アレンジしがいがあるゲームばかりと思っていたので、ちょっと残念だ。
 だが、このゲームはやはりとても面白い。 オリジナル版で懐かしい気分でプレイするもよし、アレンジ版で今風に熱く燃えるもよし。一本で二度楽しめるこのソフト、ぜひプレイしてみてはどうだろうか?

==========
※次の更新は、『意外? デジタルオーディオプレーヤーの裏の使い方』の予定です。お楽しみに!
posted by 裏編 at 09:11| Comment(0) | その他のゲーム情報 | 更新情報をチェックする

2019年08月19日

プチコンゲームプログラミング講座~第10回「サイモンゲームを作ろう」

文 プチ太郎 氏
=-=-=-=-=-=-=-=-=-=-
 今回は訳あって(理由は文章の最後で!)アクションゲームでも思考ゲームでも自由に作れたのですが、第六回のように、以前と同じジャンルを再度作りたくないという考えがありました。で色々作りかけて、あれはプログラムが長い、これは締切まで完成できるか…と考えた結果、このゲームを思いついて、予想通り短時間で完成できました。

教材プログラム 10 「サイモン」(ファイル名「KOZA10」)
koz10_s1.jpg

★ ゲームの内容と説明 ★
 何かボタンを押すとゲーム開始で、4つの色のボタンが(以下「四色」と略す)、順番(以下「現回数」)に音を出してポーズをとります。左下に表示されている回数(以下「最大回数」)を全部終えると「今の順番を繰り返せ!」とメッセージが出るので、左の十字ボタンでも右の丸ボタンでも、さっきの順番と同じボタンを押してください。間違えず押せたらクリアです。最大回数は当初1回ですが、クリアするたび増えて、覚えるのがどんどん大変になります。一度でも間違えたらゲームオーバー。

Simon_game.jpg

 「サイモン」は、1978年にラルフ・ベアという発明家が作った携帯ゲームで(光線銃ゲームや家庭用ゲームも発明しています!)、いわゆるミニゲームですが、結構奥が深い上にプログラムが簡素にまとまる特徴があります(毎回文章の容量を規定内に削るのに苦労していましたが、今回は全文書いても少なめでした!)この連載では第二回で4方向移動ゲームをやりましたが、今回は四色の要素を配列変数に入れて、コンパクトにするなどの技術を勉強しましょう。

★ プログラムの事前説明 ★
 第五回で説明したテキスト以外の色コードについて、また短くする工夫を使っています。白を出すにはRGB関数か#WHITEだが、今回は3号のあるユーザが発見した「-1を指定すると#WHITEと同じ」を使っています。プチコンでは-1の二進数は、第五回の説明通り「10000000000000000000000000000001」となります。色指定の場合はこの左端1ビットをマイナス符号でなく、非常に大きな数と捉えるので、RGB(255,255,255)より大きいつまり#WHITEと認識します。前回の「!」同様、プログラム中で目立ちやすく、かつ短くて便利です。

koz10_p1.jpg

★ 初期設定 ★
 2行目のDIM OTO[99]は最大回数です。これも第五回で書いた通り、コンピュータと配列はゼロから始める(異世界生活ではないw)事が多いですが、人間からの見やすさを考え、1から始める(つまり[0]はダミーで使わない)事もあるので、今回はそうしています。[99]という事は最大添字が98なので、最大回数が98を超えるとエラーでゲームが止まりますが、そこまで行く超人は稀にしかいないと思い、あえてそのままです。なお配列の最大数を増やすにはPUSH、減らすにはPOPを使うので、興味ある方は調べてみて下さい。
 添字が[4]のDIMは全て、四色・四方向の定義です。オリジナルはアブストラクト(単なる記号)ですが、ここでは前回に続き、RPG向けの赤勇者・青魔女・緑僧侶・黄盗賊を使ってみました。サイモンでは画面を動くキャラこそ無いものの、4方向に配置したボタンがゲームの基本です。4方向の順番はプチコンの各要素でバラバラで、例えば十字ボタン=上下左右、丸ボタン=右下左上、文字キャラの人や車・スプライトの112~444=上右下左、464~1119=右下左上などとなっています(スプライトは一部違うものもあり)そこでここではFORとREADを使い、[0]~[3]に時計回りで上右下左の順番を入れています。これで四方向に関わる処理は、これら配列変数の添字を[0]~[3]で指定すれば、容易に使えます。順番が元々上右下左であるデータは、配列を使わずに掛け算で出しています。
 その後13~16行のGIで、左上のタイトルと中央のボタン操作を表示しています。

★ メイン処理 ★
@INIT リプレイ時の初期設定
 19行のGIは、リプレイ時の回数表示を消しています(@KAISUを参照)。20行目のDEF TENMETUは、四色全部を基本形のキャラに戻していますが、これは四色ともゲームオーバー時に通常と違う姿にしているためです(@OVER参照)21~22行はいつものスタートボタン待ちです。23行からはその後のスタート処理で、24行のDEF GI2でスタートメッセージの表示。21~22行で四色を同時に1秒だけ、ボタンを押した姿にしています(この処理については、DEF TENMETUも参照して下さい)

@LOOP 最大回数を一回増やしてプレイの繰り返し
 こうした処理は前回書いた通り、本当はGOTOを使わない構造化プログラミングが一番よいのですが、今回のゲームで構造化を使うと、むしろフラグ変数などを使って複雑になってしまうので、スパゲッティにならない程度のGOTOを使い、簡素にまとめてみました。
 変数K_ALLは最大回数で、19行でゼロにした後、@LOOPで32行を通るたびにINCで1ずつ増えていき、新たなOTO[K_ALL]に0~3の乱数を入れていきます。なおこの乱数が妙に偏ることが結構ありますが、これはプチコンやこのプログラムのバグでなく、プチコンの疑似乱数が0~3だと、たまたま偏りが出やすくなる様です。
 変数の再設定が出来たら繰り返しの開始です。33行のGI2で「じゅんばんを おぼえろ!」とメッセージを出し、34行のFOR…TO K_ALLで、最大回数K_ALL分だけTENNMETUを呼び出し、プレイヤーはこれを覚えます。36行はプレイヤーの繰り返し入力用の準備で、現回数を格納しておくK_NOWを1にします。

@LOOP2 ポタンが押されるまで待つループ
 39行で@KAISUを呼び出して、現回数と最大回数を表示します。実はこの位置に書くと、ボタンが押されるまで小刻みに@KAISUを実行するので、わずかながら無駄な負荷をかける非効率処理なのですが、文字表示のチラつきや処理落ちは起きず、これも処理が簡単という事で、そのままにりしてあります。
 40行のBL(BUTTON・LEFT)は左のボタンの1(上)+2(下)+4(左)+8(右)=15で、BR(BUTTON・RIGHT)は右のボタンの16(A)+32(B)+64(X)+128(Y)=240で、BUTTON関数とANDをとっています(こう書いている処理の理由も、第五回を読み返して解読してみて下さい)それを元に、左と右どちらかで四方向の一方向だけボタンを押したかが41~43行で該当すれば、-1だった変数V(40行で代入)に0~3の値を入れます。この処理は[0]から[3]まで4行並べてもいいのですが、今回は参考例として、FORループで3行にまとめた記述としました。
 Vが-1でない場合はOTO[K_NOW]と比較し、同じつまり正解なら44行で@ICCHIに、違うつまりミスなら45行で@OVERに飛びます。
 Vが-1のままならボタンを押さなかった事。WAITを60分の1秒だけ待って、Wにカウントを1加えます。47行で60で割った余りがゼロ、つまりWAIT 60こと一秒たったなら、プレイヤーに時間経過を知らせるため、早押しクイズのように一秒ごとに、BEEP 31で「タッ」と音を出して急かします。48行でWが600を超えたなら10秒オーバーなので、GIでタイムアウトを表示し、やはり@OVERに飛びます。それにも該当しなければ、49行で@LOOP2に戻って、入力待ちとカウントを繰り返します。

★ 定義済み処理 ★
@ICCHI 正しいボタンを押した時の処理
 TENMETUで正しい四色だけ白にします。この後WHILEとBUTTONでループをとっていますが、これは正解の後もボタンを押し続けた時、次の現回数が違う四方向だと、自動的にミスとしてゲームオーバーになってしまうので、指をボタンから離すまでわざと待つためです。また押したときのキャラの姿が、当初は中央のボタンを指差していましたが、つられて反対方向のボタンを押してしまうのでw外側に向けました。このキャラ番号も向きの関係で不連続になったので、計算でなく配列変数SS[i]に入れて、使うキャラ番号を求めています。
 53行で現回数と最大回数を比較し、最大回数が多かったらまだ残りがあるので、現回数を1増やしてWAIT 10で少し待ち、@LOOP2に飛ばして次の入力待ちです。

koz10_s3.jpg

 でなければ最大回数まで行ったのでノルマクリア。54行で「よくやった!」のメッセージを出し、55行でBGMPLAYによりファンファーレ。56~60行は四方向全部を躍らせるためです。第七回でやったSPANIMの記号の区別は覚えていますか? Cが色、XYが座標、Iがキャラ番号ですね。55行のA=96は四方向が踊っている時間で(つまり約1秒半)、Aから変数D・B・Cを求め、それをSPANIMで使っています。どの変数がどのSPANIMでどう使われているのか、一つ一つ計算してみましょう。61行のBEEP 71で「やったね!」の声を出して、また@LOOPに飛んでで最大回数1からやり直しです。
DEF TENMETU LS,LA 四色の1つの表示を切り替える
 まず「IF LA THEN」なら(この記述の意味は前回参照)、四色の中からLSだけ、-1で明るく表示して、@ICCHIで説明したSS[LS]で指差しポーズを出します。

koz10_s2.jpg

 ここで音を出しますが、BEEPよりBGMPLAYと文字列で自作メロディを出す、いわゆるMML(プチコンではmkIIから実装されています)の方が良い音になったので、そちらを採用しました。この講座ではMMLは扱ってきませんでしたが、実は現代式のMMLをよく知らないもので(^^;)、ここでは最低限の文法だけで作っています。「@+数字」はBEEP同様に音色番号で(これは国際規格です)、今回使っていませんが、演奏速度や音符の長さも指定できます。ドレミファのメロディは文字順でなく「CDEFGAB…」となるので、CHR$(67+LS)を使って四色の[0]を"C"/ド、[1]を"D"/レ、[2]を"E"/ミ、[3]を"G"/ファとしました。音が出終わるまで、WHILEとBGMCHKでループをかけて待っています。
 その後LAが1でも0でも67行を実行し、四色の暗さとキャラを元に戻しています。
DEF GI LX,LY,L$,LX2,LY2,LC1,LC2 GPUTCHRで背景に色が付いた文字を出す
 第九回と同じです。
DEF GI2 L$,LX2,LC1,LC2 LX=30・LY=26・LY2=2に固定してDEF GIを実行
 メッセージ表示のうち、右下はメインとして非常によく出すので、処理をまとめました。
DEF GI0 LX=30・LY=26・LY2=2に固定して文字を消す
 同じ場所で文字を消す処理です。GOSUBでもいいが、整合性を出すためDEFにしました。

@KAISU 左下に回数を表示
 DEF GIで現在に回数と最大回数を表示します。本来のサイモンには無いのですが、こうした表示は、数字がやや多めに出てくる処理ではよく見られるので、入れてみました。同時に「最大何回の繰り返しで何回目まで行ったか」というスコア表示の役目にもなっています。
 84行ではSTR$関数を使って、K_NOWとK_ALLを変数A$に入れており、これを86行のDEF GIで表示しています。ただし最大回数が増えると、現回数が小さい時に表示文字数の増減が大きくなり、以前表示したGIが右に残ってしまうので(こういうのをゴミと言います)、85行でそれより少し長い分スペースを表示して、必ず消す様にしています。

koz10_p2.jpg

@OVER ゲームオーバー処理
 90行で四色全部を驚いた顔にし、次の91行ではタイムオーバーでなければ、本来押す予定だった正しい色を、コケた姿にしています(前回のバトルゲームで倒れた時と同じ)92~92行でミスの表示をし、BEEP 122のサウンドが終わったら、ゲームオーバー表示以後はこれまでと同じです。

koz10_s4.jpg

★ お別れのご挨拶 ★
 さて、第0回も含めれば11回も続いたた当連載、実は今回で終了となります。
 同じ事をやっている松原拓也さんの「日経ソフトウェア」のプチコン講座を目指して頑張りましたが、同じゲームはやりにくいし、作ろうと思ってもなかなか上手く作れなかったり、こんな難しいゲームと解説でいいのか、もっと簡単にしようか…思い返すと、サンプルゲームのジャンルや内容があまりに偏り過ぎて、それはひどいものでした(三回やった予習・復習は「逃げ」でなく、必要なものとしてやりましたが…)三次元迷路とかトランプゲームとか、松原さんの連載とダブっても、私のプログラムでやるべきでしたね(^_^;)
 「プチコン4が出たら、連載形式で毎回仕様を実装していく、大きめのゲームが作れたらいいね」と、B-Magaさんと話していたのですが、私がプチコンを触れる時間が減ってしまったため、残念ながら終了させて頂く事にしました。決してB-Magaさんとの関係が悪化したのでなくwちゃんと円満終了です。
 皆さんに対してどれ程役立ったか判りませんが、今後ゲームを作る際、少しでも参考になれば幸いです。
 では、さようなら!

★今回の教材プログラムは、サーバにアップしてありますので、サーバからダウンロードしてご覧下さい。
公開キー  :7P33E334
プロジェクト:KOZA
ファイル名 :上の教材プログラムの見出しをご覧下さい。
=-=-=-=-=-=-=-=-=-=-
次の更新は、『URAURA! GAME REVIEW』の予定です。お楽しみに! 

2019年08月15日

師匠TのチャレンジARSゲーム!~第拾六回:『ドリームランド』 【マイクロキャビン】

ars1908-01.jpg

※ここに掲載された画像は、問題があれば削除いたします。
 ここに掲載されている画像の二次使用を禁じます。

 うむ、師匠Tである! 今月はレトロアドベンチャーを紹介するぞ!
 今回のお題は、『ドリームランド』。なんと! このチャレンジARSの元ネタかつ偉大な大先輩である『山下章のチャレンジ!アドベンチャーゲーム』の記念すべき第一回に登場した、すごいゲームなのじゃ!
 それだけあって、なかなか歯ごたえのあるゲームじゃ。チャレンジのしがいがあるわい。
 それじゃ行くぞ。

どんなゲームも、完全制覇じゃ!

【 本編じゃ! 】

ars1908-02.jpg
まずは、とある家の前からスタートじゃ。
家とみれば入りたくなってくるじゃろうが、まだまだ。
まずは、家の周りを歩き回って調べてみても遅くはないぞ。

ars1908-03.jpg
むむ、CAGE(かご)が置いてあるぞ!
日本ではなじみは薄いようじゃが、外国では、ネズミはかごで捕まえるようじゃ。

ars1908-04.jpg
家の中に入ると、さっそくねずみが!
こいつを捕まえたいが、ちょっと待て。
そのための道具は持っておるか?

ars1908-05.jpg
暖炉のある部屋。
一見、何もなさそうに見えるが、実はここにはあるアイテムが隠されておるぞ。

ars1908-06.jpg
家を出て進むと猫と出会った。
彼はおなかをすかしておるようじゃ。
猫といえば……
とっむっとじぇり~、なっかよっくけんかしな♪
……こほん、失礼(汗

ars1908-07.jpg
続いて、鍵を売っている自動販売機を見つけたぞ。
自販機の使い方なんて、説明しなくてもわかるであろう?

ars1908-08.jpg
次の家には、天井に穴が開いておる。
前の家であるアイテムを手に入れておれば、上に行くことができるが……その前にもう一つ。
あることをしておく必要があるぞ。

ars1908-09.jpg
さらに次なる家では、壁に小さな穴が開いておる。
どうすれば先に進めるか……と。
そうじゃ、深く考えなくても、壁に……ほれ。

ars1908-10.jpg
下水道までやってきたぞ。
ここからどうすれば先に進めるか、そしてこの先どうなるかは……

ここから先は君の目で確かめるのじゃ!!
健闘を祈っておるぞ!

※この記事に使われている画像の二次使用を禁じます。
※このゲームの著作権は、マイクロキャビンにあります

==========
次の更新は、『プチコンゲームプログラミング講座』の予定です。
お楽しみに!

posted by 裏編 at 09:04| チャレンジARS | 更新情報をチェックする

2019年08月12日

ActiveBasicとDXライブラリでゲームプログラミング!~第10回・シューティングゲームを作ろう!その2

n88_reon.gif
玲音:どうもこんにちは! B-Maga編集部の紅一点・玲音です!

n88_kaede.gif
楓:こんにちは! その玲音先輩に講座に引きずり込まれた、後輩の楓です!

n88_reon.gif
だから、引きずり込んだんじゃないってばぁ……。
さてさて、シューティング編第2回は、自機の移動と、弾の発射をやっていきますよー。

n88_kaede.gif
はーいっ。

~その前に……

n88_reon.gif
その前に……ごめんなさいっ。
前回説明した準備と、プログラムについて、いくつか間違いがありましたので、訂正させていただきますっ。

n88_kaede.gif
まず準備についてですが、画像を入れる他に、することがあったのでした。下のファイルをダウンロードして、解凍してできた二つのファイルを、プロジェクトのフォルダにコピーしてください。


n88_kaede.gif
なお、このファイルは、配布元のサイト様が閉鎖されてしまったので、やむを得ずこちらで代理公開させていただいてます。ご了承ください。

n88_reon.gif
さて、それができたら、元型のプログラムの一行目を次のように直してくださいね。

(旧)
#include "../DxLib.sbp"

(新)
#include "./DxLib.sbp"

n88_reon.gif
これができればOKですよ。この説明が抜けていたこと、改めて謝罪させていただきます。申し訳ありませんっ。

n88_kaede.gif
さて、それでは本題にいきましょうー。

~キャラを表示させてみよう

n88_reon.gif
さて。それでは、まずは自機のキャラを表示させてみようか。
まずは……

''※このほかにも必要な変数があればこの下に追加してください

n88_reon.gif
この行の下に、次の一行を追加してね。

abdx1908-l01.JPG

n88_kaede.gif
自機キャラのグラフィックのハンドルを入れる変数を用意してるんですよねっ。

n88_reon.gif
その通り。その下のpX、pYは自機の座標を入れる変数だよ。
では、そのグラフィックを読み込む処理を書いていこうっ。サブプロシージャMaterialLoadに、次の一行を書いてね。

abdx1908-l02.JPG

n88_reon.gif
そしてそれが済んだら、新しい関数、JikiDraw()を作りましょう。内容はこの通りだよ。

abdx1908-l03.JPG

n88_kaede.gif
(変数pX, 変数pY)の位置に、自機を表示させてるんですね。あっ、先輩、でもまだpXとpYの値を決めてませんよ?

n88_reon.gif
あっ、そうだったね。それじゃ、サブプロシージャPlayInitに次の行を書き加えよう。

abdx1908-l04.JPG

n88_reon.gif
さて、ここで元型にもともと備わってる定数について説明するね。
SCREEN_XとSCREEN_Yは、ゲーム画面の右上の座標だよ。

n88_kaede.gif
どうして、(0, 0)に固定しないんですか?

n88_reon.gif
それは、ゲームによっては画面を全部使わずに、画面の中央あたりにゲームの画面を置いて、その外にスコアなどの情報を置く場合があるからだよ。そういう画面構成にすることも考えて、画面左上の位置も変えられるようにしてあるんだよ。

n88_kaede.gif
なるほどー。

n88_reon.gif
それと、SCREEN_WとSCREEN_Hは、ゲーム画面の幅と高さを表す定数だよ。

n88_kaede.gif
なるほどっ。

n88_reon.gif
それじゃ後は、サブプロシージャGameMainに、さっき作ったJikiDrawを呼び出すコードを書きましょう。このコードを書いてね。

abdx1908-l05.JPG

n88_kaede.gif
できましたーっ。……あれ? 先輩。実行しても、何も起こりませんよ?

n88_reon.gif
え? あっ……! ごめんごめん。臨時的に、Title()と書かれた行の下に、次の命令を書いてくれるかな?

abdx1908-l06.JPG

n88_reon.gif
元型では、タイトル画面でスペースキーを押してゲームスタートする前提になっているので、この行が抜けていたの。もちろん今回も、タイトル画面の処理をいれたら、この行は消すからね。

n88_kaede.gif
はーい。

n88_reon.gif
それじゃ続いて、このキャラクターを移動させよう!

~自機を動かそう!

n88_reon.gif
ではまず、自機を動かすためのサブプロシージャを作ろう。名前はJikiMoveにしておこう。

abdx1908-l07a.JPG
abdx1908-l07b.JPG

n88_reon.gif
それができたら、サブプロシージャGameMainに、JikiMoveを呼び出すコードを書き加えましょう。JikiDraw()の前に、次の行を書き加えるんだよ。

abdx1908-l08.JPG

n88_reon.gif
ここまでできたら、実行してみてね。

n88_kaede.gif
おぉっ! 自機がカーソルキーで動かせますよ!

n88_reon.gif
このサブプロシージャの前半部分(赤枠の部分)は説明しなくてもいいよね。押されたカーソルキーによって、位置を表す変数の値を変えているだけ。ここのコツは後半部分(青枠の部分)だよ。

n88_kaede.gif
前半部と同じく、IF文がたくさん並んでますね。ここでは何をしてるんですか?

n88_reon.gif
ここでは、キャラクターがゲーム画面をはみ出ていないかをチェックして、もしはみ出ていたらはみ出ないように位置を修正しているんだよ。具体的には、X位置が画面の幅の範囲を超えていないか、Y位置が画面の高さの範囲を超えていないかをチェックしてるの。

abdx1908-z01.jpg

n88_kaede.gif
なるほどー。

n88_reon.gif
さて、次は弾を発射させるよ!

~弾を発射しよう!

n88_reon.gif
さて、次は弾を発射するわけだけど、弾には位置だけでなく、存在しているかどうかのフラグが必要になるよね。

n88_kaede.gif
あ、そうですね。

n88_reon.gif
その考えをさらに進めて、存在しているフラグの立っている弾だけ移動させて、表示させるようにしようと思います。そして、発射ボタンを押した時に、フラグが立っていない弾のフラグを立てて、弾が画面外に出たか敵に当たった時にフラグを倒す、と。

n88_kaede.gif
なるほどー。

n88_reon.gif
それでは、まずは弾の情報からだね。

''※このほかにも必要な変数があればこの下に追加してください

n88_reon.gif
この行の下あたりに、次の行を追加してね。

abdx1908-l09.JPG

abdx1908-r01.JPG
▲ 入れた後はこうなります(青枠が追加した部分です)

n88_kaede.gif
hndShotは、弾の画像のハンドルが入る変数ですよね。

n88_reon.gif
うん、そうだよ。そして、ShotFlag、ShotX、ShotYはそれぞれ、フラグ、X座標、Y座標を入れる配列変数ね。ではまずは、画像をロードする処理を書こうか。このコードを、サブプロシージャMaterialLoadに書いてね。

abdx1908-l10.JPG

abdx1908-r02.JPG
▲ 入れた後のMaterialLoad(枠が追加した部分です)

n88_reon.gif
ここは難しいところはないよね。それじゃ続いて、フラグを全部0にするサブプロシージャも作っておくよ。
こちらです!

abdx1908-l11.JPG

n88_reon.gif
できたら続いて、サブプロシージャStageInitに、今のサブプロシージャを呼び出すコードを書いてね。

abdx1908-l12.JPG

n88_kaede.gif
あの、先輩。どうしてこんなことをするんですか?

n88_reon.gif
やられたりした後、ゲームをやり直す時のことを考えてみて。弾を消さないでおくと、再会した時に、前のプレイの時の弾が残っちゃうでしょ?

n88_kaede.gif
あぁ、なるほどー。

n88_reon.gif
さて、次に、弾を移動させ、表示するサブプロシージャを作りましょう。こちらです!

abdx1908-l13.JPG

n88_reon.gif
やっていることは難しくないよ。まず、4行目と17行目のForとNextで、弾の数だけ繰り返し、もしチェックする弾のフラグが1だったら、7行目でその弾を上に移動。9~11行目では、もし弾が画面の上端を超えたら、フラグを0に戻してます。そしてその後再び、フラグが1だったら、弾を表示する、ということを13~15行目でやっています。

n88_kaede.gif
なるほどっ。

n88_reon.gif
では、このサブプロシージャを呼び出すコードを、GameMainに書き加えましょう。

abdx1908-l14.JPG

abdx1908-r03.JPG
▲ 入れた後のGameMain(枠が追加した部分です)

n88_reon.gif
最後は、弾を発射する処理だね。まずは、存在していない弾の番号を取得する関数を作りましょう。こちらです!

abdx1908-l15.JPG

n88_reon.gif
やってることは難しくないよ。ただ、フラグが0になっている(つまり存在していない)弾の番号を変数に入れて、その変数の値を返しているだけ。全部埋まっているときは-1を返しているよ。

n88_kaede.gif
ふむふむ。

n88_reon.gif
では続いて、弾を作る処理も作っちゃいましょう。これもやっていることは難しくないよ。さっきの関数から番号を受け取り、その番号のフラグを1にして、位置をセットしているだけ。位置は、ちょうど横位置が自機の中間地点、そして縦位置がちょうど自機の真上になるようにしているよ。

abdx1908-l16.JPG

n88_reon.gif
さて。最後に、ボタンを押したらショットを発射する処理だけど、ここはちょっと面倒。まずは、

''※このほかにも必要な変数があればこの下に追加してください

n88_reon.gif
の行の下のところに、次の文を書いてね。

abdx1908-l17.JPG

abdx1908-r04.JPG
▲ 入れた後はこうなります。(青枠の部分が追加したところです)

n88_reon.gif
そして次に、サブプロシージャJikiMoveの一番後ろあたりに、このコードをいれます。

abdx1908-l18.JPG

abdx1908-r05a.JPG
abdx1908-r05b.JPG
▲ 入れた後のJikiMoveはこうなります。(枠の部分が追加したところです)


n88_reon.gif
ここでは、発射ボタンを押してる間、カウンタの変数を加算していって、その値が、定数RAPIDの数ごとに、CreateShot()を呼び出して、弾を発射してるんだよ。

n88_kaede.gif
先輩。どうしてそんなことを?

n88_reon.gif
このようにしないと、押している間、弾が途切れなく発射されて、一本の線みたいになっちゃうんだ。だから、一定間隔ごとに発射するようにしているんだよ。

n88_kaede.gif
なるほどー。

n88_reon.gif
ここでのポイントは、2行目と4行目だよ。まず2行目は、このようにmod演算子(余りを計算する演算子)を使うことで、0~ある数を繰り返すようになるんだよ。

n88_kaede.gif
ふむふむ。

n88_reon.gif
そして4行目。このようにすることで、一定数ごとに処理をすることができるんだよ。例えば今回の例だと、RAPIDの値、つまり10の倍数になるごとにCreateShotを呼び出すことになってるんだね。

n88_kaede.gif
なるほどー。とてもためになるテクニックです!


n88_reon.gif
さて。長くなったけど、今回はここまでっ。次回は、敵の移動の処理を作っちゃいますよ! それでは……。

n88_kaede.gif
また次回~!

==========

※次の更新は、『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!