2019年03月21日

URAURA! Game Review :ドラゴンクエストⅠ・Ⅱ【スクウェア・エニックス(SFC)】

※まず最初に。今回は、新旧両作品を見比べていただく、ということで画像を使わせていただきます。
掲載されている画像は、問題があれば削除いたします。

ということで、スクエニの作品は人気作品ぞろいである。それは、旧作のリメイク作品が、DQやFFの両シリーズともに出ていることでもわかると思われる。
何しろ、FFシリーズは、GBAとDSを持っていればⅥまでの全シリーズを遊ぶことができるし(FF1~2、4~6はGBA、3はDSで遊べる)、ドラクエシリーズも、GBとDSがあれば、Ⅵまでを遊ぶことができる。(DQ1~3はGBで遊べ、4~6はDSで遊べる)
いかに、両シリーズが名作であるかがわかるだろう。
さて、そんなリメイク作だが、そのハシリとなったのが、今回紹介する『ドラゴンクエストⅠ・Ⅱ』だ。

~まずはどんな作品?

このドラゴンクエストⅠ・Ⅱだが、これは両作品を『ドラゴンクエストⅤ』のインタフェースなどで作り直し、バランスも見直したうえで、二本を一つのカートリッジに収録したお得な一本である。
ただのリメイクというわけではなく、当時の主力人気ハードであるスーパーファミコンに合わせて、色々なことがパワーアップされている。
その最たるものが、グラフィックであろう。まずは見ていただきたい。

ur-1903-01.JPG
▲ こちらがファミコン版

ur-1903-02.JPG
▲ こちらがスーパーファミコン版

どちらが素晴らしいかは一目瞭然だろう。また、Ⅰ・Ⅱ共通のことだが、ファミコン版ではどんな地形でも背景は同じだったのだが、Ⅰ・Ⅱでは地形によって背景が変わるようになっている! さらにⅡに関しては、ファミコン版では背景は黒一色だったのだが、Ⅰ・Ⅱでは、背景が付くようになったのだ! 

ur-1903-03.JPG
▲ ファミコン版では、黒一色の背景だが……

ur-1903-04.JPG
▲ Ⅰ・Ⅱではこの通り、背景がつくようになった!

また、紙面では詳しく伝えることはできないが、BGMもスーパーファミコンのFM音源を活かして、素晴らしいものに作り直されているのだ。

~やさしさも上がった!

先ほど、『ドラゴンクエストⅠ・Ⅱ』は、『ドラゴンクエストⅤ』のシステムでリメイクされたと語った。
それによって、インタフェースやシステムも、よりユーザーフレンドリーなものになっている。
例えば、ボタン一つで、『話す・調べる・開ける・扉』の4つのコマンドを兼用する『便利ボタン』の採用や、アイテムやお金の預かり所の追加、そうそう。バッテリーバックアップによるセーブが可能になったことも。
このように、やさしさが増したシステムとなったのだ。
やさしさが増したのは、インタフェースやシステムだけではない。
まずは、下を見ていただきたい。

ur-1903-05.JPG
▲ スライムベスを倒した直後。 ファミコン版ではこれだけ

ur-1903-06.JPG
▲ Ⅰ・Ⅱではこの通り!

このように、経験値やお金が上方修正されたのだ! もちろん、この他の要素も、優しい方向に修正されている。
裏編としては、攻撃魔法の効果が上がったのが嬉しかった。ファミコン版では、ギラをかけても、魔法使いやメイジドラキー、大さそりなどを一撃で倒せない場合があったのだが、こちらでは一撃必殺が可能になってきて、経験値稼ぎがたやすくなっているのだ。
もちろん、ただ優しくなっただけでなく、ちゃんとバランスもとれているのでそこも安心されたい。
それ以外にも、Ⅰでの一部の街での店追加や、Ⅱでのサマルトリアの王子の装備可能武器の追加など優しくする工夫がいろいろされているのが嬉しい。

~ここを直せば完璧

このように、リメイク作としては、非の打ちどころのない『ドラゴンクエストⅠ・Ⅱ』だが、やはり気になるところもある。
例えば、Ⅰではラダトーム城のみセーブが可能であるが、ⅡやⅢ以降と同じように、他にもセーブ可能な場所を増やしてほしかったと思う。 せめて、マイラ、リムルダール、メルキドにはおいてほしかった。
また、キメラの翼のテレポート先が、Ⅰではラダトーム城オンリー、Ⅱでは最後にセーブした場所のみ、となっていたが、ここもⅢ以降のようにテレポート先を選べるようになったらいいのになと思う。

