情報妖精の競プロ日記

AtCoderの問題に対する方針を主に書きます

#東方ゲームジャム に参加しました

touhougamejam2020.web.appに参加しました!
3日という短い時間だとゲーム作るの難しいです……。

東方ゲームジャム2020とは?

3日(74時間)でゲームを作って投稿する企画です。
テーマを「夏」「お祭り」「鬼形獣」「増える」から選び、そのテーマに沿った東方二次創作ゲームを作ります。

やったこと

1日目(8/20 12:00 - 8/20 22:00)

10:00 まず、最初はゲームのアイデアを決めました。
花火大会をやりたいなーという想いから、花火大会とは何か、どういうことをやるかを列挙して考えていきます。

自分で弾幕をカスタマイズし、その美しさを競います。
採点方法を色々検討したけど、そもそも3日で終わる気配が無かったので却下。

面白さ分からん、却下!(笑)

  • イデア3. 別のゲームをクリアすることで花火大会が盛り上がる

例えば弾幕音ゲー(ex. オンゲキ)なので、音ゲーでCOMと対戦して弾を花火に見立てるとか。
ここで、弾幕と花火という要素を一緒にする必要が無いことに気付き発想変更。

例えば東方二次創作で最高に面白いゲーム、ヨイヤミドリーマーはワンダークリッカーズが元ネタであることが知られています。
同様にレトロゲームで良さそうなゲームを選んで、それを用いて花火を打ち上げると良さそう……?
最初に考えたのはXIゴだったけど、流石にこれは厳しそう。
同様の連想からボンバーマンシリーズを思い浮かべて、最終的には花火を連鎖消しする倉庫番という発想になりました。

14:30 アイデア列挙
倉庫番っぽくするとして、どんなゲームにするか?
元ネタは萃香のおかたづけとして、どのようなゲーム性にするか考えます。
まず花火大会ということで、花火玉を動かし、連鎖消ししたら花火が打ちあがるというアイデアを思いつきます。
せっかくのドット絵素材も使いたいよね、ということで、花火が打ちあがると観客が増えるという発想が生まれます。
後は細かいゲームシステムを検討し、やはり花火が打ちあがるシステムを作らなきゃダメかなという結論になりました。
なお、アイデア検討などはDiscordを使い、図はノートやホワイトボードに記載して考察するという形式を昔から取っています。
f:id:CuriousFairy315:20200823190756p:plain

18:00 環境構築
開発環境はJava、今回は慣れ親しんだSwingではなく初めて使うJavaFXを使おうと考えます。
まず環境構築をして、JavaFXを使える環境を整えます。
今回はEclipse+Scene Builderを用いて制作を行いました。
f:id:CuriousFairy315:20200823193505p:plain
最終的に動作確認をして、とりあえずそれっぽいUIが簡単に作れることに感動。
f:id:CuriousFairy315:20200823194019p:plain
22:00 就寝

2日目(8/21 04:00 - 8/21 20:00)

まずゲームのコンセプト上解像度が異様に低いので、サイズ変更機能を実装しながらJavaFXに慣れようかなと。
とりあえず自サークルロゴを表示することを目標に、コード書きに挑戦。
まぁ始めての開発環境なんて当然バグを引きまくり、ロゴ表示できたときにはもう深夜……。
完成したロゴはゲーム最初に表示されるので、是非見てみてください。

3日目(8/22 03:00 - 8/22 24:00)

03:00 まずは花火の実装。
花火は煌いたり自然に消えたり、大きさも色も良い感じの乱数で生成し、更に爆発時の光源処理(画面が明るくなる)などを実装しました。
f:id:CuriousFairy315:20200823194832p:plain
タイトル画面でよく観察すると分かるのですけど、暗い色が生成されないようにしたり、花火の間隔とかも色々指定しているのが分かると思います。
まぁまだ作り込めるところは色々あると思うので、これが完成形という訳ではないのですが……!
3日で、しかもゲーム部分ではないのでこれが限界……。
ちなみに、ここからはまとまった睡眠ではなく2時間程度の仮眠を数回取ることで集中力を回復する方法を取っています。

16:30 タイトル画面作り
どうせ流れで実装できるので制作開始、パズルはその間に同時進行で考えます。
セーブデータとか平文で良いかな、ということで、セーブデータをproperties、ゲームデータをxmlで外出し。
例えばこれはチュートリアル1面のゲームデータ。

<?xml version="1.0" encoding="UTF-8"?>
<stage type="puzzle">
	<event>tutorial1</event>
	<map>
1.....1
.......
...S...
.......
1.....1
	</map>
	<spectator>6</spectator>
	<fire>4</fire>
	<stat id="0" type="clear"></stat>
	<stat id="1" type="spectator">10</stat>
	<stat id="2" type="move">20</stat>
	<turn>20</turn>
