全方位シューティング「OMNIDIR(オムニディア)」

f:id:argxento:20130413225150j:plain

ベクタスキャン&FM音源風味レトロ調高速全方位シューティング
OMNIDIR(オムニディア)

作ったので公開します。所属するサークルのゲームジャムでの成果物に若干手を加えたものです。48時間でゲームを一本作るというお題で始まったので、 なるべくシンプルなものにしようとして、じゃあどうするかってことでベクタスキャンが発展したらどうなるだろうというのを自分なりに描いてみました。

方向性として、敵ミサイルの雨霰をかいくぐるスリル、敵を一発で仕留める爽快感、画面がめまぐるしく動くスピード感、一ゲームあたりのプレイ時間の短さ、中毒性の高さなどを目指しました。

ダウンロード

こちら

動作環境

Windows7以降のWindowsで、3Dゲームが普通に動く64bit機
(32bitバイナリも同梱していますが、動作未確認です)

操作方法

  • キーボード

    • 移動:矢印キー
    • 対艦爆弾:Zキー
    • 迎撃ミサイル:Xキー
  • ゲームパッド

    • 移動:D-Pad・アナログスティック
    • 対艦爆弾:ボタン1
    • 迎撃ミサイル:ボタン2 移動はD-Padがデフォルトですが、ゲーム中にアナログパッドからの入力があると アナログパッドでの操作に切り替わります

攻略法(初心者向け)

  • 黄色の敵ミサイルを避けたり迎撃ミサイルで迎撃したりしつつ、黄色い敵艦を対艦爆弾で倒すことがゲームの基本です
  • 緑の矢印のうち、大きいほうは敵艦の方向をあらわしています。まずは正確にそちらを目指せるようになりましょう
  • 対艦爆弾は目標から離れていると当てにくく、再発射までの時間もかかってしまうので、敵に体当たりする寸前まで近づいてから撃ったほうがいいです
  • 一箇所で旋回を繰り返しているとミサイルの餌食になってしまうので、迎撃ミサイルで捌ききれなくなったら一直線に逃げてミサイルをかわしましょう

その他

  • ご意見ご感想などありましたら、このページにコメントとして書き込みか、@Twitter:#omnidir_shooter にいただけると幸いです。
  • ハイスコア、最高レベル等でたら、Twitterハッシュタグ #omnidir_shooter をつけてつぶやけばほかの人と競えて面白いかもしれません

攻略法(上級者向け)

  • スコア稼ぎに挑む方向け
    • 最後に撃った迎撃ミサイルの同時ロック数が倍率として素点にかかります。なので、敵ミサイルを十分ひきつけて高倍率を得てから敵を倒しましょう
    • 敵艦を体当たりで倒すと素点が5倍になります。 倍率が20倍を超え、シールド残量に余裕がある場合は体当たりで稼いでもいいかもしれません
  • 到達レベルの高みを目指す方向け
    • 敵艦は2艦、ミサイルは20発倒すと1レベル上昇なので、敵艦の出現が途切れなくなるレベル3以降はミサイルから逃げ回らず、敵艦をすばやく倒していく のが基本となると思います。
    • 敵をすばやく倒すことによって、敵ミサイルの出現量をある程度低く抑えられます。

2013/04/13 23:59追記:Windows8では64bit版が動作しないそうです。原因調査中ですので、Windows8をお使いの方は32bit版をお使いください

Esolang Advent Calendar 2012 6日目 難解言語Doubleplusungoodの紹介

こんにちは、ArGxento(あるじぇんと)といいます。はじめましての方ははじめまして。

さて、Esolang Advent Calendar 2012の六日目を担当させていただくわけですが、 今回は当企画のために作った奇妙な言語、Doubleplusungood(ダブルプラスアングッド)について書きたいと思います。 その前にまずはお約束のHello, World!を。