このように注文を付けてみたが、やはりこの『ドラゴンクエストⅠ・Ⅱ』はリメイク作としては合格といっていいほどのできだと思う。

ぜひとも今言ったところを改良して、グラフィックをPS版Ⅳのような3D形式にしたDS版を作ってほしいなと思う。そうなったらぜひともほしいと思うぞ。うずうず。

それではまた!

=-=-=-=-=-=-=-=-=-=-
※次の更新は、3月25日。『みくみく音楽館』の予定です。お楽しみに!
posted by 裏編 at 10:21| Comment(0) | その他のゲーム情報 | このブログの読者になる | 更新情報をチェックする

2019年03月18日

プチコンゲームプログラミング講座~第五回「二進数と10進数と16進数」

文 プチ太郎 氏
=-=-=-=-=-=-=-=-=-=-
 今回はサンプルゲームを一回お休みして、プログラムやコンピュータ技術の基本について、復習をしたいと思います。自分でゲームを作った事がある人にとっては、え?またそんな所から戻って説明?と思いたくなるものです。しかしこれまで連載を続けて来て、サンプルゲームの後に説明をするより、「ここは先に基礎を説明しておいた方が、短く収まる!」という所が多数出てきました。そこで連載も板についてきたので、今回これをやる事にしました。
 この連載をどれだけのレベルの初心者が、どれだけ熱心に読んでいるかも、直接見えないのですが(ツイッターで第四回の告知にふぁぼが10以上付いたのは見ました…w)、もしそんな初心者がいたら、今回説明している事と、これまでの連載を見比べてみて下さい。わからなかった事が、わかるかも知れません。
 サンプルプログラムはゲームでなく、一画面の小さなものが多数登場します。ある程度の長さがあるプログラムはサーバに入れましたが、特に短いものは入っていないので、画面を見て打ち込んでみて下さい。

★ 二進数と10進数と16進数の基本 ★
 数の数え方の基本はどうか? そう聞かれた時の人間の基本的な答えは、「何もないとゼロ。1、2、3…と増えて、9から区切りがつけて10。で100、1000…」ですね。
 しかし電気を使う機械は、電気が通らない「0」か電気が通る「1」の2段階しか判りません(これをビットと言います)でも2つ並べると00,01,10,11の4段階が判ります。3桁にすると000,001,010…110,111の8段階。4桁で16段階。人間が使えるくらい便利な段階にすると、最低でも8桁、つまり00000000から11111111までの256段階が必要となりました(これをバイトと言います)これが二進数です。
 皆さんが遊んでいるTVゲームの中にも、出てくる値が2のべき乗倍か、8の倍数になっているものが多数あります。ゲームで遊んだり、動画や本を見てみましょう。「選べるキャラが4種類」「最大8個」「16分の1の確率で発生」「32歩動くと発生」「64面でループする」…これは機械語でプログラムを作る場合、こうした倍数が一番コンパクトにまとまるからです。8の倍数では他にも48、128、192、4096など、どこかでよく見る数字があります。これらは丸暗記必須ではないが、掛け算の九九のように覚えておくと、プログラム作りが一段楽になります。
 しかし二進数と10進数では桁上がりの基準が違い、対応がわかりにくい。そこで10進数で使う0~9の他に、アルファベットのA~Fを加えて16個としました。これが16進数です。
 また数の数え方は、1からが基本と思う人も多いと思いますが、実はコンピュータでは0から数えた方が便利です。以下のプログラムを実行してみましょう。

k05mod.jpg

(短いプログラムなので、サーバ登録なし)
 右の数字が必ず、0から同じ番号までの繰り返しですね? このMODは関数のように見えますが、「+-*/」と同じ計算記号で、割り算の割った数でなく余りを出します。ゲームによくある「n回ごとに繰り返し」処理は
IF 繰り返しの基本となる数(タイマーと呼びます)==n THEN 処理実行:タイマー=0
と書くより、この
タイマー=(タイマー+1) MOD n
IF (タイマー MOD 実行タイミングの数値)==0 THEN 処理実行
を使う方が、コンパクトです。