</stage>

こんな感じでまずゲームデータを作り、これを読み込むプログラムを構成していく形式に。
これだと自然にトップダウンに設計して、それがそのまま動くので簡単なゲームが作りやすくなります(外部からデータが丸見えな欠点があるので、販売ゲームなどを作る際には工夫を施してください)。
というわけで実際に構文解析しつつ、まずはstatなどを読んでステージ選択を自動で生成できるように。

19:00
そろそろ後が無いので、赤の魔剤(モンスターエナジー)の力を借りて本気モードに。
今までは綺麗でバグ修正が楽なオブジェクト指向コードを書いてたけど、ここからは動けば良いやの精神で本気出します。
レイアウトも、綺麗さ重視を捨てて表示できれば勝ちの方針で。

4日目(8/23 0:00 - 8/23 12:00)

03:00
タイトル画面ほぼ完成、ゲーム部分作成へ。
と言ってもゲームデータ読み込んで配置するだけ……というところで、キャラチップもマップチップも16xの素材は出回っていないことに気付きヤバイことが発覚。
気合でドット絵を描き、何とか間に合わせにいきました。
下はゲームで使った魔理沙のドット絵、50分で書いてた(ワンドロじゃん(?))
f:id:CuriousFairy315:20200823202417p:plain
私自身は中学校の美術は五段階評価で1を取っていた位に絵心が無いので、即興ドット絵はかなり辛い……。

10:15
パズルが無事動き、観客数などでスコア評価できることも確認完了!
ということで完成だけど、まだチュートリアルとなる部分が完成しておらず。
流石に操作説明無しにこのゲームやるの不可能でしょ、ということで実装したいけど、もう2時間もない……!
とりあえず動画やスクショ取ってアップロードを行いつつ、チュートリアルを平行して作成へ。
メッセージボックスだけなら間に合うと判断、直接コードに書き込んでなんとか11:55完成。
大急ぎでコンパイルしてzipにして配置、11:59に完成へ。
f:id:CuriousFairy315:20200823204124p:plain

ゲームの感想

パズル要素は良いのだけど、UIがかなり悪い気がするなー。
DSを意識して開発したけど、キーコンフィグなどの実装が間に合わなかったこともあってむしろ悪手だったか。
また、正直言ってチュートリアルの質がかなり悪くて、もっと改善できるところがあったと反省。
ただコンセプトは悪くなかったと思っていて、適当に改良してパズル増やしたらどこかに出そうかと考えています。
もちろん東方ゲームジャム専用素材は他の何かに置き換えるよ、ぶっちゃけこれ使い勝手悪いし

ゲームジャムの感想

今回のゲームジャムを通して、早作りにおける自分の課題がいくつも出てきました。
例えば今回の東方ゲームジャムの上位勢を見ていると、やっぱり早い人は早々にゲーム部分を作れるだけの素材を持っていて、更に最初からゲームを作るだけの知識(ここで知識とは、最初のUIを即興で作れるような知識を指します)を持っていることが分かります。
これは何回かゲームを作ってライブラリを洗練させていけば自然と身につく技術であり、というか私もSwing環境なら30分でブロック崩しくらいは作れますし多分できないとヤバそう。
ということで、まず初手環境開発は明らかに行動として最悪なので、ちゃんと知識の幅を増やして知ってる知識だけで開発できるようにしよう!
で、次にゲームについて。
今回のゲームの問題は、ユーザーフレンドリーではないことです。
正直言って見づらいマップチップ、攻略条件が分かりづらい、着火周りがかなり不便な操作を強いてるなど、気を付けていれば改善できそうな部分が幾つもあることが分かります。
また、正直ゲーム全体が重い(スペック的な意味ではなく、操作に対して反応がすぐに返らないシステム)のもまずかったかなと。
上位の人の射的ゲームなんかはかなり爽快なアクションゲームと化していて、短時間のゲームならこっちの方がユーザーの幸福度を高めることができるように思えます。
まぁなんにせよ操作が直感的でないのは本当に改善点なので、これはどうにかすべきでした……。
導線となるチュートリアルを作り込むのは時間的に厳しいので、どちらかというと操作キーなどが常時表示されたり、すぐに状況に応じたヘルプが表示されるようなUIを心掛けた方が良いのかもしれません。
また今回はテストプレイが足りていなかったのも問題で、やはり6時間以上の余裕は確保した上で他の人にテストプレイを依頼すると完成度が上がるように思えます。
これらの知見を活かし、またどこかでゲームジャムに参加してみようと思います。

最後に、完成したゲームはこちらに置かれています。
touhougamejam2020.web.app
もし良ければ遊んでみて、感想をくれると嬉しいです。