Arcade Cabinet

自作したゲームコントローラを紹介します


テーマ:

 C言語の勉強目的で、SGDK1.30(メガドライブプログラミングツール)を使ってメガドライブ版「ダライアス 26体戦えますか?」を勝手移植しています。今の時代に、30年近く前のハードウェアでのプログラミングの勉強は、将来仕事では役に立たないと思います。しかし、古いコンピュータの限られた性能でどこまでのことが可能なのかを挑戦することは、とても楽しい趣味と感じております。

 

 楽しいことの一つに、処理の効率化があります。

 メガドライブのCPUは7.67MHzのMC68000で、当時のゲーム機としては早いものだったと思われますが、効率の悪い処理をすると、すぐに処理落ちします。

特に問題になるのが、当たり判定です。

ダライアスで計算が必要な当たり判定は、

1:マップ(地形)と自機

2:マップ(地形)と自機の武器(ショットやボム)

3:マップ(地形)とアイテムカプセル

4:敵機と自機

5:敵機と自機の武器(ショットやボム)

6:敵機の武器と自機

7:ボスの本体と自機

8:ボスの本体と自機の武器(ショットやボム)

9:ボスのパーツと自機

10:ボスのパーツと自機の武器(ショットやボム)

11:アイテムカプセルと自機

などが考えられます。

 

 これらの当たり判定は、矩形(四角形)同士の重なりで判定しました。

 例えば、自機(x0,y0)-(x1,y1)とヤズカ(x2,y2)-(x3,y3)の当たり判定は、

(x0 < x3 && x2 < x1 && y0 < y3 && y2 < y1)の式を判定して真であれば重なっていると判断します。上記の式の < を <= にすれば接している場合も真と判断されます。この式は、そんなに時間のかかる処理ではないと思われますが、当たり判定には1対1の関係だけではなく、1対多、多対多の関係のものがほとんどです。特に多対多の当たり判定は多くの処理時間を必要とします。

 敵機と自機の武器の当たり判定を考えてみます。敵機28個出現している場合、ミサイル3連装x4連射+ミサイル4連装x2連射の状態での当たり判定の回数は、最大で28 x 20= 560回の判定が必要になります。ゲーム中にすべてのオブジェクトが出現していることは少ないので、処理の効率化の工夫として、当たり判定を必要としているオブジェクトのリストを作成し、対象のオブジェクトのみ当たり判定のループに回すようにします。

 

 マップと自機の武器で考えてみます。マップを8x8ドット単位の格子(cell)に分割して先ほどの関数で当たり判定を行うと、対象となるcellが画面上に160個あれば、160 x 20 = 3200回の当たり判定が必要となります。さすがにマップにこれだけの計算を行うのは非効率的なので、自分はマップに関しては次のような方法で当たり判定を行っています。

 

 まず、マップの画像に対応した2次元配列(MAP_BOSS[26][64])を用意します。当たり判定が必要な領域を1、必要でない領域を0とすると、上図のような配列となります。

 当たり判定を行いたいオブジェクトの中心座標をPosX, PosYとし、マップのスクロール量をMapScrollXとすると、以下の関数で当たっているか判定できます。ただし、中心座標(点)が重なっているかの判断なので、精密な当たり判定を行うためには、矩形の4隅の座標をチェックする必要があります。しかし、マップについては中心座標だけでもでゲーム上は支障ないと判断し、中心座標1点のみの判定で行いました。これでマップ上のすべての範囲をチェックすることなく1回の計算でチェックできます。

 

unsigned char Map_checkXY(short PosX, short PosY)
{
    unsigned short MapX = (PosX - MapScrollX) / 8 % 64;
    unsigned short MapY = PosY / 8;
    return MAP_BOSS[MapY][MapX];
}

PosX, PosY : 当たり判定を行いたいオブジェクトの座標

MapScrollX : マップのスクロール量

 
ボス体幹部に対する当たり判定もこの方法で行いました。
 

 

現在の状況です。

当たり判定はすべて行いました。

SGDKのバージョンが1.30にアップして、全体的な処理速度が速くなったおかげもあり、問題なく動いています。

ボス7体(KING FOSSIL, ELECTRIC FAN, BURST OUT, BIG RAJARNN, LITTLE STRIPES, DUAL SHEARS, STRONG SHELL)をプログラミングしました。残り19体!!!
 

 

 

 

AD
いいね!した人  |  コメント(3)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。