★ さまざまな機能の説明の準備 ★

ex1.jpg

 二進数・10進数・16進数を表に並べてみました。16進数がコンパクトなのが判ると思います。あともう一つ、覚えてほしい事があります。条件判断文で出てくるANDとORは、数学や英語を勉強すれば出てくるので、本来の意味が「どっちも」「どちらか一つでも」なのは、プログラムをやる人の歳なら判りますね。では二進数の計算「00101001 AND 01100101」や「00101001 OR 01100101」は答えられますか? いきなり見せられても出来ないが、縦に並べれば簡単です。つまりANDは「どっちも1の時だけ1」、ORは「どちらか1なら1」を返すのです。
00101001
AND 01100101
------
00100001
00101001
OR 01100101
------
01101101

★ 進数の変換方法 ★
 二進数と16進数はそのままプログラム上に書いても、ちゃんと数として識別されないので、変換方法も書きましょう。少し昔のパソコンだと、前述のMODなども使って複雑な計算をしたが、プチコン3号の強力な命令は、これも簡単に出来ます。

k05bin.jpg
(短いプログラムなので、サーバ登録なし)

 10進数以外から10進数への変換がVAL関数です。これは画像にある通り、数字の書式をした文字列を、本当の数にして返しますが、頭に"&B"(バイナリのB)を付ければ二進数、"&H"(ヘックス=ラテン語で「6」)を付ければ16進数と理解し、10進数を返します。逆に数からBIN$関数は二進数、HEX$関数は16進数を返します。関数に$が付いている通り、返すのは数字型でなく文字型です。

★ ビット単位での応用1:BUTTON関数 ★
 ここでこんなプログラムを用意しました(ここでは進数変換にFORMAT$関数を使っていますが、書式が難しいので説明は略します。各自で調べて下さい)実行してボタンを押してみましょう。表示される三種類の数が変わりますが、何を意味するか、もう判りますね? BUTTON関数は何も押さないとゼロで、押されたボタンのビットだけ1にします。なおZLとZRは拡張パッドを付けないと判定されません。

ex2.jpg

k05but.jpg
(短いプログラムなので、サーバ登録なし)

 前回書いた「IF BUTTONの値==値」の「他のボタンを押さず、この値のボタンだけ押した」は、どれか1つのビットだけ判定し、ボタンを複数押すと無効です。「IF (BUTTONの値 AND 値)」の「他のボタンを押しているにかかわらず、この値のボタンも押した」は、判断の対象としているビットのそれぞれを判定し、複数押しても有効です。前述したANDを使ったビット演算と同じです。

★ ビット単位での応用2:SPCOLで当たり判定 ★
 次は前回のシューティングゲームでも使った、SPCOLによる当たり判定の復習です。赤いキャラ(S番号0)は十字ボタンで、青いキャラ(S番号1)は丸ボタンで動きます(ボタン判定の動かし方がまだ教えていない方法ですが、これは後日やります)どちらも動かして緑のキャラ(S番号2)と重なると音が出ますが、黄色のキャラ(S番号3)と重なっても音が出ません。
k05spc.jpg
(ファイル名「K05SPC」)

 SPCOLはパラメータの省略方法が何種類もあり複雑ですが、ここではパラメータが3つの「SPCOL S番号,スプライト拡大でも当たり判定を同期するか(見やすくするために拡大しています),マスク」で定義しています、4つのキャラのマスクのビットは、リストにある通り二進数で書いていて、同じ位置に1と1があるキャラだけ、当たりとなって音が出ます。ここの0と1を変えると、当たり判定の組み合わせも変わります。ビット単位での使用は、この他にもSPDEF命令でも使っていますが、これは後日、スプライト全般の説明の時にお話ししましょう。

★ アスキーコードへの応用 ★

k05asc.jpg
(短いプログラムなので、サーバ登録なし)

 上の画像のプログラムを実行すると、16x16=256字が並びます。少し昔のパソコンはこれだけあれば、人間が見やすい文字に対応できました。これをアスキーコードと言います。文字が8x8ドット単位で作られているという事にも注目しましょう。プチコン3号より古い方がわかりやすいので、ここではPC-8001とプチコンmkIIのアスキーコード表も見てみましょう。32番(スペース「 」)から95番(アンダーバー「_」)まで見ると、プチコン3号のスプライトとBGで出せる、文字とコード番号に対応していますね?ゲームに使える大きな字は、この対応する番号のBGを使っています。

