1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今年のSPAJAMでやったこと

Last updated at Posted at 2025-08-12

はじめに

今年もSPAJAMに参加!
今回で9回目、9年連続参加!
多分、参加者としては最多連続記録ではないだろうか。
今年は残念ながら予選で何も賞を獲得できず残念。
ただ、9回参加で何も取れなかったのが2回なのは割と誇れるのではないかと自分を慰める。

さて、今年の参加で自分が何をやったのかを振り返ろうと思う。

メンバー

以下のメンバーで参加。ここ数年このメンバー。

  • 最年長エンジニアのIさん
  • 最年少エンジニアのMさん
  • 最年長テクニカルライターのSさん

作ったもの

今年作ったものは「太古乃達人」というアプリ。
PS2用のタタコンをAndroid端末に接続して、リズムに合わせて叩くことで狼煙をあげるというもの。
タタコンはUSBの変換アダプタを使用して接続している。
Amazonで安いものを使用しているが当たり外れがあるので注意が必要。

これは使えたので追加購入したら不良品が来たので追加注文分は返品した
https://amzn.to/4fq5oI0

これはプレステのコントローラは認識したが、タタコンは認識せず
https://amzn.to/4m8vbaj

これは使えた
https://amzn.to/3Hq34nS

Xでぼやいてたら変換アダプタを作成している人から反応があり、やはり安物のアダプタは当たりはずれのあるっぽい

なので、数が欲しい人以外は動作実績がちゃんとあるものを購入するのがよさそう。

ちなみに、プレイの様子はこんな感じ。

担当

自分がスタンドアロン(一人用)の作成(アプリの流れを作る)
Iさんがfirebaseによる連携機能
MさんがAI周り
Sさんは発表用プレゼン資料作成。

自分がやったこと

まずは、アプリの流れを作らないといけないので、画面遷移を作成。
その後、ドット絵を用意しつつコードを書いていく。

タタコンからの入力

タタコンについては、gamepads を使用。
Androidで使う場合、MainActivity.ktに追加の記載が必要となるが、Readme.mdのAndroid Integrationに書かれている通りにやれば問題なく使用できる。
あとはこんな感じで入力に合わせた処理を作成。

    GamePadUtil.initialize().then((value) {
      Gamepads.events.listen((event) {
        switch (event.key) {
          case "KEYCODE_BUTTON_A":
            break;
          case "KEYCODE_BUTTON_B":
            // 右ドン
            if (event.value == 1.0) {
              _donTouch();
            }
            break;
          case "AXIS_X":
            break;
          case "AXIS_Y":
            break;
          case "AXIS_Z":
            break;
          case "KEYCODE_BUTTON_L1":
            // 左カッ
            if (event.value == 1.0) {
              _kaTouch();
            }
            break;
          case "KEYCODE_BUTTON_L2":
            break;
          case "KEYCODE_BUTTON_R1":
            // 右カッ
            if (event.value == 1.0) {
              _kaTouch();
            }
            break;
          case "KEYCODE_BUTTON_R2":
            break;
          case "KEYCODE_BUTTON_RZ":
            break;
          case "AXIS_HAT_X":
            // 左ドン
            // -1.0
            if (event.value == -1.0) {
              _donTouch();
            }
            break;
          case "AXIS_HAT_Y":
            break;
          case "AXIS_LTRIGGER":
            break;
          case "AXIS_RTRIGGER":
            break;
          case "AXIS_RGAS":
            break;
          case "KEYCODE_BUTTON_START":
            break;
          case "KEYCODE_BUTTON_SELECT":
            _keyinfo = "";
            break;
        }
        setState(() {
          _keyinfo +=
              "ID :${event.gamepadId} / KEY:${event.key} / VAL:${event.value}\r\n";
        });
      });
    });

それよりもNDKのバージョンをそろえたりしないといけないのでそちらの方が面倒だった。

太鼓の音

次に太鼓の音を出す。
audioplayersを使っていたのだが、連打すると再生が完了のイベントが発生しないケースがある。
悩んで取り合えず後回しにしたらMさんからのナイスアシストでsound_effectをつかうことで回避できたとのこと!
チームでやってるとこういったのがうれしいし楽しい。

ちなみに太鼓の音は以前お祭りで使っている太鼓の音をサンプリングした物があるのでそれを鳴らす。
今年もサンプリングしなおしたけどいい感じにできなかったのでまたリベンジしたいことろ。

ゲームの流れ

こんな感じとホワイトボードに書いて共有

結果的にマンモスは出せてないんですが・・・
最終的にはこんな感じ

スタンドアロン

オンラインの場合は、スタンドアロンの処理を順番に行うイメージ。
ただ、readyで自分の番になるまで待機する感じ。

ドット絵

時間が限られていたのでかなり適当になってしまった。
まぁ、気合が入ってもすごくよくなるわけでもないけど・・・

ドット絵はTAKABO SOFTさんのEDGEで作成。
ゲーム中の文字はドット絵としてかいておいて利用。
text.png

点数の数字は数字に合わせたドットで書いた数値を表示しています。
char.png

それにしても、プレイヤーの絵が太鼓を叩いているように見えない・・・w

ちなみに背景はこんな感じ
play_bg.png
グラデーションの手抜き感がすごいw

気が向いたらもうちょっとちゃんとしたドット絵に直そう。
(ヒーローズリーグに参加してもいいしね)

今年は何がダメだったのか

終わった後の懇親会で、「デモが良かったら行けてたかも」と言われたのでデモが失敗したことは確か。
頂いたご意見として以下の2点だった。

  • 叩いているのがわかりづらかった
  • meetが遅延したりして連携機能がわかりづらかった。

機能のデモでOBSでmeetをつなげて複数人でリアルタイムでやろうか相談していたが、失敗を恐れて単独で連携デモをする方向に判断したのが失敗した・・・(判断したのオレなんだよなぁ・・・)
meetをOBSで4人並べても遅延してうまくいかなかった可能性もあったんだが、チャレンジすることを恐れたことが敗因だったなぁと。
Iさんが連携部分作ってて近所だったから、落ち合って連携の動画取ればよかったなぁ・・・と反省。

最後に

審査員である株式会社バンダイナムコスタジオの山口さんからコメントを頂けたのである意味勝利でしょう!
記録より記憶に残ったに違いない!

あと、今年でこのメンバーでは最後にしようかと話をしていたけど、さて、どうなることやら・・・
アンケートに最後って書いたけど、辞める辞める詐欺になりそう。
まぁ、仮に出ないとなったらソロで出てみようかなと思ってる。
で、次回参加できれば10回目なので、10周年記念になるんだよなぁ・・・w
だいぶ徹夜が辛くなってきてるけど・・・

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?