2014年3月24日月曜日

Global Mathのゲーム制作をしてプログラマ視点で思ったこと

前回のネオブログ!

お話の前提としては、前回の投稿

数学的思考力ゲームを作って賞をいただいた話

をご覧ください。
作ったゲームは以下で公開しています。

THE SUGOI NINJA

ぜひ遊んでみてくださいね♡


今回

技術的な話と、制作においてプログラマ視点で思ったことを、覚えている範囲で書き綴っていきます。
ディレクタとゲームデザインやエディタも兼任していたのですが、一応その辺は分離して書いていくつもりです。

自分用の備忘録としても、ですね。後半ほぼ愚痴ですが…w
一応、今後このプロジェクトに参加しようかと考えている学生の参考にもなったらいいなーと。たぶん育っていくプロジェクトだと思うので。

ゲーム実装

主な要件は以下の通りでした

  • JavaScript + HTML5
  • enchant.js推奨
  • (プラットフォームとして、将来的にはタブレット対応予定)

「なるほど、enchant.jsね……マジか」
「よし、tmlib.js使おう」

という感じでライブラリはtmlib.jsを採用。
こちらについては本当に素晴らしいライブラリだったとしか言うことはありません。

ただ、CSSでいうz-indexの入れ替えが用意されていないのが困った。調べても、同じ問題に当っていた方は見かけて解決まで辿り着いていたっぽいけれど、実装自体は見つからなかったので、Qiitaあたりに書こうかなと。

あとサウンド周りがよくわからなかった、というか締切日最後の2時間くらいで実装したので、普通にWeb Audioを直接叩いてますが、きっとあとで直します。

それとタブレット対応という意味でも、ライブラリのおかげで実装時は一切気にせずクリア。そもそもモバイル向けに設計してないから少しボタンが小さいけれど、スマートフォンでも動作可能を実現できた。
ただしpointingendの挙動に不満があるので暇見てフォークぶっ刺すかissue投げるかしようかと考え中。ボタン外にドラッグしてからのクリックエンドにも反応されちゃうのが、間違って押したときのキャンセルができずにユーザビリティ悪いなぁ…という。

なんか悪いとこばかり並べてしまったけど、ほんと総じて素晴らしいライブラリです。HTML5 Canvasでなんかやりたい人には超おすすめです。たぶん今年は大学で布教しまくります。できればコミュニティに貢献できたらとも考えています。


API実装

問題はこっちです。
Twitterで相当ブチギレてた。
だいぶキてた感じの2月末から3月上旬だった。

  • API通信に必要なデータをlocation.searchで取ってる
  • インラインフレームで埋め込まれるゲームとAPIエンドポイントが別ドメイン
  • にも関わらずAccess-Control-Allow-Originが設定されていないっぽい←???
  • サンプルコードは闇実装

これ系は素人の私でも、さすがにやばいだろ…と思わせるだけの何かがあった。
締め切り前、散々中の人とメールでやりとりし、たぶんいろいろやばいよっていう話と、実装怠いからAccess-Control-Allow-Originしろっていうことを言い続けましたが、まあ大企業らしい対応をいただきました。中の人はそもそもよくわかってなかったっぽいし、請けてる開発会社もいったいどんな所なんだろうと…ある意味勉強になりましたよ。

暇な人はぜひ中身見て脆弱性でも探してください。
Global Math

ちなみに、最終的には大変不本意ながら、サンプルコードの闇実装を引用してラッパーライブラリを作りました。
https://github.com/noir-neo/neoGMapi/blob/master/js/neogm.js
今度プログラマにヒアリングを行ってくださるらしいので、たくさん意見してきたいと思います。


それとクリエイター側で自由にデータを保持できないのがブチギレ。
例えばぼくらのゲームではサブクエストを各レベル2つ用意しているから、それのクリアフラグを保持したかった。
  • 勝手に使っていいプロパティが用意されてないかな?
    • →ない
  • ハイスコアというプロパティがあるから、これの数字を調整すればクリアフラグの保持もできるな?
    • →ハイスコアとは1回のプレイの累計スコアのこと(←?????)
    • →各ステージごとではない
  • boolの2進数をサブクエスト2つ*15ステージで30桁→10進数(送信できるスコアは10桁までだから)に直してスコアにぶち込んでやる!!
    • →送ったスコアが足されていくから数字が合わない
  • ↑の計算方法で、プレイの最初に送るスコアは生、それ以降は前回との差の数字だけ送る
    • →やっと解決!!