asc_pc.jpg

asc_p2.jpg

k05bg.jpg

 ひらがな等も出る現代のコンピュータは、これだけでは足りないので、文字コードの数がもっと多くなっています。プチコン3号も65536種類あり、ギリシャ文字や、途中のバージョンから追加された漢字用の美咲フォントもここに入っています。

★ 色への応用1:RGB関数 ★
 色の基本はR(RED=赤)G(GREEN=緑)B(BLUE=青)だという事も、プログラムが出来る人なら大体知っていると思います。色の指定がプチコン3号ではテキストのみ数字で、その他はRGB(0~255,0~255,0~255)のためわかりにくく(高性能機の宣伝にある「1600万色」というのは、この256x256x256=16777216の事)、後から#REDなどの定数リテラルが追加されました。
 昔のパソコンや、初代プチコンのスプライトとBGでは、8種か16種あるカラー番号に対して別の値を変えると、画面上のその色全てを瞬間的に変える、「パレット」という機能がありました。しかしプチコン3号ではこれが廃止され、グラフィックページや画面に描かれている基本的なキャラに対し、SPCOLOR命令・RGB関数・定数リテラルで色を指定すると、指定した光の三原色だけ色が抜かれる(暗くなる)という仕様になってしまいました。スプライトで全体的に白っぽいキャラが多いのは、それで使いやすくする為です。
 定数リテラルの数を直接表示してみると、例えば「? #YELLOW」だと「-460800」と表示されます。これはプチコン3号の数値が32ビットで、左端1ビットはマイナスかの符号に使っているからです(つまり数は31ビットで±2147483647の範囲です)「? HEX$(#YELLOW)」だと「FFF8F800」と表示するが、これは左から2バイト区切りで「スプライトで使う透明の濃度=FF」「赤(R)の濃度=F8」「緑(G)の濃度=F8」「青(B)の濃度=00」の4つが並んでいる訳です。RGB関数で言う「RGB(透明度,赤濃度,緑濃度,青濃度)」です。

★ 色への応用2:8種の数で色を出すDEF ★
 このDEFを使うと、0~7の数を入れれば、PC-8001など昔のマイクロソフト系マイコンでお馴染みの、8色のカラーコードを返します。ただし0は透明でなく黒なので注意。

ex3.jpg

k05f8.jpg
(ファイル名「K05F8」)

★ 色への応用3:16種の数で色を出すDEF ★
 プチコン3号の16色カラーは大体この表の通りですが、全てが規則的ではありません。RGB濃度は00とFFの他に、中間の80(10進数で128)などを加え、約16種類になっています(実際には微妙に違う濃度も使われています)定数リテラルを使う場合、文字用は#の後にテキストのTが付き、グラフィック・スプライト・BG用はTが付かないので注意しましょう。そしてこの色指定にRGB関数や定数リテラルを使わず、テキスト同様に0~15の数字で使いたい!という人は、こちらを使って下さい。「パックマン」や「ドラクエ」みたいに同じキャラを色違いで出すなら、この2つのDEFは便利です。

ex4.jpg
k05f16.jpg
(ファイル名「K05F16」)

★ 色への応用4:白黒キャラを16進数に圧縮する ★
 プチコン3号には文字のデザインを変えるFONTDEF命令があり、1ドットに0000~FFFFの4バイト(使い方はプチコン3号のヘルプをご覧ください)x横8ドットx縦8ドットの文字列で編集を行いますが、グラフィックでもこれと似た事が出来ます。以下を実行してみましょう。
k05t2.jpg
(ファイル名「K05T2」)

 グラフィックによるキャラクタが出てきましたが、これはドットが「なし・なし・ある・なし」なら0010→2、「ある・ある・ある・なし」なら1110→Eと、16進数で出来るだけコンパクトにしています。これだと8x8ドットのキャラは16進数で16文字つまり8バイトにまとまります。ただし色が0(一般に透明か黒)か1(一般に白)しか使えないので、描く時に色をつけるか、白黒で描いてSPCOLORなどの命令で色をつける必要があります。

