#えむけーろぐ

間違った事を書いていたらやさしく教えてください

Global Game Jam Sapporo 2016に参加した #ggjsap

f:id:mktakuyax:20160202175337j:plain

はじめに

Global Game Jam Sapporo 2016に参加してきた。

Global Game Jamとは、イベント開始時に発表されたテーマを元に、48時間でゲームを作り、完成したゲームを全世界に公開するハッカソン。2015年には80ヶ国に渡る518の会場で開催されたらしい。(詳しくは公式サイトを参照。)

今回僕が参加したのは札幌会場。この会場では、参加登録時のアンケート(開発経験やスキル、イベントに対する意気込みなどが聞かれた)を元に運営側でうまいことチームを編成してくれる。

僕は、UNIX☆Webチームというところに配属された。他にもこんな感じで、技術領域ごとにわかれた11のチームがあった。

つくったもの

UNIX☆Webチームでは、「Roque」というブラウザで動くゲームを作成した。

Roque

f:id:mktakuyax:20160202174505g:plain

ロボットが主人公のローグライクなゲームで、Robot + Rogue-likeでRoqueということだったはず。qがどこから来たかは覚えていない。

出来る限り少ない歩数で、左上のスタート地点から右下のゴール地点にたどり着くゲーム。矢印キーかHJKLで移動可能で、一歩移動するごとにロボットのバッテリーが減る。マップに落ちているバッテリーを拾うとバッテリーが回復し、敵と重なると重なっている間バッテリーが減り続ける。バッテリーがゼロになったらゲームオーバー。ランキング機能もついているので、ぜひ遊んでみてほしい。

スマートフォンタブレットには非対応で、さらにIESafariだとうまく動かないという話もあるので、できればPCのChromeからのアクセスを推奨。また、デプロイ先のHerokuは無料プランなので、もしかしたらプロセスが寝ているかもしれない。そのときは、また時間を置いてからアクセスすると良い。

参加のきっかけ

参加のきっかけは、クラスメイトでUnity使いの@pome_11に誘われたことだった。ゲーム開発やったことも無いし興味もあまりなかったんだけど、まぁハッカソンに参加したことなくてその空気を味わってみたかったし、ガチ勢でなくても良さそう(もちろんガチ勢もいて、チームの割り振りもガチ度具合に応じて運営の人たちが考えてくれているっぽい)だったので軽い気持ちで参加することにした。

UNIX☆Webチーム

僕達のチームは、全員*nix使いだった。OS XUbuntu、そしてArch Linux使いがいた。

詳しいメンバーは下のリンクを見てほしい。

Roque | Global Game Jam®

技術的な話

リポジトリはここにある。

ggjsap-2016-t3/main-game: This is a game.

ランキング機能のサーバーも別リポジトリであったんだけど、最後にひとつに統合した。

ゲーム開発経験のあるメンバーが少なく、またUNIXチームとはいえ環境がみんな違ったので、フレームワークにはまともなブラウザさえあればなんとかなるenchant.jsを選んだ。たたき台を@ttata_tritさんが作ってくれた後は、今回のイベントのメインであるゲーム部分については全員がjsでコードを書けていたと思う。

そして、それぞれのメンバーの尖った部分も活かすことができていて、ゲームに使うドット絵は@ttata_tritさんが描いてくれたし、BGMや効果音は@manzyunさん@homomaidが、ランダムマップ生成や難易度調整などアルゴリズムっぽい所は@yassu0320さんと@nasa9084さんのお二人が担当してくれた。普段Rubyを書いている僕と@toshiemon18も、ランキング機能のサーバー側を一緒に作った。

ランキング機能のためのサーバーは、Sinatraで作ってHerokuにデプロイした。僕と@toshiemon18との共通言語がRubyだったのと、この要件だったらRails使うまでも無いなという判断からである。僕が趣味で作っていた別のSinatraアプリからいろいろ拝借して開発を開始したので、素早くサーバーを準備することができた。

メンバー全員が普段から*nixを使っていることもあり、開発メンバー全員がgit / GitHubの基本的な使い方を知っていたので、当然開発にもGitHubを利用した。僕は、チームで開発をするという事そのものや、開発フローみたいな事にも興味があったので、PRの取り込みやコンフリクト時の対処など、GitHub関連のもろもろを担当させてもらった。GitHub flowっぽい開発フローで、たたき台だけ先に作ったら、あとは各々がブランチ切ってどんどんPR出してく感じ。ToDo管理もGitHub Issueを使った。

コミュニケーションツールにはSlackも使った。本番2週間前くらいにやった事前ミーティングの時にSlackチームを作って、技術的な情報の交換や雑談なんかをしていた。当日も、ファイルのやり取りや軽いコミュニケーション、コードレビューなどに使っていた。

GGJ2日目(土)の夜の時点ですでにゲームの重要な部分は完成していて、最終日はそこへどう肉付けしていくかと、バグ潰しや難易度調整に時間を費やす事ができた。

上にも書いたけど、メンバー全員がjsでのゲーム開発という新しいことにチャレンジでき、同時に自分の得意分野を活かすという、一度で二度美味しい思いを出来たので、とても良かったと思う。

まとめ

ちゃんとゲーム開発するのは始めてで、しかもこのイベント限りの即席チームということで不安だったけど、ゲーム開発そのものも楽しめたし、すでに持っていたGitHub関連やWebっぽいことという自分の知識も活かすことができて最高だった。

懇親会でも、「遊ばせてー」と来てくれる人が何人もいたり、「ちゃんとゲームとして成り立っていてすごい」と言ってくれる人、さらには「もう少しバグ潰ししてやれば、App Storeで売り物として出せるんじゃない?」とまで言ってくれる人もいて、とても良かった。

UNIX☆Webチームのメンバーは最高で、今回に限らずたまにご飯行ったり、一緒にコード書いたりしたいと思う。

来年もぜひ参加したいです。運営・参加者のみなさま、ありがとうございました!