あとリプレイデータを保存して欲しいですって言ったのも当然無理。
THE SUGOI NINJAのリプレイデータは、ステージ番号と、8方向の移動に数字を割り振ったらそれの配列だけで保持できるし、実現できたら分析と改善に役立てられてとてもよかったのだけど。

つまり何が言いたいかというと、闇な実装をさせる割にクリエイター側にとってメリットがない。
プレイ時間とか試行回数とかまとめたデータはいただけるらしいけれど。どうも考えのズレを感じます。

もっと言ってしまえば、プラットフォーム自体にクリエイターにとってのメリットが少ない。
今のところ利用者が多いわけでもないし、今どき自作ゲームを公開する場所なんていくらでもある。
学生を良いように使ってやろうっていう魂胆が見えるのが非常にムカつきましたね。クリエイターを舐めてるタイプですね。
まあ、見事に使われたわけですが…。別に利用権をあげたくらいで、入賞商品として少しですがギフトカードもいただいたし、許してやろう。良くも悪くも勉強になった。


まとめ

後半は散々ネガティブなことを書きましたが、コンテストに参加しての変な意味での最大のメリットは期限があるということだったと思います。必要に駆られて時間に追われてやるのはスキルアップにはとてもいいです。大人の人に向かって生意気を言うのもいい経験です。
また別の話ですが、お隣の大学と交流しながら中間発表とかに混ぜてもらった事は、とても良い経験でした。

そんなわけで、何か作りたいけど何を作ったらいいかわからない、なんて人には一つの選択肢としてはおすすめです。これはなんのコンテストでも一緒かもしれないけど。逆に言えばこれに参加することに特別なメリットってやっぱり見つけられないなぁ……
仮に後輩に「Global Mathコンテストってどうなんですか?」って聞かれたら、答えに窮するだろうなぁ……

んー結構過激なこと書いたので中の人に見つかったらどうしようかとww

ネタとしてはまだゲームデザインに関するところが残っているので、また暇なときに書きます。
では。

2014年3月22日土曜日

数学的思考力ゲームを作って賞をいただいた話

こんばんは、ねおりんです♡


突然ですが、春休みの模様をダイジェストでお送りします。


まずですね、ベネッセコーポレーションのGLOBAL MATHという数学的思考力ゲームのプラットフォームがありまして。。
まあ、数学的思考力ゲームとはなんぞやという説明はこちらに譲ります。

それで、そこのコンテストがあるということで、いろいろあって参加することになり…

とりあえず優秀なメンバーをスカウトしたわけです。

  • @shelf703
    • プロデューサ
    • (のはずがいつの間にかグラフィッカになっていた)
  • @maku693
    • インターフェース・デザイナ
  • @yuz
    • グラフィッカ

以上3名と、私がディレクタ兼プログラマとして、4人で、1月くらいから開発していました。


そして2週間前の3月7日(金)がコンテスト応募締め切りで、昨日21日がコンテストの成果発表会だったわけですが……

大変光栄なことに「開発優秀賞」というものをいただきました。(まず入賞は当然だとチーム全員が確信していましたがww)


最優秀賞ではなかったのは少し悔やまれますが、まあ用意されていた賞の中では妥当なところだろうと、満足しています。

それで、肝心のゲームをぜひ遊んでいただきたいのですが!
ベネッセの中の人が、いつまで経ってもアップしてくれない。
コンテスト発表会前にはアップするっていう話だったような気がするんだけどなぁ……

というわけで、


THE SUGOI NINJA


自分で上げた。

「THE SUGOI NINJA -ザ・スゴイ・ニンジャ-」は、マス目・ターン制移動のゲームです。敵は規則的に移動します。先を読みながら、敵に見つからないようゴールを目指してください。

メインターゲットは小学校高学年としていますが、ゲーム性自体は大人まで広く遊んでいただけるものになっていると思います。ぜひ頭を使いながら楽しく遊んでいただけたらと思います。
よろしければフィードバックをいただけるとうれしいです!

スマートフォンでも一応動作します!(実装上は対応しているけど、モバイル向けに設計はしていないので操作に少しストレスを感じるかもしれません)

ブラウザ対応は

  • IE音出ない
  • Firefox動作重い
  • など

まだもう少しだけアップデートは続ける予定です。


また、ライブラリとしてtmlib.jsをお借りしています。
とっっっってもコーディングが楽になって、プログラマとしてはかなり救われました。作者のphiさんはじめコミュニティの皆様には大変感謝しております。


次は制作秘話とか、愚痴とか、溜まったノウハウとか、気が向いたら書くかもしれません。
ブログちゃんと使っていこう…

では。