★ 色への応用5:16色キャラを16進数に圧縮する ★
 こちらは色を増やして、0~Fの16種類の文字列で16色を格納、つまり1ドット1バイトです。それだと人の姿を描くにはまだ足りず、面倒さをはぶくためもあり、文字列に"*"を入れると輪郭線の黒、"."で何も描かない空白、"■"で肌色のRGB(256,192,128)が出る様にしてあります。
k05t16.jpg
(ファイル名「K05T16」)

 上記のプログラムは、GPAGE命令を使ってGRP4(グラフィックページの4番)に書けばスプライト、GRP5に書けばBGが簡単に作れます。ただしプログラムに入る、つまりリストが改行ありだと40字程、オプションで改行なしにしても100字程が限界なので、それより大きく複雑なグラフィックの場合、ペイントツールで描いた方がいいでしょう。
 こうしてグラフィック機能で文字キャラクタを変えて、ゲームに使うキャラを、当時としては細かく描ける様にする機能を、PCG(Programmed Character Generator=プログラム式キャラクタ生成)と言います。プチコンmkIIではCHRSET命令でスプライトやBGだけでなく、文字もPCG編集出来る様になっており、文字のドットも白黒二色でなく、16色フルに変えられました。

(第六回につづく 次回はまたサンプルゲームに戻ります。アクションゲームを予定しています)

★今回の教材プログラムは一部を除き、サーバにアップしてありますので、サーバからダウンロードしてご覧下さい。
公開キー  :7ZNYX3Z4(連載が進んで新しい教材プログラムが追加されると、公開キーも変わります。この公開キーでダウンロード出来ない場合は、連載の一番新しい回の公開キーをご利用下さい)
プロジェクト:KOZA
ファイル名 :上の教材プログラムの見出しをご覧下さい。
=-=-=-=-=-=-=-=-=-=-
次の更新は、3月21日、『URAURA! Game Review』の予定です。お楽しみに!

2019年03月14日

師匠TのチャレンジARSゲーム!~第拾参回:シャドウゲイト【1989年・ケムコ(原作 ICOM Simulations)】

ars1903-00.jpg

※ここに掲載された画像は、問題があれば削除いたします。

 うむ、師匠Tである! 今月は珍しく、ファミコンのアドベンチャーゲームを紹介するぞ!
 今宵紹介するのはシャドウゲイト。なんと、ファミコン用でありながら、アメリカから輸入・移植されたというゲームじゃ。
 それだけあって謎も解きごたえもあるものばかりじゃぞ。腕がなるわい。

 それじゃ行くぞ。

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


【 本編じゃ! 】

ars1903-01.jpg
今回もやはり、ドアの前からスタートじゃが、いきなりドアを開けて中に入るのは早計じゃぞ。
まずは、ドアやそのまわりを確認するべし。


ars1903-02.jpg
ドアを開けると、そこはホールウェイじゃ。魔王ウォーロックの笑い声がわしを出迎える。
むむ、見ておれウォーロック。必ずお前を倒して見せようぞ!
さて、この部屋の扉にはいずれも鍵がかかっておる。じゃが、この部屋のどこにも鍵は落ちていない。
ということは……?
そうそう、壁にかけられているあれにも注目じゃ。


ars1903-03.jpg
無事に鍵を開けて、先に進めたぞ。
本があるが……ちょっと待て!
うかつな行動をすると、取り返しのつかないことになるぞ!

ars1903-04.jpg
このようにこのゲームでは、色々なゲームオーバーになることがある。じゃが、いずれも面白いメッセージばかりなので、これを見るのも一興かもしれぬな。

ars1903-05.jpg
さて、湖のある部屋じゃ。
鍵をもつ骸骨が気になるが、湖にはいかにも危険な背びれが……うーむ。

ars1903-06.jpg
続いては滝のある部屋か。
行き止まりのように見えるが……
さて、このあとどうなるかは……

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

※『シャドウゲイト』は、ケムコの製品です。この記事に使われている画像の二次使用を禁じます。

=-=-=-=-=-=-=-=-=-=-

次の更新は、3月18日、プチコンゲームプログラミング講座』の予定です。お楽しみに!
posted by 裏編 at 11:05| Comment(0) | チャレンジARS | このブログの読者になる | 更新情報をチェックする

