85DATA HOMEへ
MYCAR情報掲示板BLOGプロフィール

HOME → ソフトウェア → ActiveBasic

■ ゼビウスのジェミニ誘導を作ってみた。

「ジェミニ誘導」って何?
ゼビウスをやった事がある人ならば知っているかな?

・・・え?知らないって
ガルザカートは知っています?
名前なんて知らないって?

ゼビウスを知らない方でも分かるように書いていきます。

エリア9で出てくる花火みたいに弾を撃つ攻撃機があります。(以降10,14でも出てきます)
四方八方に弾を撃ちます。これが、"ガルザカート"という敵機
敵機と言うよりも、見た目はまさに”花火”です。
その弾は合計20発発射されますが、内4発は自機に向かって飛んでくる誘導弾になっています。(残りの16発は直線的な動きです)

この誘導弾4発がブラグスパリオ(通称ジェミニと言っていた。以降ジェミニと書きます)
そのジェミニを自機に当てずに、うまくコントロールするのが、"ジェミニ誘導"と言うのです。
ジェミニを画面の外に出さずに自機を動かすのです。

このジェミニは破壊不能ですが、ザッパー(自機の対空弾)を当てると500点加算されます。
ゼビウス上級者はこのテクニックを使い、長時間ジェミニを画面から出さずに得点を稼ぐようです。

(なぜ"ジェミニ誘導"って名前なのだろ〜。"ブラグスパリオ誘導"だと名前が長いからかな〜)


・・・・で、私もジェミニ誘導をやってみました。
以前、ファミコンではやった事があったので、慣れれば出来るかな?
今回は、PCエンジンのゼビウス(アーケード)でチャレンジ!

はたして、出来るのか?!


プレイ動画
http://www.youtube.com/watch?v=ord5kVICXgg

 




ゼビウスのジェミニ誘導ってのが、どんなモノなのかが、分かりましたか?

・・・で、ここからが本題

では「ジェミニ誘導を作ってみよ〜」 by ActiveBasic

と言うよりも、「追跡弾を作ってみよ〜」・・・が正しい表現かな?
まぁいいや。

どんなアルゴリズムなのか?

多分、自機の座標からジェミニの座標の差をジェミニの増減値に足していくんだと思う。

変数は、
PlayerX PlayerY を自機の座標
CHR_X CHR_Y  をジェミニの座標
TK_XP TK_YP     をジェミニの(X軸、Y軸)の増減値

@ TK_XP=TK_XP+Sgn(PlayerX-CHR_X)
  TK_YP=TK_YP+Sgn(PlayerY-CHR_Y)
A IF Abs(TK_XP)=>20 Then TK_XP=Sgn(TK_XP)*20
    IF Abs(TK_YP)=>20 Then TK_YP=Sgn(TK_YP)*20
B CHR_X=CHR_X+TK_XP
    CHR_Y=CHR_Y+TK_YP

【一応解説】
@で自機とジェミニの座標の差を出して正ならプラス1、負ならマイナス1をジェミニの増減値に加えていく。

Aジェミニの増減値の絶対値がXX以上(上記の例では20)になったら20としている。
  ※ここで、移動距離が大きすぎないように制御している。

Bジェミニの座標にジェミニの増減値を加える。

こんな感じかな〜????


で、出来たのが、コレ (今回は、DXライブラリを使ってDirectXで動作)

ダウンロード


sample.exeでフルスクリーンで実行されます。
自機は上下左右キーまたはゲームパッドで動きます。
終了したい場合は"Esc"キーを押します
なお、プログラムファイルは、sample01.abpです。



まぁ、こんな感じなんじゃないかな?・・・え?違う?

2011.5.3加筆

こんな指摘がありました。

「プレイ画面だと、ジェミニの軌道が逆回転してないところみると、2物体間の引力と遠心力が釣り合ってるかどうかで動いてるような感じですね。自機中心の回転座標系でやればOKかと。」

なるほどね〜

何だか難しそうですが、遠心力を慣性(1ループ前のベクトル値)として、自機に引力を持たせて作ってみましたよ。
(引力係数は適当です。何となく擬似的にやってみました。引力の影響度は離れているほど小さく、近いほど大きく・・になっています)

まぁ動きをテストする為、チョイチョイと手間をかけずに作りました。
ジェミニのルーチンはこんなトコ

 xp=Abs(PlayerX+12-CHR_X) '自機とジェミニとの距離 x軸
 yp=Abs(PlayerY+12-CHR_Y) '自機とジェミニとの距離 y軸
 r=Sqr(xp^2+yp^2)   'r = 自機とジェミニの距離 = √xp 2乗 + yp2乗
 If r>100 Then r=100   'r が100以上にならないよう制御 → 引力係数 変数inryoku(0〜100)としている為

 TK_XP=TK_XP+Sgn(PlayerX+12-CHR_X)*inryoku[r] '前のベクトル+符号*引力係数
 TK_YP=TK_YP+Sgn(PlayerY+12-CHR_Y)*inryoku[r] '前のベクトル+符号*引力係数

 IF Abs(TK_XP)=>20 Then TK_XP=Sgn(TK_XP)*20  'ベクトルが大きくなりすぎない様に制御
 IF Abs(TK_YP)=>20 Then TK_YP=Sgn(TK_YP)*20  'ベクトルが大きくなりすぎない様に制御
 CHR_X=CHR_X+TK_XP
 CHR_Y=CHR_Y+TK_YP


これで、ジェミニは自機に近づくと、自機の引力に影響され引き寄せられていきます。
また、自機の引力が影響しない位置だと、ジェミニはそのまま移動します。
この場合は、2度と帰ってきません。

うーん。どうかな?
引力計算が適当なので、動きがチト不自然ですが意図している事は出来ている気がする。
(出来ています?)
これは、これで面白い動きをするので、結構気に入っています。

・・・・でも、この動きでは無い気がするな。
ゼビウスの作者に聞いてみたいな〜

 

ダウンロード

sample02-ジェミニ2.exeでフルスクリーンで実行されます。
自機は上下左右キーまたはゲームパッドで動きます。
終了したい場合は"Esc"キーを押します