2018年6月21日 | ブログ記事

ハッカソン参加記2018 チーム「生命科学基礎」

xxkiritoxx

はじめに

2018年6月10日の部内ハッカソンで「リア充(数学)爆発しろ」というゲームを作りました。右から関数が流れてくるので左から演算子を作用させて0にする、ナブラ演算子ゲームとシューティングを合わせたようなゲームです。本記事はそのハッカソンの参加記になります。

メンバー

xxkiritoxx(プログラム)
tako(プログラム)
nambatsu(雑用)
Hinaruhi(雑用)
ちなみに我々のチームの名前は「生命科学基礎」です。理由は僕が生命科学基礎第二1の単位を落としたからです。

開発経緯

最初は作るゲームのテーマが全然決まらなかったので、まずジャンルを決めようという話になりました。シューティングなら実装が軽そうだなあと思ったのでシューティングに決めました。というか僕がゴリ押しました

アイデアを生み出すには完全に自由であるよりも制約があった方がよい、というのはよく知られた話です。ジャンルを決めたことでイイ案が上がってくる、あるいは自分でイイ案が思いつくといいなあと考えておりました。

今回のハッカソンのテーマは「かえる」と「ます」です。

「ます」・・・Math・・・数学+シューティング・・・

数字を撃って四則演算させるのは?それはあまりにありきたりだなあ・・・

じゃあ演算子を撃って関数を消すのは・・・?

・・・

コレだ!!!!!!!!!!!!!!!!!!!!!!!!!!

というのを一瞬で思いついたのでコレで行くことにしました。我ながらいいアイデアだと思いました。

ルールは上に書いた通り「関数に演算子を作用させて消す」というものです。ただし「消す」とは関数を00にすることを指します。また、ナブラ演算子ゲームの方式をマネして、定数倍は無視することにしました(例えばcosx\cos xの導関数は本来sinx-\sin xですが、本ゲームではsinx\sin xとして扱います)。

しかしこのアイデアは一筋縄ではいきません。僕は自動微分(あとで知ったんですがこういうのは一般的に数式微分というらしいです・・・)(関数をコンピュータに渡すと微分してくれるアルゴリズム)を実装したことがないので、登場させる関数や演算子を適当に制限する必要がありました。

最終的に登場する関数はxn(nZ),ex,logx,sinx,cosxx^n(n\in\mathbb{Z}),e^x,\log x,\sin x,\cos xの5種類、登場する演算子は,limx0,limx,limx\nabla,\lim_{x\rightarrow 0},\lim_{x\rightarrow \infty},\lim_{x\rightarrow -\infty}の4種類に決めました。これらの関数は微分や極限の計算が(有限通りを全て書き出せるという意味で)容易だからです。

例えばtanx\tan xnn階導関数を綺麗に書き表す方法が存在しないのでボツになりました。演算子も当初は不定積分dx\int dxも考えていましたが、例えばlog\lognn回積分したものが綺麗に書けないのでボツになりました(それ以外にも問題はありますが)。

こうしてゲーム内容を決めて我々は当日に望むことにしたのであった・・・

ちなみに開発環境はDXライブラリです。理由は僕が使えるからです。(は?)

当日

とてもつらい

言い訳をするとGoogle Code JamのRound3が前日の深夜にあったんですよ。僕はすぐ撤退したんですけど(は?)

睡眠が全然足りないので朝からオレンジ魔剤と「Kickstart」という最近出たエナジードリンクを1本ずつ飲んで開発開始しました。とはいってもチーム開発の経験が皆無なのと、シューティングで「自機」「敵」「自機の弾」あたりを何人かで分散して書くとかえってつらそうだと思い、その辺の処理は全て自分1人で書くことにしました。プログラム担当のtako君にはとりあえずタイトルとリザルトを作ってもらうことにし、残りの2人にはリソースをかき集めてもらうことにしました。

12時頃には大体のクラス作成が完了し、13時半頃にはネックだと思っていた「関数を微分する」という関数の実装が完成(有限通りなのでラクでしたが、この関数だけで40行も使っていました)。しかし「画像を表示して動かす」といった目に見える進捗が無かったので、チームメンバーは(大丈夫かよ・・・)という様子でした。僕自身も結構焦っていました。

お昼は歌志軒に行き、Kickstartをもう1本キメて進捗再開。nambatsu君が集めてくれた画像を読み込んで実際に動かしてみる。・・・これは我ながら結構面白いゲームだ。まだ時間もあるしこのままの勢いで作ったらイケる。そう思いました。この時点で15時半頃でしたので、あとはゲームとしての体裁を整えるのに間に合うかという時間勝負になりました。

Kickstartをもう1本キメていろいろ修正し、バグを取ったらゲーム部分は4時頃に大体完成しました。あとはtako君が作ったタイトルやリザルトとmergeするだけ・・・なのですが、ここでgitに不慣れなためにアクシデント発生。コンフリクトするのは予測していたが、それを解消してプッシュしようとしてもなぜか出来ない。というかそもそもプッシュ自体が出来ない。土壇場でこれは非常に困ってしまいました。

仕方がないのでプッシュはせずにそのまま自分のPCだけでゲームを完成させ、完成品はUSBで共有することに。この決断に時間を使い過ぎたせいでBGMやSEを付けるヒマが無くなってしまいました。残念。

ゲーム概要

あなたとゲーム本体,今すぐダウンロード

十字キーで左のオタクを動かしてXキーで弾(演算子)を選んでZキーで発射

使える演算子は,limx0,limx,limx\nabla,\lim_{x\rightarrow 0},\lim_{x\rightarrow \infty},\lim_{x\rightarrow -\infty}の4種類

登場する関数はxn(nZ),ex,logx,sinx,cosxx^n(n\in\mathbb{Z}),e^x,\log x,\sin x,\cos xの5種類

関数を撃ち漏らして左に行ってしまうと上のHPバーが減り、0になってしまったら終了

1つ関数を0にするたびに得点が4点ずつ増えていき最終的に60点以上になったら得単

関数を発散させたり振動させたりしちゃうと以降は各種演算子が効かなくなって左に流れるまで黙って見ることしか出来ない

logx\log xxx\rightarrow -\inftyに飛ばすと・・・?

ちなみに

感想

やったぜ。

他のチームがアイデアもプロいし実装もプロいチームばっかだったのでアイデア賞を貰えたことが未だに信じられません。

反省点としては僕自身がgitに不慣れだったので多大に迷惑をかけたのと、それ以外にもチームでの分担があまり上手く出来なかった点でしょうか。特にHinaruhi君にはこれといった仕事を振ることが出来ず、それが個人的に結構な後悔になっています。

あとはやっぱり音を付けたかったですね。多分あるのと無いのでは全然違うと思います。

チームの皆さんは本当にありがとうございました。

この記事を書いた人
xxkiritoxx

SAOを見たことはありません

この記事をシェア

このエントリーをはてなブックマークに追加

関連する記事

2018年7月7日
ますにかえる ハッカソン参加記
yusuke
2018年7月7日
ストロンチウム ハッカソン参加記
biore
2018年7月3日
ハッカソン参戦記 - チーム†未来のSysAd†「booQ」
nagatech
2018年7月2日
ハッカソン(5班・初心者同盟)
DD
2018年7月1日
ハッカソンの開発記 - 親の子殺し -
Itu
2018年6月29日
チームおたまじゃくしのたのしいハッカソン体験記
iF

活動の紹介

カテゴリ

タグ