2019年03月11日

ActiveBasicとDXライブラリでゲームプログラミング!~第5回・試しに、タイトル画面とゲーム画面を入れてみよう!

n88_reon.gif
玲音:どうもこんにちは! 玲音です!

n88_kaede.gif
楓:こんにちは! 気が付いたらこの講座に引きずり込まれてた楓です! 今日もよろしくお願いします!

n88_reon.gif
えー、そうきたかー。

n88_kaede.gif
えへへ。それで先輩。今回は何するんですか?

n88_reon.gif
うん。前回は、プログラムの骨格をさらに発展させて、タイトルやゲームオーバーの処理などに分岐する骨組みに改造したよね。今回はそれに手を加えて、仮のタイトル画面やゲーム画面を入れてみようと思います!

n88_kaede.gif
おー、それは楽しみですね! 早くやりましょう、先輩!

n88_reon.gif
それじゃさっそくスタート!

~まずはタイトルをいれよう~
n88_reon.gif
まずは、これが最初の骨組みだったね。

abdx1903-01.jpg

n88_kaede.gif
そして、それらに前回説明してくれた修正をいろいろ加えたのがこれですよね。

abdx1903-02.jpg

n88_reon.gif
そうだね。それじゃこれに色々付け加えてみよう!
まずはタイトルからだね。

n88_kaede.gif
はーい。

n88_reon.gif
そうそう。今回はこれらの素材を使います。
あらかじめ、プログラムのフォルダに保存しておいてね。

title.jpg
haikei.bmp
niko.bmp

n88_reon.gif
では始めていこうか。
まずは、タイトル画面のハンドルを保存する変数が必要だよね。
さっそく定義しておこう!
Dim scene As Integer
の行の下に、次の行を付け加えてね。

Dim hndTitle As Long

n88_reon.gif
hndはHaNDleの略だよ。さて、次は画像をdxLoadGraph関数で読み込むんだけど、その前に関数を一つ付け加えておくね。
まずは、
Sub TitleProc()
の前にこれを付け加えて。

Sub InitProc()
   hndTitle = dxLoadGraph("title.jpg")
End Sub

n88_reon.gif
そして、
scene = TITLE
の前に、これも追加。

InitProc()

n88_reon.gif
これで読み込みはOK。後は表示させるだけ。
Sub TitleProc()

End Subの間に、こう書いてね。

dxDrawGraph(0, 0, hndTitle, FALSE)

n88_kaede.gif
はーい。できましたよ。

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

n88_kaede.gif
はーい。それっ。

abdx1903-03.JPG

n88_kaede.gif
やったぁっ。タイトル画面が表示されましたよっ。
でも先輩。どうして、TitleProcの中で、画像を読み込まなかったんですか?

n88_reon.gif
プログラムの流れを考えてみて。メインのプログラムをDoとLoopで繰り返してるってことは、ゲーム画面に進むまで、TitleProcをえんえんと繰り返し呼び出すことになるじゃない?

n88_kaede.gif
ふむふむ。

n88_reon.gif
それで、読み込む処理をTitleProcの中でやっちゃうと、繰り返しのたびに読み込んで表示して読み込んで表示してを繰り返すことになるから、読み込みの分、時間がロスしちゃうよね?

n88_kaede.gif
あぁ、なるほど!

n88_reon.gif
そこで、最初の一回だけ画像を読み込むようにしているわけだよ。

n88_kaede.gif
なるほど、わかりましたー。

n88_reon.gif
さて、それじゃ次は、スペースを押したら画面を表示するようにしてみよう。スペースキーが押されたかどうかを調べるのは、dxGetJoypadInputState関数だったよね。

n88_kaede.gif
はいっ。それで、場面を変えるには、変数sceneの内容を変えればいいんでしたよねっ。

n88_reon.gif
うん。では楓ちゃん。この二つを組み合わせてやってみて。

n88_kaede.gif
はーい。こうすればいいんですよねっ。TitleProcの中のdxDrawGraphの文の下に……

=-=-=-=-=-=-=-=-=-=-
If (dxGetJoypadInputState(DX_INPUT_KEY_PAD1) And DX_PAD_INPUT_M) <> 0 Then
   scene = GAME
End If
=-=-=-=-=-=-=-=-=-=-