+C++; + + ++C++++ + C; + ++C++++ + C; + ++ + C++; + ++ + C++; + + ++ C++; ++C++;+ ++C++; + + + ++ C++ + C; + + ++C++++ + C; + ++ +C++; + + ++ C++; ++ + ++C++ + C; ++ +C++; + +C++; + ++C++; + + +C++; + + ++ ++C++ + C; ++ +C++; + +C++; + ++ C++; + + +C++; + + ++ ++C++ + C; ++ +C++; + +C++; + ++C++; + + +C++; ++ ++ ++ ++C++ + C; ++ +C++; + +C++; + ++C++; + + +C++; + + ++ ++ C++ + C; + ++ C++++ + C;+ ++ +C++; + + ++ C++; + ++ C++++ + C; + + ++ C++; ++ ++ ++ C++ + C; ++ + ++ C++ ++ + C; + ++ + C++; + + ++ C++; ++ ++ ++ ++C++ + C; ++ +C++; + +C++; + ++C++; + + +C++; ++C++++ + C; + ++C++ + C;+ ++ +C++; ++ +C++; ++C++; + ++C++; + + +C++; + + ++ ++C++ + C; ++ +C++; + +C++; + ++C++; + + +C++; + + ++C++ + C; ++ +C++; + +C++; + ++C++; + + +C++; ++ C++ +C; + ++ C++++ + C; + ++ + C++; + + ++ C++;

(完全なコードと実行結果はこちら)

コンセプトはずばり、C++に、"C++;"でかく、C++をもちいた言語です。

前からジョークのネタとして、C++演算子オーバーロードで"C++"の文字列だけでできた言語を考えていましたが、今回は それだけでは面白みがないという事で、どこまで命令数を減らせるかを試してみました。 一応書きやすいように標準的な書き方を定めましたが、演算子の優先順位や結合規則を熟知していれば更にトリッキーな 書き方も可能です。

以下に言語の仕様などを記します。

特徴

  • C++のDSEL(領域特化組み込み言語)
  • 一応スタック指向

仕様

  • メモリは数値またはコードブロックがもてるスタック一つ
  • 前置インクリメント、後置インクリメント、プラス符号、加算をオーバーロードして実装しているため、C++演算子の優先順位や結合規則に従う
  • 14の命令
  • リテラルは整数のみ

数値リテラル

書き方 : (仮数部)C++(倍率) + C;

仮数部には前置インクリメントを1、後置インクリメントを0とした二進数を用いる。結合規則に従うため、桁の並びが真逆になる。 倍率部には後置インクリメントを0個以上書き、仮数がその数の4倍左シフトされる。

例 : + ++ + ++C++ + C; : 10、++C++ ++ + C; : 16

命令

コード 説明
+C++; begin : コードブロックの開始。対応するendに達するまでコードが実行されない
++C++; end : コードブロック終了。対応するbeginとの間にあるコードをスタックに積む
++ ++ ++C++; pop : スタックの一番上を取り除く
+ +C++; dup : スタックの一番上を取り除き、同じ物を2つ積む
++ +C++; lrot : スタックの一番下を取り除き、それを一番上に積む
+ ++C++; rrot : スタックの一番上を取り除き、それを一番下に挿入する
++ ++C++; swap : スタックの一番上と上から二番目を交換する
+ + +C++; call : スタックの一番上のコードブロックを取り除き、実行する。コードブロックでない場合はエラー
++ + +C++; if-else : スタックの一番上から3つを取り除き、一番上に積まれていた数値が、0以外ならば上から2番めに積まれていたコードブロックを、0ならば上から3番目だったコードブロックを実行する。
+ ++ +C++; add : スタックの一番上と上から二番目を取り除き、それらを加算した値を積む。どちらかが数値でなければエラー
++ ++ +C++; neg : スタックの一番上を取り除き、その数値の符号を反転したものを積む。スタックの一番上が数値でなければエラー
+ + ++C++; print : スタックの一番上を取り除き、その数値を出力する。文字コードは環境依存で、スタックの一番上が-128~127の範囲の数値でなければエラー
++ + ++C++; input : ユーザの入力を受け付け、入力された文字の文字コードをスタックに積む
+ ++ ++C++; less-than : スタックの一番上と二番めを取り除き、二番めに積まれていた数値が一番上に積まれていた数値より小さければ1を、そうでなければ0を積む

デバッグとかすごく適当ですが…

ideone.comで実行できるようにするために、C++03縛りをせざるを得なかったのが結構きつかったです。

あまり時間がなく、ループのサンプルとして1から9までの数字を出力するコードくらいしか用意できませんでした。 こちらです。 しかし、頑張ればFizzBuzzくらいは何とかなりそうです。興味があれば挑戦してみてください。

7日目担当のD_Rascalさん、よろしくおねがいします。

Hello, World!

明日記事を公開する必要があったし、なんかサークルでブログ作れって言われたんでブログ作りました。

今までいろんなハンドルでブログ作っていたんですが、3記事以上書いたブログがなかったような…

今回はそうならないように努力します。前も似たようなこといったような