n88_kaede.gif
っと。えいっ。やったー。スペースキーを押したら画面が黒くなりましたよっ。

n88_reon.gif
うまくいったみたいだね。画面が黒くなったのは、まだGameProcの中には何も書いてないからだよ。
それじゃ次は、そのGameProcの中に色々書いて、ゲーム画面を作っちゃおう!

n88_kaede.gif
はーいっ。

~ゲーム画面を作ろう
n88_reon.gif
さて。次はゲーム画面を作るわけだけど、まず背景とキャラクタのハンドルを入れる変数が必要だね。
さっきの
Dim hndTitle As Long
の下に、これを追加しよう。

=-=-=-=-=-=-=-=-=-=-
Dim hndBack As Long
Dim hndChara As Long
=-=-=-=-=-=-=-=-=-=-

n88_kaede.gif
ふむふむ。

n88_reon.gif
続いて、InitProcの中に、背景とキャラクタを読み込む処理を追加。

=-=-=-=-=-=-=-=-=-=-
hndBack = dxLoadGraph("haikei.bmp")
hndChara = dxLoadGraph("niko.bmp")
=-=-=-=-=-=-=-=-=-=-

n88_reon.gif
そうそう。キャラクタの位置を示す変数も必要だね。
さっきのDim文の下に付け加えておこう。

=-=-=-=-=-=-=-=-=-=-
Dim charaX As Long
Dim charaY As Long
=-=-=-=-=-=-=-=-=-=-

n88_kaede.gif
位置の設定は、InitProcの中で、ですねっ。

=-=-=-=-=-=-=-=-=-=-
charaX = 50
charaY = 50
=-=-=-=-=-=-=-=-=-=-

n88_reon.gif
そしたらあとは、GameProcの中で、背景とキャラクタを表示させるだけだね。
Sub GameProc()とEnd Subの間に、こう書こう!

=-=-=-=-=-=-=-=-=-=-
dxDrawGraph(0, 0, hndBack, FALSE)
dxDrawGraph(charaX, charaY, hndChara, TRUE)
=-=-=-=-=-=-=-=-=-=-

n88_reon.gif
全体がこのようになっていればOKだよ。実行してみて?

abdx1903-04.jpg
abdx1903-04b.jpg
n88_kaede.gif
スペースキーを押したら、ゲーム画面に切り替わりましたよ!

abdx1903-05.JPG

n88_reon.gif
うまくいったみたいだね。今回はここまで……と言いたいところだけど、もうワンポイント。

n88_kaede.gif
なんですか?

n88_reon.gif
今回は全ての初期設定をInitProc関数の中でやったけど、例えばステージ別とか、全体の初期設定とか、ゲーム開始時の初期設定とか、色々と別々の初期設定をしたいときってあるよね?

n88_kaede.gif
あぁ、そういえば。

n88_reon.gif
その時は、今回教えたやり方ではなく、Select Caseで、それぞれの設定の関数に飛ばすやり方にするといいと思うよ。
こんな風にね。

=-=-=-=-=-=-=-=-=-=-
Select Case scene
Case TOTAL_INIT
   TotalInitProc()←こちらで全体的な初期設定を行う
Case TITLE
   TitleProc()
Case GAME_INIT
   GameInitProc()←この関数でゲームスタート時の初期設定を行う
Case GAME
   GameProc()

End Select
=-=-=-=-=-=-=-=-=-=-

n88_kaede.gif
はーい!

n88_reon.gif
それでは今度こそ、今回はここまで。
次回はいよいよ本格的にゲーム作りに入るよ。まず最初は簡単に、追いかけゲームを作ってみようと思います。
お楽しみに!

n88_kaede.gif
また次回です~!



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

2019年03月07日

パソレクのなく頃に、解・5話

文 裏編/絵 伊地山基之 氏

※この記事は、裏編が習ったりしていた内容をもとに記述されています。
 現在の内容とは若干違っている部分があることをご了承くださいませ(平伏

paso-1903-01.jpg
paso-1903-02.jpg
paso-1903-03r2.jpg

※次の更新は、3月11日、『ActiveBasicとDXライブラリでゲームプログラミング!』の予定です。お楽しみに!
posted by 裏編 at 08:50| Comment(0) | パソレクのなく頃に・解 | このブログの読者になる | 更新情報をチェックする